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.
上图是我应用工程的一个stack空间使用情况,在上图中:
1. 主函数main占用了126字节空间;
2. ADC_ISR是ADC中断,执行时需要28字节空间;
3. __TI_auto_init_nobinit_nopinit_hold_wdt占用20字节;
4. __TI_decompress_none占用20字节;
5. __TI_decompress_lzss占用32字节;
6. abort占用4字节;
其中,ADC_ISR可能随时触发打断main的执行,所以最小stack空间应该要大于126+28=154字节;
请问:
1. __TI_auto_init_nobinit_nopinit_hold_wdt、__TI_decompress_none、__TI_decompress_lzss、abort分别是干什么的?在什么时候运行?计算最小stack使用量是否需要计算他们?
2. 如果启用了2个中断,最小stack应该加上2个中断函数的占用之和,还是加上2个中断函数的占用较大的那个?
1. __TI_auto_init_nobinit_nopinit_hold_wdt、__TI_decompress_none、__TI_decompress_lzss、abort分别是干什么的?在什么时候运行?计算最小stack使用量是否需要计算他们?
初始化例程是在调用 main 之前运行,所以不需要添加到所需的堆栈大小。
2. 如果启用了2个中断,最小stack应该加上2个中断函数的占用之和,还是加上2个中断函数的占用较大的那个?
Interrupt service routines从禁用中断开始,除非您明确启用 ISR 内的中断,否则不会出现nested interrupts。 所以这个问题是取决于您的代码。
__TI_auto_init_nobinit_nopinit_hold_wdt是初始化代码,这个从命名能够看出来;__TI_decompress_none、__TI_decompress_lzss、abort也是初始化时调用的吗?
__TI_decompress_none、__TI_decompress_lzss、abort也是初始化时调用的吗?
是的,前两者也是在初始化时调用,由编译器运行 run-time library 启动代码调用来初始化全局变量。
关于abort:
Abort 用来处理异常的程序终止,如果调用它,那么仅仅在loop中旋转。 以下任一情况可以调用 Abort :
1. main() 函数返回。 如果 main() 返回 exit () ,则在调用 abort () 时调用 exit ()。 在嵌入式应用程序中,单元测试程序可能会返回,但 main()一般不会返回。
2. 在运行时 EXIT () 或 ABORT () 被调用,无论是直接由应用程序调用,还是当应用程序调用的run-time library function发生错误。