假设的实验是在当串口有值输入时,lcd屏幕清屏并显示我的标志位。
串口回调函数用的基本是上次做过解释的串口回调函数(可以看看以前的博文http://blog.sina.com.cn/s/blog_4c8287230100cyfk.html)。现在来看看实验步骤吧。首先是定义一个事件的标志(注意不要与系统自带的标志一样),我这里用的是
#define king_come 0x11
接着定义一个事件结构体,
typedef struct
{
osal_event_hdr_t hdr; //事件头指针
uint8 mark; //标志位
} myUartMsg_t;
然后是对事件结构的一系列说明,我做到一个函数里了,其实不是必须这样的。
void xy_come(void)
{
//事件内存分配,添加事件之前一定要进行内存分配
myUartMsg_t *myUartMsg;
myUartMsg= (myUartMsg_t *)osal_msg_allocate( sizeof( myUartMsg_t ) );//重要
//事件名称定义
myUartMsg->hdr.event = king_come;
myUartMsg->mark= right_come; //定义标志位
osal_msg_send( SampleApp_TaskID, (uint8 *)myUartMsg);
}
这样基本是完成了一个事件的定义,下面我们就来应用这个事件。
为了满足我们的实验,首先在串口回调函数中加入上面的事件说明函数
void xy_uartCB (uint8 port,uint8 event)
{
uint8 temp[8];
HalUARTRead(HAL_UART_PORT_0,temp,8); //芯片通过串口读数据
right_come = 1;
xy_come();
}
然后在事件处理函数中添加这个事件的处理程序
uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
{
……
case king_come:
if(right_come == 1)
{
ClearScreen();
Print8(HAL_LCD_LINE_2,20,"king_come.",1);
right_come = 0;
}
break;
……
}
好了,这样就向任务中添加了一个事件了。基本的流程就是先定义一个事件的标示,事件的结构,再在需要用到该事件的地方对事件的参数进行赋值。最后在事件处理函数里添加对事件的处理子程序。知道了之后总是觉得很简单,谢谢群里的Yicher!!
更多资料与技术讨论请联系:
上海无线龙通讯科技有限公司
联系人:司文铠
QQ:876692208
MSN:siwenkai@hotmail.com
TEL:13816689475
email:wxlsiwenkai@yahoo.com.cn
skype:sparksi01
公司网址:www.wxlsoc.com
文章评论(0条评论)
登录后参与讨论