我正在使用IAR IDE(v7.71)在ARM CORTEX M4处理器上开发固件。
在IAR工作台中创建项目时,启动代码和向量表位于汇编文件中。但我想将矢量表从.S文件更改为.C文件。
在现有项目中,.s文件中的向量表如下:
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
EXTERN __iar_program_start
PUBLIC __vector_table
DATA
__iar_init$$done: ; The vector table is not needed
; until after copy initialization is done
__vector_table
DCD sfe(CSTACK)
DCD __iar_program_start
DCD NMI_Handler
DCD HardFault_Handler
DCD MemManage_Handler
DCD BusFault_Handler
DCD UsageFault_Handler
DCD 0
DCD 0
DCD 0
DCD 0
DCD SVC_Handler
DCD DebugMon_Handler
DCD 0
DCD PendSV_Handler
DCD SysTick_Handler
; External Interrupts
DCD user_interrupt_Handler
这个fiel被带有向量表的cfile替换如下:
typedef void (* exc_ptr_t)(void);
#pragma section = "CSTACK"
#pragma location = ".intvec"
__root exc_ptr_t user_vect_table[25] =
{
(exc_ptr_t)__sfe("CSTACK"),
__iar_program_start,
NMI_Handler,
HardFault_Handler,
MemManage_Handler,
BusFault_Handler,
UsageFault_Handler,
(exc_ptr_t)0xFFFFFFFF,
(exc_ptr_t)0xFFFFFFFF,
(exc_ptr_t)0xFFFFFFFF,
(exc_ptr_t)0xFFFFFFFF,
SVC_Handler,
DebugMon_Handler,
(exc_ptr_t)0xFFFFFFFF,
PendSV_Handler,
SysTick_Handler,
user_interrupt_Handler
};
在c文件中,以下语句给出了编译错误,表达式必须是常量值。
(exc_ptr_t)__ SFE(" CSTACK&#34)
如何在向量表中分配CSTACK?这样做的正确方法是什么? 在.icf文件中,CSTACK块声明为对齐8,大小为0x1000。