用的是ccs4以上版本,在reset CPU后可以程序可以运行,而restart之后确不行,这是为什么?
另外一些全局变量是使用
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)
InitFlash();这些函数之后就会初始化值发生变化;不知道是为什么?而不是用这句语句的话,delay_us()这个函数就不能使用,有高手帮我解答一下嘛?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
用的是ccs4以上版本,在reset CPU后可以程序可以运行,而restart之后确不行,这是为什么?
另外一些全局变量是使用
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)
InitFlash();这些函数之后就会初始化值发生变化;不知道是为什么?而不是用这句语句的话,delay_us()这个函数就不能使用,有高手帮我解答一下嘛?
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)
上面这个函数的作用是将需要在RAM里运行的程序搬到RAM中,注意delay_us()就需要运行在RAM里。
InitFlash();的作用是初始化FLASH,否则你的FLASH的运行速度会慢很多。
linjun,
memcopy函数只是将flash中的代码复制到RAM中,iniflash是当程序是运行在RAM的时候,对flash的初始配置,特别是waitstate的配置。
另外一些全局变量是使用
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart)
InitFlash();这些函数之后就会初始化值发生变化;
你是指你的全局变量在使用memcopy函数后初始值会发生变化吗?正常来讲,我不认为会有这种情况发生,除非你copy的代码覆盖了全局变量所在的RAM地址。你需要查看一下page0 和 .ebss page1中的memory block有没有重叠。
Eric
谢谢您,我知道为什么了我restart不行了,是因为debug选项里面那个auto run to symbol里面restart这个选项没打勾。这里真不错,哈哈。
还有一个问题,我程序里有个pwm中断(10k),也就是100us的中断,然后我主程序for循环里面判断是否到10ms(或者100ms),如果到了运行一下显示程序;
10ms计时是通过100Us中断100次,置一个标志位;当我设置成10ms时,这个显示程序只运行10次,然后就老是跳到100Us中断程序里,一执行主程序 就跳到100us中断程序里;当我设置成100ms时,显示程序只执行一次;
给我的感觉是累积了很多100Us中断一样,pwm中断是不是在debug时自己计时的,而不会因为我单步停止而停止计时?是这样嘛?