打印
[STM32F0]

转:STM32-ucosii中的串口中断

[复制链接]
2105|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2014-11-21 15:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先看邵老师的书中怎么写
STM32学习记录14 ucosii中的串口中断 - zmurder - 起点的博客
里面写到:μC/OS中,中断服务子程序要用汇编语言来写。然而,如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。
再看《M3权威指南》2.11.2节与9.11节中讲到Cortex-M3在进入异常时自动压栈。。。。返回时自动出栈,再也不需要汇编语言编写了。也就是说我们可以使用C语言来编写中断服务程序。并且省去了上面程序清单的(1)(5)(6).
其实ucos中的终端和裸奔的中断写法基本一致,只是加了几条语句,如下为串口中断的写法:
void USART1_IRQHandler(void)
{
    uint8_t RxData;

    OS_CPU_SR  cpu_sr;
    OS_ENTER_CRITICAL();                        
    OSIntNesting++;
    OS_EXIT_CRITICAL();
     if(USART_GetITStatus(USART1, USART_IT_RXNE )==SET)//接收中断
     {
             USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清楚接收中断标志位
             RxData = USART_ReceiveData(USART1); //接收数据
             if(RxData!=0)//字符串接收完毕
             {
                    Usart1RXArray[Usart1RXLen++]=RxData;
             }
     }
     OSIntExit();                                
}
红色为与裸奔相比添加的代码。中断服务程序的函数名也不用改变。


沙发
mmuuss586| | 2014-11-21 19:09 | 只看该作者
还以为楼主有什么问题呢;

使用特权

评论回复
板凳
sprone| | 2014-11-22 11:55 | 只看该作者
谢谢楼主,学到了,敢情我没有针对OS来写串口中断,可能会有隐患的吧。。。

使用特权

评论回复
地板
peugeoter| | 2014-12-16 17:36 | 只看该作者
多谢楼主,我现在的中断也没有加OS的这些语句,暂没有发现问题。下来得好好看看OS哪块,分析下有没有隐患。

使用特权

评论回复
5
Eric2013| | 2014-12-16 19:03 | 只看该作者
peugeoter 发表于 2014-12-16 17:36
多谢楼主,我现在的中断也没有加OS的这些语句,暂没有发现问题。下来得好好看看OS哪块,分析下有没有隐患。 ...

这个最好加上,在M3/M4上没有出现问题是因为他们有了可以专门用任务切换的PendSV。

使用特权

评论回复
6
Eric2013| | 2014-12-16 19:04 | 只看该作者
peugeoter 发表于 2014-12-16 17:36
多谢楼主,我现在的中断也没有加OS的这些语句,暂没有发现问题。下来得好好看看OS哪块,分析下有没有隐患。 ...

这个最好加上,在M3/M4上面没有出问题是因为他们有了可以专门用于任务切换的PendSV

使用特权

评论回复
7
yinhaix| | 2015-5-4 17:49 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝