OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7904|回复: 7

ucos中使用外部中断的方法

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-9-20
在线时间
0 小时
发表于 2012-9-24 10:38:26 | 显示全部楼层 |阅读模式
谁有在ucos中使用外部中断吗
有什么注意点吗,比如中断服务函数是不是还是像在裸机上那样写,还是在ucos里有不一样的机制实现

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2012-9-24 23:16:59 | 显示全部楼层
有点区别,但是区别不大,如下:
   
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();    
#endif
if(USART1->SR&(1<<5))//接收到数据
{  
res=USART1->DR; 
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了 
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收   
}  
}
}          
}
#ifdef OS_CRITICAL_METHOD  //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntExit();    
#endif
}  
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2012-9-20
在线时间
0 小时
 楼主| 发表于 2012-9-26 00:29:20 | 显示全部楼层
原来如此,,谢谢
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

初级会员

Rank: 2

积分
194
金钱
194
注册时间
2012-12-2
在线时间
0 小时
发表于 2013-4-4 20:06:15 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子  那他这个进入中断服程序的主程序 是用任务写 还是像平常那样写?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2013-4-5 00:28:29 | 显示全部楼层
像平常一样,在刚进入和退出中断函数的时候加多2个函数即可.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
金钱
222
注册时间
2013-9-25
在线时间
1 小时
发表于 2014-5-19 13:35:33 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
是不是每个中断都是这样写?可是我在用定时中断时并没有加进入和退出函数,也可以运行的!
void TIM3_IRQHandler(void)   //TIM3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx更新中断标志 

Timer3_Count++;
if(Timer3_Count==30) 
{    
Timer3_Flag_1=1;

}
if(Timer3_Count==50) 
{
Timer3_Flag_2=1;

}
if(Timer3_Count==80) 
{
Timer3_Flag_3=1;

}
if(Timer3_Count>80) 
{

Timer3_Count=0;
}



}
}

用三个标志位建立任务,比如轮换显示不同的界面,也是可以的。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165225
金钱
165225
注册时间
2010-12-1
在线时间
2107 小时
发表于 2014-5-19 23:09:43 | 显示全部楼层
回复【6楼】kelly_li:
---------------------------------
不加也可以用,不过某些情况,可能出问题.最好加上.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

38

主题

248

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
463
金钱
463
注册时间
2011-2-11
在线时间
12 小时
发表于 2014-6-24 10:10:58 | 显示全部楼层
如果isr里没调用ucosii的函数,而且isr跟各个任务也没联系,那可以不加。
Openedv大力支持的开源RTOS  --Trochili RTOS(飞鸟)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 10:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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