热度 40
2013-9-4 16:55
2230 次阅读|
5 个评论
一般转换都是用数组,结构体及指针,这样是便于以后函数操作。灵活的运用宏定义,编程更加简洁。 举例消息处理方法应用: 如下的定义为在处理消息时候用到很方便,把消息类型和消息值最后封装在一起。 灵活的处理了Uint和Byte 之间转换。 #define UintToByte3(data) ((byte *)((data))) #define UintToByte2(data) ((byte *)((data))) #define UintToByte1(data) ((byte *)((data))) #define UintToByte0(data) ((byte *)((data))) #define UintToUshort1(data) ((ushort *)((data))) #define UintToUshort0(data) ((ushort *)((data))) #define GetMessageType(data) UintToByte3(data) #define GetMessageData(data) (data 0x00FFFFFF) 消息封装处理函数: void PostMessageToLogicTask(MessageType messageType, uint data) { bool postMessage; if (messageType != TimerMessageType) { UintToByte3(data) = messageType; } postMessage = System.Os.PostMessageQueue(System.Device.MessageQueuePoint, (void *)data); Assert(postMessage); } 特别说明: MessageType 是枚举型,定义的值为Byte 类型 。详细定义为如下 typedef enum { KeyMessageType = 0xFF, UartMessgeType = 0xFE, TimerMessageType = 0xF0 }MessageType; 更巧妙的定义,大家一起帮忙分析为什么可以这样定义,用引号来美化编程界面。 Menu.WorkForm.BackTextPoint = "频率 Hz功率 % W电压 电流 温度 C "; App.Menu.WorkForm.BackTextPoint = "频率 Hz" "功率 % W" "电压 电流 " "温度 C "; 上面二种定义为啥功能一样。欢迎各位探讨。 typedef struct { const byte* BackTextPoint; Chart * ChartPoint; Label * LabelPoint; TextBox * TextBoxPoint; void * FocusTextBoxDataPoint; }Form; 欢迎各位与我一起学习ARM 技术,我的E-MIAL:timeisours@163.com,web:www.51buddy.com,QQ:158377757