2016-11-25 138 views
1

FreeRTOS ISR上下文是否有單獨的堆棧?它是固定的還是可配置的?配置FreeRTOS ISR堆棧大小

#define configMINIMAL_STACK_SIZE  ((unsigned short) 256) 
#define configTOTAL_HEAP_SIZE   ((size_t) (512 * 1024)) 

從我的理解來看,這個堆棧大小是專門用於一般任務而不是用於ISR。任何見解都會有所幫助。

添加更多詳情:這是一個獨家的FreeRTOS端口,不適用於社區。該架構是arm926ej-s(這可以支持一個完整的linux內核 - MMU支持,但是需要在其上運行RTOS)。

回答

1

ISR堆棧大小由啓動代碼配置在您的端口中。有兩個ISR:FIQ和IRQ,每個都有自己的堆棧。

在這裏,我已搜查了ARM9 FreeRTOS的演示了其堆棧配置,遵循結果:

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演示,相應地與您使用編譯器/創業公司建立。