给定以下链接器脚本摘录:
.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(我不能在宏中使用)?
1条答案
按热度按时间gijlo24d1#
以下变量定义解决了该错误: