[STM32F0] 转:STM32-ucosii中的串口中断

[复制链接]
2492|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哪块,分析下有没有隐患。
Eric2013 发表于 2014-12-16 19:03 | 显示全部楼层
peugeoter 发表于 2014-12-16 17:36
多谢楼主,我现在的中断也没有加OS的这些语句,暂没有发现问题。下来得好好看看OS哪块,分析下有没有隐患。 ...

这个最好加上,在M3/M4上没有出现问题是因为他们有了可以专门用任务切换的PendSV。
Eric2013 发表于 2014-12-16 19:04 | 显示全部楼层
peugeoter 发表于 2014-12-16 17:36
多谢楼主,我现在的中断也没有加OS的这些语句,暂没有发现问题。下来得好好看看OS哪块,分析下有没有隐患。 ...

这个最好加上,在M3/M4上面没有出问题是因为他们有了可以专门用于任务切换的PendSV
yinhaix 发表于 2015-5-4 17:49 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

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