FreeRTOS ISR上下文是否有单独的堆栈?它是固定的还是可配置的?
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 256 )
#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 512 * 1024 ) )
据我所知,这个堆栈大小专门用于一般任务,而不是用于ISR。任何见解都会有所帮助。
添加更多详细信息:这是一个独家的FreeRTOS端口,在社区中不可用。该架构是arm926ej-s(这可以支持完整的Linux内核 - MMU支持,但需要在其上运行RTOS)。
答案 0 :(得分:1)
ISR堆栈大小由启动代码在您的端口中配置。有两个ISR:FIQ和IRQ,每个都有自己的堆栈。
这里我搜索了一个ARM9 FreeRTOS Demo的堆栈配置,按照结果:
FreeRTOS/Demo/ARM9_STR91X_IAR$ grep -sri "FIQ_STACK"
91x_init.s: SECTION FIQ_STACK:DATA:NOROOT(3)
91x_init.s: LDR SP, =SFE(FIQ_STACK)
STR91x_FLASH.icf:define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
STR91x_FLASH.icf: block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
91x_init_IAR.s:FIQ_Stack DEFINE USR_Stack-8 ; followed by FIQ stack
91x_init_IAR.s:ABT_Stack DEFINE FIQ_Stack-8 ; followed by ABT stack
91x_init_IAR.s: LDR SP, =FIQ_Stack
FreeRTOS/Demo/ARM9_STR91X_IAR$ grep -sri __ICFEDIT_size_fiqstack__
STR91x_FLASH.icf:define symbol __ICFEDIT_size_fiqstack__ = 0x10;
STR91x_FLASH.icf:define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
这意味着堆栈大小在 STR91x_FLASH.icf 文件中定义,或者 91x_init_IAR.s 在 ARM9_STR91X_IAR演示中定义,相应的您用来构建的编译器/初创公司。