打印

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

[复制链接]
1037|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

粉丝