请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5659 工具/软件:TI C/C++编译器
您好,先生
我已将uCOS II系统移植到MSP430F5659以开发多种应用功能。 但是, 我发现在添加了一些附加代码后,程序运行异常。 我猜原因是堆栈溢出。 因此,我 选中IAR编译器选项中的启用堆栈使用分析复选框,以生成有关堆栈的映射文件。 映射文件如下所示
******************************** * * * 堆栈使用 * * * ******************************** 调用图根类别最大使用总使用 量--------------------------- --------- ------------------- 中断 56. 204 计划条目 528 528 未调用函数 1404 6214 程序条目 "__program_start":0x0.8万 最大呼叫链 *?* 528字节 (**调用图包含间接调用(例如:"_LocaleEncoding") 不带堆栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "__program_start" 0 "主" 4. "init_App" 6. "msgInit"(msgInit) 32岁 "LogSysMsgWithTime"(LogSysMsgWithTime) 52. "DBWriteSysInfoNoInfoType"(DBWriteSysInfoNoInfoType) 152. "DBWrite (DBWrite)" 20. "写入Soe" 32岁 "DBCWriteData"(DBCWriteData) 38. "ReadData"(读取数据) 32岁 "FlashRead" 30. "DF_读取" 28. "读取缓冲区" 24岁 "DataFlash_Wait_Busy" 12. "DataFlash_Read_status" 6. "FlashSPIRead" 20. "F5659SpiSend8" 36. "F5659SpiWaiteIdle"(F5659SpiWaiteId 4 中断 "ADC12_ISR":0x0.8044万 最大呼叫链 32字节 "ADC12_ISR" 20. "内存" 12 中断 "Port3_ISR":0x0.0081万e8 最大调用链 8字节 "端口3_ISR" 8 中断 "USCI_B2_ISR":0x0.8226万 最大呼叫链 8字节 "USCI_B2_ISR" 8 中断 "USCI_B1_ISR":0x0.8206万 最大呼叫链 8字节 "USCI_B1_ISR" 8 中断 "Port1_ISR":0x0.8296万 最大呼叫链 56字节 "端口1_ISR" 20. "RF_Frame_Receive" 4. "SetRFMode"(设置RFMode) 8. "SpiWriteCfg" 20. "SPI_Send_Byt" 4 中断 "TIMER2_A1_ISR":0x0.836万 最大呼叫链 8字节 "TIMER2_A1_ISR" 8 中断 "Timer1_A1_ISR":0x0.8344万 最大呼叫链 8字节 "Timer1_A1_ISR" 8 中断 "TIMER0_A1_ISR":0x0.8328万 最大呼叫链 8字节 "TIMER0_A1_ISR" 8 中断 "TIMER2_A0_ISR":0x0.0082万ce 最大呼叫链 4字节 "TIMER2_A0_ISR" 4 中断 "Timer1_A0_ISR":0x0.0082万c2 最大呼叫链 24字节 "Timer1_A0_ISR" 20. "RunSoftTime"(运行软时间) 4 中断 "TIMER0_A0_ISR":0x0.0082万c0 最大呼叫链 4字节 "TIMER0_A0_ISR" 4 中断 "USCI_A2_ISR":0x0.0845万c 最大调用链 12字节 "USCI_A2_ISR" 12 中断 "USCI_A1_ISR":0x0.0083万ec 最大调用链 12字节 "USCI_A1_ISR" 12 中断 "USCI_A0_ISR":0x0.0837万c 最大呼叫链 12字节 "USCI_A0_ISR" 12 未调用的函数 "StartupTask":0x0.0265万bc 最大调用链 *?* 180字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "启动任务" 72. "OSTaskCreateExt" 58. "OS_TCBInit" 46. "?OneBitMask32"(?OneBitMask32) 4 未调用的函数 "OS_TaskStat":0x0.251万a 最大调用链 ?*?* 94字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "OS_TaskStat" 20. "OS_TaskStatStkChk" 36. "OSTaskStkChk" 38. "OS_CPU_SR_Save" -无信息- 未调用的函数 "OS_TaskIdle":0x0002ff74 最大调用链 *?* 16字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "OS_TaskIdle" 12. "OSTaskIdleHook" 4 未调用的函数 "OSTimeTick":0x0.0026万c02 最大调用链 *?* 108字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "OSTimeTick"(OSTimeTick) 20. "OSTimeTickHook" 4. "OSTmrSignal (OSTmrSignal)" 8. "OSSemPost" 20. "OS_EventTaskRdy" 36. "OS_EventTaskRemoveMulti" 20 未调用的函数 "OSIntExit":0x0002cb20 最大调用链 *?* 12字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "OSIntExit"(OSIIntExit) 8. "OS_SchedNew" 4 未调用的函数 "OSTaskSwHook":0x3.08万 最大调用链 4字节 "OSTaskSwHook" 4 未调用的函数 "OSTmr_Task":0x0002a2ac 最大调用链 *?* 74字节 (**调用图包含间接调用(例如:"OSTmr_Task") 不带堆栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "OSTmr_Task" 30. "OSTmr_取消链接" 28. "?DivMod32u" 16 未调用的函数 "Time1sCall":0x0002c5e6 最大调用链 *?* 112字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "时间1sCall" 30. "OSFlagPost" 46. "OS_FlagTaskRdy" 28. "OS_FlagUnlink" 8 未调用的函数 "time100mscall":0x0002c446 最大调用链 *?* 112字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "时间100mscall" 30. "OSFlagPost" 46. "OS_FlagTaskRdy" 28. "OS_FlagUnlink" 8 未调用的函数 "Time10msCall":0x0002c516 最大调用链 *?* 112字节 (**调用图包含没有栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "Time10msCall"(时间10msCall) 30. "OSFlagPost" 46. "OS_FlagTaskRdy" 28. "OS_FlagUnlink" 8 未调用的函数 "Com2task":0x3.0682万 最大调用链 ?*?* 1404字节 (**调用图包含递归函数(例如:"CSecAppSev::ProcControl()") 间接呼叫(示例:"_LocaleEncoding") 不带堆栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "Com2task" 8. "ComApp" 12. "DFE_WHTask"(DFE_WHTask) 22. "DFEWHPriOnRx" 12. "DFEWHSearchComFrame"(DFEWHSearchComFrame) 20. "DFEWHAppLayerPro" 12. "ProcCallAllData" 12. "ProcSystemInfo" 134. "ReadSysInfoFrmFlash"(ReadSysInfoFrmFlash) 36. "ProcSysInfoToFlash" 20. "WriteSysInfoToFlash"(WriteSysInfoToFlash) 780 "冲刺" 16. "_PrintfLarge " 148. "_推特插入" 116 "__data20_malloc" 20. "__data20_findmem" 12. "__data20_fee" 24 未调用的函数 "Periodtask":0x2.8434万 最大调用链 ?*?* 1178字节 (**调用图包含间接调用(例如:"_LocaleEncoding") 不带堆栈使用信息的函数(例如:"OS_CPU_SR_Save")**) "定期任务" 22. "WriteSysInfoToFlashPeriod"(WriteSysInfoToFlashPeriod) 20. "ProcSysInfoToFlash" 20. "WriteSysInfoToFlash"(WriteSysInfoToFlash) 780 "冲刺" 16. "_PrintfLarge " 148. "_推特插入" 116 "__data20_malloc" 20. "__data20_findmem" 12. "__data20_fee" 24 以下函数组成递归嵌套0,未指定最大递归深度: "CPriDLink::CallAppProc()":0x2.9794万 "CPriDLink::DLSendProc (INT16U)":0x0001c548 以下函数组成递归嵌套1,未指定最大递归深度: "C0000AppV,SDC:INT16U: INT16U *)":0x0000e622 "CSecDLink::CallUData()":0x0002c308 似乎已调用以下函数,但没有堆栈 使用信息: "OSCtxSw":0x0002a48a "OSIntCtxSw":0x0002a4ce "OS000StartHighRdy":0x0002a466"OS_insigned :0x0004"OS_
问题是如何计算需要由映射文件设置的堆栈大小?
另一个问题 是IAR编译器 在我执行编译时显示3条警告(选中启用堆栈用法分析复选框)。
如何消除警告?
此致
Jent
