OpenEdv-开源电子网

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

UCOSIII的中断问题

[复制链接]

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
发表于 2014-11-22 16:45:42 | 显示全部楼层 |阅读模式
5金钱
在UCOSIII 中  的中断函数较裸板上有什么区别哈,怎么改写,希望多多指点,   本人有Linux 基础想直接上手UCOSIII 希望大家推荐个学习资料
!!!

最佳答案

查看完整内容[请看2#楼]

1、在使用UCOSIII中编写UCOSIII的时候,进入中断函数要调用OSIntEnter()函数,然后编写中断服务函数,最后调用OSIntExit()函数退出中断,OSIntExit()为中断级任务调度器,如下UART1的中断服务函数。 void USART1_IRQHandler(void) {       OSIntEnter();        编写中断服务程序;       OSIntExit();   &n ...
再牛逼的梦想都禁不住傻逼的坚持!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-11-22 16:45:43 | 显示全部楼层
1、在使用UCOSIII中编写UCOSIII的时候,进入中断函数要调用OSIntEnter()函数,然后编写中断服务函数,最后调用OSIntExit()函数退出中断,OSIntExit()为中断级任务调度器,如下UART1的中断服务函数。
void USART1_IRQHandler(void)
{
      OSIntEnter(); 
      编写中断服务程序;
      OSIntExit();     //退出中断
}

2、目前UCOSIII的资料很少,比较好的就是《嵌入式实时操作系统 uc/OS-III》这本书,邵贝贝他们翻译的,还有貌一本貌似是在F107上应用UCOSIII的教材,都是UCOSIII官方书的中文翻译本
开往春天的手扶拖拉机
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-11-22 20:02:53 | 显示全部楼层
II和III在中断响应函数时一样的,只是新增了延迟发布的功能。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-11-22 20:27:11 | 显示全部楼层
void SDIO_IRQHandler(void)
{
   OSIntEnter();
   printf("\r\n interrupt......!\r\n" );
   SD_ProcessIRQSrc();
   OSIntExit();
}
  
这是本人写的SD卡写完就得中断服务函数,   可是为什么还是不对哈?  
关总中断 和开总中断是哪个哈?
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-11-22 20:49:48 | 显示全部楼层
回复【4楼】灰太狼小灰兔:
---------------------------------
不加操作系统就正确,加上就会莫名其妙的出问题
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-11-27 13:24:27 | 显示全部楼层
在STM32F103上移植的,需要在开始时关闭所有中断么?
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

7

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-11-24
在线时间
3 小时
发表于 2014-12-2 15:58:56 | 显示全部楼层
如果楼主解决了,请分享一下。
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-12-4 10:51:19 | 显示全部楼层
回复【7楼】love515354:
---------------------------------
我把任务栈加大,可还是有问题,运行一段时间就会卡死,怀疑是任务协调有问题,正在查找??要源码么?可以提供!
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

28

主题

288

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1212
金钱
1212
注册时间
2011-4-9
在线时间
97 小时
发表于 2014-12-9 08:12:46 | 显示全部楼层
回复【8楼】灰太狼小灰兔:
-------------------------------
这样没法判断问题所在,你仿真下,然后看看程序卡在了哪里
回复

使用道具 举报

6

主题

46

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
305
金钱
305
注册时间
2014-3-24
在线时间
39 小时
发表于 2014-12-9 08:50:15 | 显示全部楼层
[mw_shl_code=c,true]void TIM6_IRQHandler(void) { CPU_SR_ALLOC(); CPU_CRITICAL_ENTER(); OSIntEnter(); CPU_CRITICAL_EXIT(); if ( TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET ) { //********中断程序************* } OSIntExit(); }[/mw_shl_code]


回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-12-9 15:26:50 | 显示全部楼层
。。。
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-12-9 19:22:51 | 显示全部楼层
回复【11楼】灰太狼小灰兔:
---------------------------------
我看到定时器中断就是这样写的哈
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-12-9 20:19:53 | 显示全部楼层
回复【10楼】第九度:
---------------------------------
我查了下 ,这是在 宏 OS_CFG_ISR_POST_DEFERRED_EN 设置为0 时 UCOSIII采用关中断来保护临界代码,
这两句是来  把中断状态保存起来 关闭中断       然后恢复中断前的状态!
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

39

主题

123

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2014-11-7
在线时间
44 小时
 楼主| 发表于 2014-12-9 20:20:44 | 显示全部楼层
回复【13楼】灰太狼小灰兔:
---------------------------------
有什么意义么?
再牛逼的梦想都禁不住傻逼的坚持!
回复

使用道具 举报

40

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2013-7-26
在线时间
72 小时
发表于 2016-5-31 21:16:26 | 显示全部楼层
zuozhongkai 发表于 2014-11-22 16:45
1、在使用UCOSIII中编写UCOSIII的时候,进入中断函数要调用OSIntEnter()函数,然后编写中断服务函数,最后 ...

OSIntEnter();   前不是先关中断么
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-6-1 00:32:24 | 显示全部楼层
16777216 发表于 2016-5-31 21:16
OSIntEnter();   前不是先关中断么

哪里说的要关中断?不用关
开往春天的手扶拖拉机
回复

使用道具 举报

40

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2013-7-26
在线时间
72 小时
发表于 2016-6-1 08:22:19 | 显示全部楼层
zuozhongkai 发表于 2016-6-1 00:32
哪里说的要关中断?不用关

OSIntEnter();   源码上的注释
http://www.openedv.com/thread-76040-1-1.html
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-6-1 09:36:43 | 显示全部楼层
16777216 发表于 2016-6-1 08:22
OSIntEnter();   源码上的注释
http://www.openedv.com/thread-76040-1-1.html

看了一下,OSIntEnter本质是对OSIntNestingCtr加1来记录中断嵌套的,为了保险可以关中断,不过这个关闭的可是全局中断。而且UCOS官方的例程使用的是CPU_CRITICAL_ENTER()来 关中断的,而CPU_CRITICAL_ENTER()根据配置不同有两种实现方法,一种就是关中断,一种就是禁止任务调度,如果配置为第二种的话官方的例程在进入OSIntEnter()的时候也不关中断了。反正一句话,对OSIntNesting加一,你要是为了保险防止被其他中断打断,那就加上。
开往春天的手扶拖拉机
回复

使用道具 举报

40

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
513
金钱
513
注册时间
2013-7-26
在线时间
72 小时
发表于 2016-6-1 20:41:48 | 显示全部楼层
zuozhongkai 发表于 2016-6-1 09:36
看了一下,OSIntEnter本质是对OSIntNestingCtr加1来记录中断嵌套的,为了保险可以关中断,不过这个关闭的 ...

看了他的注释,以为是要强制关闭的。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-24 05:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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