Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arm IAR工作台向量表臂CortexM4_Arm_Iar_Cortex M - Fatal编程技术网

Arm IAR工作台向量表臂CortexM4

Arm IAR工作台向量表臂CortexM4,arm,iar,cortex-m,Arm,Iar,Cortex M,我正在使用IAR IDE(v7.71)在ARM CORTEX M4处理器上开发固件 在IAR workbench中创建项目时,启动代码和向量表位于程序集文件中。但我想把向量表从.S文件改为.C文件 在现有项目中,.s文件中的矢量表如下: SECTION CSTACK:DATA:NOROOT(3) SECTION .intvec:CODE:NOROOT(2) EXTERN __iar_program_start PUBLIC

我正在使用IAR IDE(v7.71)在ARM CORTEX M4处理器上开发固件

在IAR workbench中创建项目时,启动代码和向量表位于程序集文件中。但我想把向量表从.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
此字段替换为带有向量表的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”)

如何在向量表中分配CSTACK?这样做的正确方法是什么?
在.icf文件中,CSTACK块声明为对齐8,大小为0x1000。

查看我自己的启动文件(对于v5.50),主要区别在于我在文件顶部有
#pragma language=extended
,数组元素实际上是函数指针和void指针的并集:
并集{void(*fun)(void);void*ptr;}
和CSTACK被分配给void指针:
{.ptr=\u sfe(“CSTACK”)},
。我不确定这是否有什么区别(应该没有)。谁是您的Cortex-M4的供应商?人们可能会想知道,为什么您要尝试在C中实现一个向量表,并确保它构建正确,并链接到正确的位置,而这在汇编中是如此微不足道。CSTACK从何而来?链接器脚本?你能不能把它设为这个设备的最高内存?0x2000000或您拥有的任何数量的ram?使用gnu工具,您可以只拉入在链接器脚本中创建的变量,您不能在IAR中这样做吗?