从上周就开始做参数保存的工作,因为参数保存牵涉到2给硬件方面的知识,第一个时CAN通信、第二个时片上FLASH的操作。这2个我都不是很熟悉。CAN通信只是勉勉强强可以进行发出和接收,对于如果出现无法发出、出现物理层连接断开该如何处理,没有多大经验。只是根据以前调试串口的经验来写。FLASH操作也是如此,也是第一次写。不过还好,TI的例程写得很出色,基本上修改一下CMD文件,定义一些变量,程序就可以运行了。数据得保存和读写基本也实现。但出现了一个现象。就是再仿真器下载得情况下,CAN通信、FALSH读写可以正常运行,一旦脱机运行,can通信可以正常运行,FLASH写就出现问题。使得我百思不得其解,以为是中断问题、以为是函数逻辑问题,以为是FLASH没有解锁的问题。都一一试过了。问题还是没有解决。
实在没有办法,我已经搞了3、4天了。只好把原始的例程拿下来,细细研究,因为FLASH的库有好几个版本,有ROM版本、FLASH版本。TI的东西好是好,但是要研究透彻,没有功夫是不行的。仔细查看发现下面的几句话。
The user's code is responsible for the following:
4. Initialize the PLL to the proper CPU operating frequency.
5. If required, copy the flash API functions into on-chip zero waitstate
RAM.
6. Initialize the Flash_CPUScaleFactor variable to SCALE_FACTOR
7. Initialize the callback function pointer or set it to NULL
8. Optional: Run the Toggle test to confirm proper frequency configuration
of the API.
9. Optional: Unlock the CSM.
10. Make sure the PLL is not running in limp mode
11. Call the API functions: Flash_Erase(), Flash_Program(), Flash_Verify()
刚开始移植的时候,没有仔细看第6条和第7条。根据以前的经验来做的。
我开始没有明白CALLBACK FUNCTION的含义,想我就是写个FALSH,还要定义一个函数,是不是多余啊。但现在没办法,我就照他写的办,定义了一个回调函数,函数里面什么也没有。然后再做测试。
重新下载程序后,写FLASH函数也没有问题。看来是因为写FLASH必须有个回调函数,要不然他的在调用函数的时候,就会出错。经过一番测试,没有发现问题。
记录在这里,免得下次忘掉。