[uCOS/RTOS] ucos 中断问题

[复制链接]
2136|12
 楼主| s290484188 发表于 2017-2-22 14:56 | 显示全部楼层 |阅读模式
我用IO口模拟SPI从机,每次通过中断获取主机的数据,这个时钟有1M多;用硬件中断刚好接收完数据,基本上没有多的时间

在UCOS里面,如果不管理中断会出现什么意外
        OS_ENTER_CRITICAL();                        
        OSIntNesting++;
        OS_EXIT_CRITICAL();
        ...
        ...
        OSIntExit();

执行以上代码,我肯定接不得数据


 楼主| s290484188 发表于 2017-2-23 08:05 | 显示全部楼层
airwill 发表于 2017-2-27 18:04 | 显示全部楼层
这个代码是需要的,所谓重入限制。
你可以
1。 在进行数据传输的时候禁止中断的
2。 最好改用硬件实现数据传输
 楼主| s290484188 发表于 2017-2-28 14:36 | 显示全部楼层
airwill 发表于 2017-2-27 18:04
这个代码是需要的,所谓重入限制。
你可以
1。 在进行数据传输的时候禁止中断的

因为时序特殊,不能用硬件方式
SPI中断每20ms一次,相当于经常发生;
感觉肯定会影响ucos运行啊
airwill 发表于 2017-2-28 15:22 | 显示全部楼层
会多占用点时间,但影响不大

       OS_ENTER_CRITICAL();                        
        OSIntNesting++;
        OS_EXIT_CRITICAL();

这几个都是非常精练的代码,不要担心
 楼主| s290484188 发表于 2017-2-28 17:07 | 显示全部楼层
airwill 发表于 2017-2-28 15:22
会多占用点时间,但影响不大

       OS_ENTER_CRITICAL();                        

因为硬件问题,现在中断里面最多允许增加3行i++;
这个从机SPI是为了跟别人的配合
CPU时钟只有72M
airwill 发表于 2017-2-28 21:19 | 显示全部楼层
这个中断这么紧张?
中断每20ms一次,不应该这么紧张,你可以外面的程序设置缓冲区,中断只读写缓冲区
lishutong 发表于 2017-3-2 08:30 | 显示全部楼层
s290484188 发表于 2017-2-28 17:07
因为硬件问题,现在中断里面最多允许增加3行i++;
这个从机SPI是为了跟别人的配合
CPU时钟只有72M

你是不是在中断里面做了太多工作了,也许你可以尝试精简中断里的代码。
在中断中只完成接受spi数据的操作,然后将数据通过写入消息队列。这个过程应该很快的。然后再由一个单独的任务从消息队列中取数据然后处理。

Ps:如果是觉得对ucos底层工作原理不太了解的话,可以学下我的公开课:http://open.21ic.com/Video/index/id/6034
djyos 发表于 2017-3-2 11:06 | 显示全部楼层
超过1M从时钟,IO模拟,只有72M主频,ucosii实时性估计不够。
要求这么高实时性,要么裸跑,要么用djyos吧。
 楼主| s290484188 发表于 2017-3-3 09:07 | 显示全部楼层
djyos 发表于 2017-3-2 11:06
超过1M从时钟,IO模拟,只有72M主频,ucosii实时性估计不够。
要求这么高实时性,要么裸跑,要么用djyos吧 ...

我现在没由用ucos的系统管理SPI的中断,程序也正常运行的,但不知道会有什么隐患
 楼主| s290484188 发表于 2017-3-3 09:10 | 显示全部楼层
airwill 发表于 2017-2-28 21:19
这个中断这么紧张?
中断每20ms一次,不应该这么紧张,你可以外面的程序设置缓冲区,中断只读写缓冲区 ...

9楼说的就是我现在的问题,中断里只能执行大概9条命令
程序是跑起来了,但是没有用下面的代码管理,不知道会不会有隐患
        OS_ENTER_CRITICAL();                        
        OSIntNesting++;
        OS_EXIT_CRITICAL();
我测试了一天,运行正常
 楼主| s290484188 发表于 2017-3-3 09:10 | 显示全部楼层
lishutong 发表于 2017-3-2 08:30
你是不是在中断里面做了太多工作了,也许你可以尝试精简中断里的代码。
在中断中只完成接受spi数据的操作 ...

好的,是得慢慢学
夏亦初阳 发表于 2017-4-18 15:56 | 显示全部楼层
你可以测一下你的中断时钟是否是想要的1M    应该不会是准确的1M  可以在Tim中断里Post信号量  然后再在ucos任务里Pend信号量
接收数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部