最近接手了别人做的一个项目,问题不少。
在阅读程序的过程中看到其变量定义上的做法很是让我费解,也让我很郁闷。
他的做法如下,是在联合体里嵌套了多个结构体:
typedef union _RUN_PARAM{
unsigned char array[21];
struct
{
unsigned char name; // 0
unsigned char run_status; // 1
unsigned char wash_pos;
unsigned char solvent_num;
unsigned char spe_num; //4// 4
unsigned long count; // 5
unsigned int atuo_wash;
unsigned int speed_last;
unsigned int second;
unsigned int speed;
unsigned long recycle;
}path_sol;
struct
{
unsigned char name; // 0
unsigned char run_status; // 1
unsigned char wash_pos;
unsigned char back_num;
unsigned char spe_num; //4// 4
unsigned long count; // 5
unsigned int speed_push;
unsigned int count_push;
unsigned int second_push;
unsigned int speed;
unsigned long recycle;
}path_sam;
struct
{
unsigned char name; // 0
unsigned char run_status; // 1
unsigned int temperature;
unsigned char spe_num; //4// 4
unsigned long count; // 5
unsigned long times;
unsigned int second;
unsigned int speed;
unsigned long recycle;
}path_other;
}run_param;
而据我用过的新唐单片机里的写法刚好跟他相反,是结构体里嵌套联合体。
众所周知,union模型是共用一段内存,如果是里面再嵌套了struct,那在后续变量操作时难免会互相修改,从而增加产生BUG的机率。
我不知道这个人这样做的目的何在,可能是为了省内存(因为公司想要马儿跑又要马儿不吃草,用资源很少的单片机来做太多的事),但是会想到省内存的人
不会不考虑到互相更改的可能。也许这样的写法有其巨大的好处但我确实看不出来,因为我也是遇到问题才去研究。
当然若有论坛牛人经过也请放缓脚步,为我这种新手普及一下知识。
此只是发发唠骚,不喜勿喷。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我是用来做按键扫描
void Key_Read()
{
uint8_t ReadData;
press_time = 0x3fe;
ReadData =~ keyconvert();
while(--press_time)
Trg = ReadData & (ReadData ^ Cont);
Cont = ReadData;
}
uint8_t keyconvert()
{
uint8_t Key_num;
PORT portkey;
portkey.BITS.B0 = KEY1;
portkey.BITS.B1 = KEY2;
portkey.BITS.B2 = KEY3;
portkey.BITS.B3 = 1;
portkey.BITS.B4 = 1;
portkey.BITS.B5 = 1;
portkey.BITS.B6 = 1;
portkey.BITS.B7 = 1;
Key_num= portkey.byte;
return Key_num;
}
然后用一个switch扫描按键,可做短按长按,非常方便
一周热门 更多>