搜索
bottom↓
回复: 15

请教一个笼统的问题:代码中把全局变量换成结构体全局....

[复制链接]

出0入0汤圆

发表于 2013-5-22 10:23:35 | 显示全部楼层 |阅读模式
程序中的变量都是一个一个定义的,后来想优化一下,把相关的变量定义为一个结构体,问题出现了:很容易死机。
以前定义成单独的变量,程序没问题。
从单独的变量到定义为一个结构体,有哪些要注意的?

举例如下:
单独定义变量:
uchar          person_weight;
uchar          person_age;
uchar          person_height;

定义为结构体:

typedef enum         person{no_sex=0,man,woman} person;       

__packed typedef struct
{
               
        uint8                Height;                                //患者身高
        uint8                Weight;                                //患者体重
        uint8                Age;                                //患者年龄
        person                 Sex;                                //患者性别
        char                  SexStr[4];
       
        float                  BSA;                                       
        float                  LBM;                               

}_Patient;

extern         _Patient         Patient;

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2013-5-22 10:24:22 | 显示全部楼层
程序没问题,后来改为结构体定义,不正常了。

出0入0汤圆

发表于 2013-5-22 10:35:16 | 显示全部楼层
把栈设置大点试试

出0入0汤圆

发表于 2013-5-22 10:45:18 | 显示全部楼层
本帖最后由 jetlib 于 2013-5-22 10:48 编辑

肯定能找到什么样的测试序列必死,然后在必死的那一步step一下就OK了。

出0入0汤圆

 楼主| 发表于 2013-5-22 10:50:48 | 显示全部楼层
DEBUG,不是直接死在哪儿,可以运行几次后就死机了。

谢谢。

出0入0汤圆

发表于 2013-5-22 10:54:52 | 显示全部楼层
typedef enum         person{no_sex=0,man,woman} person;   

出0入0汤圆

 楼主| 发表于 2013-5-22 11:21:55 | 显示全部楼层
chinabn 发表于 2013-5-22 10:54
typedef enum         person{no_sex=0,man,woman} person;

请问这句有啥问题?

出0入0汤圆

 楼主| 发表于 2013-5-22 11:23:23 | 显示全部楼层
我一直这样用,没发现问题。
稳定的程序也这样用。

出0入0汤圆

发表于 2013-5-22 11:26:13 | 显示全部楼层
typedef enum         _person{no_sex=0,man,woman} person; 一般都是这样的吧,一般习惯不要同一个名称

出0入0汤圆

发表于 2013-5-22 11:28:17 | 显示全部楼层
__packed使用不当,可能出现数据对齐访问的问题。

出0入0汤圆

 楼主| 发表于 2013-5-22 11:29:51 | 显示全部楼层
ele_eye 发表于 2013-5-22 11:26
typedef enum         _person{no_sex=0,man,woman} person; 一般都是这样的吧,一般习惯不要同一个名称 ...

好的。谢谢。再试试。

出0入0汤圆

发表于 2013-5-22 11:30:05 | 显示全部楼层
结构有个对齐的问题,上网搜就知道了,主要是各个字节不是按顺序排的,可能中间有填充字节,所以特别是用指针操作的时候要注意,很容易数错各变量的位置。

出0入0汤圆

 楼主| 发表于 2013-5-22 11:30:14 | 显示全部楼层
twitter 发表于 2013-5-22 11:28
__packed使用不当,可能出现数据对齐访问的问题。

请指点,怎么用?谢。

出0入0汤圆

发表于 2013-5-22 11:43:13 | 显示全部楼层
如果M3的话,把packed去掉,M3自动对齐。
M0就不会自动对齐

出0入0汤圆

 楼主| 发表于 2013-5-22 11:51:43 | 显示全部楼层
biansf2001 发表于 2013-5-22 11:43
如果M3的话,把packed去掉,M3自动对齐。
M0就不会自动对齐

是M3,用的KEIL 4.23

出0入0汤圆

 楼主| 发表于 2013-5-22 11:52:23 | 显示全部楼层
si692828681 发表于 2013-5-22 11:48
“__packed是进行一字节对齐。使用_packed一般会以降低运行性能为代价,由于大多数cpu处理数据在合适的字节 ...

引用变量没用__packed定义。
谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 04:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表