高级会员

- 积分
- 842
- 金钱
- 842
- 注册时间
- 2012-2-8
- 在线时间
- 19 小时
|
下班后,闲来无聊,便学习RTT解解闷。今天终于宿舍有网线 ,把之前练习写的与大家共享。
事件,先看看RTT是如何描述事件的。主要用于线程间同步,可一对多,多对多。事件集合可以用一个32位的无符号整形变量表示。一个位代表一个事件。线程可以通过“逻辑与”或“逻辑或”与多个事件建立联系。
话不多说,文档里面讲得很清楚。工程里,创建三个线程,两静态线程用于控制LED,一动态线程用于控制KEY。按KEY0,红灯闪烁5次;按KEY1,绿灯闪烁5次;WK_UP无效!
静态线程需要手动为线程分配任务栈。感觉在说废话,直接讲事件的发送,接收好了。
事件的发送通过这个函数 rt_err_t rt_event_send (rt_event_t event, rt_uint32_t set),比如 rt_event_send(&key_event,1<<0) 是对置位0号事件。
事件的接收则通过这个函数 rt_err_t rt_event_recv (rt_event_t event, rt_uint32_t set, rt_uint8_t option, rt_int32_t timeout, rt_uint32_t *recved),比如想接收key_event事件集的0号事件可以这样写 rt_event_recv(&key_event, (1<<0),RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR,RT_WAITING_FOREVER,&e)
key_event是要接收的事件集,e是存放接收到的事件集。如果只是接收单个事件,要使用RT_EVENT_FLAG_OR,而RT_EVENT_FLAG_CLEAR则在接收到事件后,清除其标志位。
初始化一个静态事件使用这个函数 rt_err_t rt_event_init (rt_event_t event, const char *name, rt_uint8_t flag)。这里初始化一个键盘事件集
rt_event_init(&key_event, "key_event", RT_IPC_FLAG_FIFO)
不多说,上源码,还是挺好理解的。在mini板上面跑的。目前一个事件和信号量。都是键盘控制LED。在MDK这个文件夹里面打开工程。
|
|