初始化器元素不是编译时常量,但编译器不会抛出错误

问题描述 投票:0回答:1

我正在研究嵌入式系统并从头开始实现一个

startup.c
文件。创建中断向量表后,我在编辑器上收到以下错误(我使用
clangd
作为我的 LSP):

启动.c:

#include <stdint.h>

#define SRAM_START 0x20000000U                
#define SRAM_SIZE (128U * 1024U)              
#define SRAM_END ((SRAM_START) + (SRAM_SIZE)) 
#define STACK_START SRAM_END 

int main(void);
void reset_handler(void);
/* more stuff */

uint32_t vectors[] __attribute__((section(".isr_vectors"))) = {
    STACK_START,
    (uint32_t)reset_handler,
    /* more stuff */
}

void reset_handler(void){
    /* .data, .text and .bss */
    main();
}

为什么 gcc 允许编译?

c gcc embedded bare-metal
1个回答
0
投票

为什么 gcc 允许编译?

他没有。向量是函数指针数组。

typedef void (*const pHandler)(void);
__attribute__((section(".isr_vectors"), used)) 
pHandler vectors[] = {
    (pHandler)STACK_START,
    reset_handler,
};
© www.soinside.com 2019 - 2024. All rights reserved.