Tag: xc16

GCC错误“导致节类型冲突”

为什么在尝试将两个(RAM)变量(只是它们的初始化值不同)放入同一部分时会出现编译器错误? 问题 C源: int __attribute__((section(“.in_my_data”))) _foo = 1; int __attribute__((section(“.in_my_data”))) _bar = 0; (相关)GCC编译器输出: mcve/main.c:75:45: error: _bar causes a section type conflict 链接描述文件在SECTIONS定义中包含以下行,但(致命)错误来自编译器,而不是链接器。 .my_data : { *(.in_my_data) } > data 更多的信息 更改C源以允许编译器使用两个部分允许编译通过,但是如果两个输入节被映射到相同的输出节,则链接器会生成错误。 C源: int __attribute__((section(“.in_my_data_nonzero”))) _foo = 1; int __attribute__((section(“.in_my_data_zero”))) _bar = 0; 链接器脚本: .my_data : { *(.in_my_data*) } > data (相关)链接器输出: Link Error: attributes […]

如果结构定义了uint16_t字和uint8_t字节,则数组的大小加倍

我有一个数组,每个数组的元素可以是uint16_t或一对uint8_t。 它的元素被定义为uint16_t和2 uint8_t的子数组的并集。 不幸的是,编译器(MicroChip XC16)分配的内存量应该是arrays的两倍。 typedef union { uint16_t u16; // As uint16_t uint8_t u8[2]; // As uint8_t } my_array_t; my_array_t my_array[1]; // 1 word array, for testing my_array[0].u8[0] = 1; my_array[0].u8[1] = 2; uint8_t byte_0 = my_array[0].u8[0]; // Gets 0x01 uint8_t byte_1 = my_array[0].u8[1]; // Gets 0x02 uint16_t byte_0 = my_array[0].u16; // Gets 0x0201 […]