您好, ti 专家:
我用的是tms320f28379d的mcu,使用ti的position manager例子库(C:\ti\controlSUITE\libs\app_libs\position_manager\v01_02_00_00\tformat),调用tformat lib去读取encoder的值。
由于ti的例子是从RAM启动,我把它改成从flash启动,并且,增加CAN通讯,去report encoder的值,同时增加led去定时显示。
我的问题是:当用JTAG烧写从RAM启动时,CAN能正确发送encoder的数值;但是,当断电重启动,并且拔掉JTAG,程序从flash启动,led显示正常,CAN通讯也正常,能收到数据,但收的encoder数据不对且全部为0,进一步调试发现,程序调用tformat libray中的PM_tformat_startOperation()无反应, tformatData.dataReady始终为0。
部分程序及测试结果如下:
figure 1: code to read encoder by calling t-format library
figure 2: code to send encoder value by CAN
figure 3: 正确 的CAN 结果when run from JTAGE,可以看出,encoder的读书有数值,turns为1,并且flag有0有1,说明变量tformatData.dataReady有0有1,进一步说明调用tformat lib成功
figure4: 不正确的CAN 结果when booting from flash,encoder读数和turns一直为0,并且flag一直为1,说明变量tformatData.dataReady始终为0,进一步说,调用tformat lib无反应。
请问,有谁可以给我建议吗?谢谢
Green Deng:
你好,可能跟memcpy函数有关,你的程序中SysCtrl.c文件里面:
#ifdef _FLASH
// Copy time critical code and Flash setup code to RAM
// This includes the following functions:InitFlash();
// TheRamfuncsLoadStart, RamfuncsLoadSize, and RamfuncsRunStart
// symbols are created by the linker. Refer to the device .cmd file.memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);// Call Flash Initialization to setup flash waitstates
// This function must reside in RAMInitFlash();
#endif
这段程序编译的时候有启用吗?
Feng CHEN:
回复 Green Deng:
应该有,我有预定义_FLASH,并且我也有单步执行看过,这段程序有进入。
再着,当从flash启动时,can和led都能正常工作。
Feng CHEN:
回复 Green Deng:
PM_tformat_systemtest.zip
附件是我的例子程序,如果方便,可以帮忙看一下。
Feng CHEN:
回复 Green Deng:
你们那边有从flash启动访问tformat的例程吗?
Feng CHEN:
回复 Green Deng:
请问下,有什么发现没有?
K Mr:
回复 Feng CHEN:
从你的程序来看,应该是你的memcpy函数没有启用
Feng CHEN:
回复 K Mr:
下图是我单步执行结果,memcpy函数确实有进入,那这样的话,如何解决我的问题呢?请指示。谢谢
Feng CHEN:
回复 K Mr:
请问下一步如何debug?
Feng CHEN:
回复 Feng CHEN:
有谁可以帮我 ,给点建议我?感谢
Feng CHEN:
回复 Feng CHEN:
我们的设备等着出机,客户一直在追,目前因为这个tformat无法从flash工作,导致产品没办法交货,请问,ti专家能否给予我指导,帮我解决这个问题?很急