工具/软件:Code Composer Studio
您好!
我有一个 C2000项目、其中 Fapi_setActiveFlashBank()崩溃 TMS320F28377D 的2个内核之一 。 当我连接到调试器时、一切看起来都正常、我可以通过 Can. 即使我使用 code composer 加载程序、我也会断开探头并重新启动电源、然后通过重置/重新启动或仅重新启动加载符号、一切都正常。
但是、当我断开调试器并从闪存引导时、同一软件不起作用。 经过一些调试后,我发现崩溃是在调用函数 Fapi_setActiveFlashBank()期间发生的。
我将此函数放置在 RAM 中:
组
{
ramfuncs
{-l F021_API_F2837xD_FPU32.lib}
}负载= FLASHA,
运行= RAMLS0123、
load_start (_RamfuncsLoadStart)、
load_size (_RamfuncsLoadSize)、
load_end (_RamfuncsLoadEnd)、
run_start (_RamfuncsRunStart)、
run_size (_RamfuncsRunSize)、
run_end (_RamfuncsRunEnd)、
PAGE = 0 align (4)/*可执行代码,闪存加载和 RAM 运行之间具有自动链接*/
/*分配计划领域:*/
.cinit:> FLASHA PAGE = 0,align (4)
.pinit:> FLASHA,PAGE = 0,ALIGN (4)
.text:>> FLASHA | FLASHB | FLASHC PAGE = 0,ALIGN (4)/*可执行代码*/
codestart:> begin page = 0,align (4)
AppStart:> BEGINAPP PAGE = 0,ALIG(4)
在.map 中,函数放置在 ramfuncs 部分中:
RAMfuncs 0 00080004 000009d0运行 ADDR = 00008000
00080004 00000259 F021_API_F2837xD_FPU32.lib:FlashStateMachine.obj (.text:__Fapi_setupFlashStateMachine)
0008025d 0000019d:Program.obj (.text:_fapi_issueProgrammingCommand)
000803fa 00000088:read.obj (.text:__Fapi_loopRegionForValue)
00080482 0000007f:read.obj (.text:__Fapi_checkRegionForValue)
00080501 0000007f:read.obj (.text:__Fapi_checkRegionForValueByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy
00080580 00000042:BlankCheck.obj (.text:_fapi_doBlankCheck)
000805c2 0000003a:read.obj (.text:__Fapi_loopRegionForValueByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByByBy
000805fc 00000034:Init.obj (.text:_Fapi_initiizeAPI)
00080630 0000002e:Utilities.obj (.text:_Fapi_calculateFletcherChecksum)
0008065e 0000002d:FlashStateMachine.obj (.text:__Fapi_issueFsmCommand)
0008068b 0000002c:utilities.obj (.text:__Fapi_didedUnsignedLong)
000806b7 00000025:FlashStateMachine.obj (.text:_Fapi_setActiveFlashBank)
000806dc 00000022:FlashStateMachine.obj (.text:_fapi_isAddressEcc)
000806fe 00000022:FlashStateMachine.obj (.text:__Fapi_setupSectorsForWrite)
然后、我在 CPU2初始化期间调用函数:
void main (void) { InitSysCtrl(); IpcRegs.IPCBOOTSTS = C2_BootROM_BOOTSTS_SYSTEM_READY; CAL2_InitFlash (F021_CPU0_BASE_ADDRESS) ... }
#pragma CODE_SECTION (CAL2_InitFlash、"ramfuncs"); U16 CAL2_InitFlash (Fapi_FmcRegisterType * F021BaseAddr) { U16返回状态; RetStatus = Fapi_Status_Success; //检查参数 assert (((F021BaseAddr = F021_CPU0_BASE_ADDRESS)); //增益泵信标 SeizeFlashPump(); EALLOW; //需要此函数来根据系统初始化闪存 API //频率才能执行任何其他闪存 API 操作 //当前未选中 RetStatus、因为它始终为 Fapi_Status_Success RetStatus = Fapi_initializeAPI (F021BaseAddr、CAL2_kSYSCLK_FREQUENCY); EALLOW; RetStatus = Fapi_setActiveFlashBank (Fapi_FlashBank0); EDIS; //保持对闪存泵的控制 ReleaseFlashPump(); 返回 RetStatus; }
但这对解决我的问题没有足够的帮助。
谢谢、
Clement
