ZHCU861A March 2021 – August 2022 TM4C1230C3PM , TM4C1230D5PM , TM4C1230E6PM , TM4C1230H6PM , TM4C1231C3PM , TM4C1231D5PM , TM4C1231D5PZ , TM4C1231E6PM , TM4C1231E6PZ , TM4C1231H6PGE , TM4C1231H6PM , TM4C1231H6PZ , TM4C1232C3PM , TM4C1232D5PM , TM4C1232E6PM , TM4C1232H6PM , TM4C1233C3PM , TM4C1233D5PM , TM4C1233D5PZ , TM4C1233E6PM , TM4C1233E6PZ , TM4C1233H6PGE , TM4C1233H6PM , TM4C1233H6PZ , TM4C1236D5PM , TM4C1236E6PM , TM4C1236H6PM , TM4C1237D5PM , TM4C1237D5PZ , TM4C1237E6PM , TM4C1237E6PZ , TM4C1237H6PGE , TM4C1237H6PM , TM4C1237H6PZ , TM4C123AE6PM , TM4C123AH6PM , TM4C123BE6PM , TM4C123BE6PZ , TM4C123BH6PGE , TM4C123BH6PM , TM4C123BH6PZ , TM4C123BH6ZRB , TM4C123FE6PM , TM4C123FH6PM , TM4C123GE6PM , TM4C123GE6PZ , TM4C123GH6PGE , TM4C123GH6PM , TM4C123GH6PZ , TM4C123GH6ZRB , TM4C123GH6ZXR , TM4C1290NCPDT , TM4C1290NCZAD , TM4C1292NCPDT , TM4C1292NCZAD , TM4C1294KCPDT , TM4C1294NCPDT , TM4C1294NCZAD , TM4C1297NCZAD , TM4C1299KCZAD , TM4C1299NCZAD , TM4C129CNCPDT , TM4C129CNCZAD , TM4C129DNCPDT , TM4C129DNCZAD , TM4C129EKCPDT , TM4C129ENCPDT , TM4C129ENCZAD , TM4C129LNCZAD , TM4C129XKCZAD , TM4C129XNCZAD
若要确保程序不易受到栈溢出的影响,需要确保程序拥有充足的栈空间,这点非常重要。程序栈位于 RAM 内存中,用于在程序执行过程中存储当前寄存器值和返回地址等信息。栈溢出是一个编程错误,是指栈指针超出了为程序栈分配的空间。出现该错误时,栈读回的数据可能已被应用程序覆盖,并且数据损坏会导致程序崩溃。
若要调整 Code Composer Studio 工程的栈设置,请打开“Project Properties”,然后转到“Build”→“ARM Linker”→“Basic Options”。在列表底部,有一个“Set C system stack size”框(图 8-1)。为了确保对齐内存,请务必为栈设置使用 4 字节的倍数。
另一个修改栈大小的地方是工程的链接器命令文件 (.cmd)。在文件底部,应该有一个 __STACK_TOP 条目,可以通过编辑它后面的数值来调整栈大小。
__STACK_TOP = __stack + 512;
对于使用动态存储器分配的程序(如 malloc),以及在 RTOS 中使用动态创建的任务时,还需要分配堆存储器。堆是为支持动态存储器分配而保留的存储器中的一个独立段。可以直接在栈选项的上方找到 Code Composer Studio 工程的堆设置“Heap size for C/C++ dynamic memory allocation”。在 TivaWare 示例中,此项通常默认设置为 0。