搜索
bottom↓
回复: 4

RAW OS 基于STM32F1/F4 学习笔记 多对象阻塞

[复制链接]

出0入0汤圆

发表于 2014-2-7 23:14:05 | 显示全部楼层 |阅读模式
因为明天就要继续工作了,所以RAW OS这段时间的学习今晚必须告一段落了。

时间比较紧,就不贴流程图了。

多对象阻塞问题具体是指:
比如一个任务需要从两个消息队列中获取消息,这时候就存在“多对象”了,这时考虑到阻塞问题,不管把消息A的读取放在前还是消息B的读取放在前,设计都是有问题的。
ROW OS 提供了一种消息队列注册回调函数的机制高效解决了这个问题。
下图演示的是raw os 对于上面问题的解决方
  
我们通过这个信号量做中继处理,就可以很好的解决多对象阻塞的问题。

接下来就是演示。
raw_queue_send_notify(&test_queue_ins,notify_queue);
我通过这个ROW OS 函数将notify_queue 作为test_queue_ins这个queue收到消息的回调函数。

void notify_queue(RAW_QUEUE *ptr)
{
        raw_semaphore_put(&TestSem);
}


同理,我们也可以为别的队列注册同一个回调函数。
void notify_queue(RAW_QUEUE *ptr)
{
        raw_semaphore_put(&TestSem);
}


void test_task1(void * pParam)
{       
        RAW_U32  * Res;
        while(1)
        {
                raw_semaphore_get(&TestSem, RAW_WAIT_FOREVER);
                raw_queue_receive(&test_queue_ins, RAW_WAIT_FOREVER,(RAW_VOID **)&queue_cont);
                UartSend("TASK1:I GET MESSAGE\n");
        }
}

这是任务的代码,因为是验证可行性,就不搞多个事件了。
没有消息时,任务1被阻塞。


来消息后:



确实是非常好的解决多对象阻塞的办法。


回首几天前给自己定的任务,没有完成的是:中断下半部,中断下半部主要是为了解决中断不能放太多东西,否则影响实时性,这一与某些应用设计矛盾的问题,具体实现只能找哪天比较闲再研究了,RAW OS 提供的软件定时器已经试过,很简单,所以就不写帖子了。
在此感谢jorya_txj 为我们提供了优秀的国产RTOS.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-2-7 23:16:54 | 显示全部楼层
除了楼主自己给自己安排的研究点,RAW OS 还有很多优秀的地方值得挖掘,楼主在以后闲的时候会继续研究,发帖

出0入0汤圆

发表于 2014-2-7 23:37:02 | 显示全部楼层
等待楼主的空闲的时候写出更多优秀的文章。

出0入0汤圆

发表于 2014-2-8 09:50:48 | 显示全部楼层
值得学习,厉害!

出0入4汤圆

发表于 2015-4-28 14:09:01 | 显示全部楼层
RAW OS 基于STM32F1/F4 学习笔记 多对象阻塞
学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 07:07

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表