【分享】+F2812内存结构分析

[复制链接]
1524|3
 楼主| Zoozo 发表于 2013-12-24 08:12 | 显示全部楼层 |阅读模式
本帖最后由 Zoozo 于 2013-12-24 14:27 编辑

在前段工作中,用dsp2812移植协议的时候,遇到一个问题,在一个结构指针,指向一个8位数组时候,发现出现问题。即调用结构中定义16位的变量,并不是想象中的,指向8位数组的两个字节,而是8位数组的一个字节。
后来仿真发现,2812的8位数据在内存中也是占16位的地方,只是高位为0罢了。
所以我在结构中只能把16位的数据定义成数组,即两个16位数。这样才能对应上 ,哈哈
不知道大家听明白没有,你们是如何解决这个问题的呢?

比如结构
struct A_state {
  u8_t state;
u8_t state2;  
u16_t count;
  char *dataptr;
  char *script;
};
unsigned char appdata[6]={1,2,3,4,5,6}

#define BUF ((A_state  *)&appdata[0])
这时
BUF->count 就是appdata[3]的值3。
而不是appdata[3]和appdata[4]的组合值34。
而在其他结构体系下,这个BUF->count 的值应该是34。这点需要注意!
coslight 发表于 2013-12-24 08:14 | 显示全部楼层
经验只谈啊,多谢楼主的经验分享。
 楼主| Zoozo 发表于 2013-12-24 14:22 | 显示全部楼层
比如结构
struct A_state {
  u8_t state;
u8_t state2;  
u16_t count;
  char *dataptr;
  char *script;
};
unsigned char appdata[6]={1,2,3,4,5,6}

#define BUF ((A_state  *)&appdata[0])
这时
BUF->count 就是appdata[3]的值3。
而不是appdata[3]和appdata[4]的组合值34。
而在其他结构体系下,这个BUF->count 的值应该是34。这点需要注意!
dirtwillfly 发表于 2013-12-24 20:40 | 显示全部楼层
谢谢分享,这个真是第一次知道
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部