一般转换都是用数组,结构体及指针,这样是便于以后函数操作。灵活的运用宏定义,编程更加简洁。
举例消息处理方法应用:
如下的定义为在处理消息时候用到很方便,把消息类型和消息值最后封装在一起。
灵活的处理了Uint和Byte 之间转换。
#define UintToByte3(data) ((byte *)(&(data)))[3]
#define UintToByte2(data) ((byte *)(&(data)))[2]
#define UintToByte1(data) ((byte *)(&(data)))[1]
#define UintToByte0(data) ((byte *)(&(data)))[0]
#define UintToUshort1(data) ((ushort *)(&(data)))[1]
#define UintToUshort0(data) ((ushort *)(&(data)))[0]
#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
ND7 2014-3-27 02:11
用户1254902 2014-3-27 00:57
用户1580874 2014-3-25 11:18
用户528170 2014-3-24 19:03
用户528170 2014-3-24 19:03
用户614020 2014-3-24 09:49
用户1277994 2014-3-24 09:42
用户1096501 2014-3-20 17:40
用户1742363 2014-3-20 08:46
用户1674662 2014-3-19 22:36