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.

[参考译文] 编译器/MSP430F5659:堆栈计算问题

Guru**** 2587365 points
Other Parts Discussed in Thread: MSP430F5659

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/618176/compiler-msp430f5659-the-question-about-stack-calculation

部件号: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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jent,

    "Max Use"案例应定义在任何给定时间内使用的最大堆栈数量,基于此,您应该至少分配2 KB。 是否对项目设置或命令链接程序文件进行了任何更改? 我不熟悉IAR地图文件或警告,您可能需要考虑联系IAR支持以获得进一步帮助。

    此致,
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Jent,

    MSP430编译器用户指南为如何检查堆栈溢出提供了一些帮助。 请找到以下链接:
    www.ti.com/.../slau132p.pdf

    在第6.1 5章中,提到了有关堆栈和分配的一些信息,它还链接到2.14 Using hook option to check for stack overflow一节。 不过,我从未亲自使用过它,但它也许可以帮助您了解堆栈溢出是否真的导致了您的问题。