将常量转为指针致.data等段增1KB,求ATmega328P问题排查方向
常量转指针导致AVR数据段异常增大的调试问题
当我将常量0强制转换为PK16_TABLE_T*类型指针时,(.data + .bss + .noinit)段会额外增长1KB,直接超出ATmega328P的存储容量。
代码示例1(触发问题的写法)
PK16_TABLE_T* pk16_find_table_by_index(PK16_T* p_pkg, SIZE_T index) { SIZE_T offset; PK16_TABLE_T* p_table; p_table = (PK16_TABLE_T*) 0; return p_table; }
而如果把局部变量的地址强制转换为该指针,数据段大小完全正常,不会出现这额外的1KB增长:
代码示例2(正常的写法)
PK16_TABLE_T* pk16_find_table_by_index(PK16_T* p_pkg, SIZE_T index) { SIZE_T offset; PK16_TABLE_T* p_table; p_table = (PK16_TABLE_T*) &offset; return p_table; }
我该从哪里入手调试这个问题?还需要提供哪些信息才能排查出可能的原因?
附结构体定义:
/** A single entry in a PK16 package. */ typedef struct { /** Null-terminated string representing the path of this entry. */ CHAR_T path[PK16_MAX_PATH_LEN]; /** Index into the package data buffer of the start of this entry's data. */ U16_T head; /** Length in bytes of this entry's data in the data buffer. */ U16_T len; /** CRC32 of this entry's path + data. */ U32_T crc; } PK16_TABLE_T;
内容的提问来源于stack exchange,提问作者Matt Murphy
相关产品推荐
相关产品推荐

