访问链接器变量时防止GCC数组边界警告

qacovj5a  于 2023-05-16  发布在  其他
关注(0)|答案(1)|浏览(123)

给定以下链接器脚本摘录:

.log_data :
  {
    PROVIDE(__start_log_section = .);
    KEEP(*(SORT(.log_section*)))
    PROVIDE(__stop_log_section = .);
  } > FLASH

下面的C代码:

extern void *__start_log_section;
extern void *__stop_log_section;
...
uint16_t byteAtOffset3 = *((uint16_t *)&__start_log_section + 3);

我收到警告array subscript 3 is outside array bounds of 'void[4]'...note: note: at offset 6 into object '__start_log_const_data' of size 4。我可以理解为什么GCC会产生错误--我引用了一个变量(在32位处理器上大小为4),然后超出了变量的范围--但这就是链接器变量的工作方式。有没有一种方法可以抑制这些警告/向GCC表明这是可以的,而不必使用#pragma(我不能在宏中使用)?

gijlo24d

gijlo24d1#

以下变量定义解决了该错误:

extern unsigned char __start_log_section[];
extern unsigned char __stop_log_section[];

相关问题