硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4091|回复: 14
收起左侧

[μCOS-III] 使用最新版uCOS-III V3.08.00要特别注意自带开关中断函数控制的中断优先级范围

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-12-9 15:31:25 | 显示全部楼层 |阅读模式
现象:
客户反馈使用此贴的例子做串口数据连续发送的时候,数据会异常。

基于V5,V6和V7的最新版uCOS-III V3.08.00程序模板,含MDK和IAR两个版本,支持uC/Probe(2020-03-19)
http://www.armbbs.cn/forum.php?mod=viewthread&tid=96918


原因:

上面的例子里面开关中断的操作修改为使用uCOS的API实现了,在bsp.h文件里面

特别注意,现在的新版uCOS-II和III的开关中断也开始采用BASEPRI寄存器设置
http://www.armbbs.cn/forum.php?mod=viewthread&tid=93572


这个BASEPRI寄存器有个特点就是可以仅关闭受uCOS控制的中断,不受控的不关闭。
  1. /* 使能在源文件中使用uCOS-III的函数, 这里的源文件主要是指BSP驱动文件 */
  2. #define  uCOS_EN      1

  3. #if uCOS_EN == 1   
  4.         #include "os.h"   

  5.         #define  ENABLE_INT()      CPU_CRITICAL_EXIT()     /* 使能全局中断 */
  6.         #define  DISABLE_INT()     CPU_CRITICAL_ENTER()    /* 禁止全局中断 */
  7. #else
  8.         /* 开关全局中断的宏 */
  9.         #define ENABLE_INT()        __set_PRIMASK(0)        /* 使能全局中断 */
  10.         #define DISABLE_INT()        __set_PRIMASK(1)        /* 禁止全局中断 */
  11. #endif
复制代码


解决办法:

注:为了更好使用uCOS的这个功能,请务必使用NVIC的优先级分组4.

设置串口中断在uCOS-III可以管理的范围内。uCOS的控制范围在文件cpu_cfg.h定义

3.png

然后用户设置串口中断优先级即可,我们这里设置到1-15均可,只要受uCOS控制就行。
6.png












回复

使用道具 举报

609

主题

3047

回帖

4894

积分

至尊会员

积分
4894
发表于 2020-12-9 19:28:59 | 显示全部楼层
受教了啊,多谢多谢
回复

使用道具 举报

16

主题

148

回帖

196

积分

初级会员

积分
196
发表于 2020-12-9 21:22:21 | 显示全部楼层
我是设置的优先级高于这个可控制的优先级,也就是不受os控制,然后串口处理的时候之关闭自己相应的中断,使用到现在没有啥问题,也是这个驱动,没有大改动什么
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-12-9 21:40:46 | 显示全部楼层
dyhfaily 发表于 2020-12-9 21:22
我是设置的优先级高于这个可控制的优先级,也就是不受os控制,然后串口处理的时候之关闭自己相应的中断,使 ...

关闭自己的中断是最好的方式,后面打算驱动也采用这种的,关全局没有关闭自己好。
回复

使用道具 举报

73

主题

1193

回帖

1412

积分

至尊会员

积分
1412
发表于 2020-12-10 09:01:15 | 显示全部楼层
用过freertos就知道了这个特点
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2020-12-10 10:35:03 | 显示全部楼层
我一般用默认的4貌似也是可以的,0-3留给裸机中断使用
回复

使用道具 举报

6

主题

126

回帖

144

积分

初级会员

积分
144
发表于 2020-12-10 10:42:52 | 显示全部楼层
mark,谢谢硬汉大哥分享OS_中断优先级问题
回复

使用道具 举报

6

主题

216

回帖

234

积分

高级会员

积分
234
发表于 2020-12-10 13:34:40 | 显示全部楼层
请教下,串口中断是不需要内核参与管理的呀,UCOSIII 默认#define  CPU_CFG_KA_IPL_BOUNDARY    4u,那么设置为        /* 配置NVIC the NVIC for UART */   HAL_NVIC_SetPriority(USART3_IRQn, 0, 3); 是不受内核管理的,没有问题呀?为啥这个中断非要受到内核管理呢?是因为该中断调用有OSSemPost(), OSTaskSemPost(), OSFlagPost(), OSQPost() or OSTaskQPost()等发布消息、信号、事件标志吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-12-10 14:16:46 | 显示全部楼层
芯跳不止 发表于 2020-12-10 13:34
请教下,串口中断是不需要内核参与管理的呀,UCOSIII 默认#define  CPU_CFG_KA_IPL_BOUNDARY    4u,那么设 ...

因为这个串口驱动里面和串口中断服务程序里面都有调用到一个变量,然后对此变量在串口中断服务程序之外使用做了开关中断操作。这个开发中断的时候是采用的uCOS的API。
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2020-12-11 20:20:57 | 显示全部楼层
硬汉哥,你这个帖子太及时了,最近用你这个模板做项目,也是以太网通信一段时间出现问题了,或者莫名其妙的死机了,困扰了我好多天,按这个设置问题已解。
回复

使用道具 举报

1

主题

15

回帖

18

积分

新手上路

积分
18
发表于 2020-12-11 20:28:05 | 显示全部楼层
硬汉哥,你这个帖子太及时了,最近用你这个模板做项目,以太网通信一段时间出现异常,或其他者莫名其妙的问题,按照你这个设置问题已解,谢谢硬汉哥
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2020-12-12 01:39:24 | 显示全部楼层
putin 发表于 2020-12-11 20:28
硬汉哥,你这个帖子太及时了,最近用你这个模板做项目,以太网通信一段时间出现异常,或其他者莫名其妙的问 ...

系统升级后,有时候防不胜防。
回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
发表于 2023-10-8 15:15:54 | 显示全部楼层
最新的ucos也遇到中断问题,新版的中断里调用进入临界-关中断等OSAPI操作,假设CPU_CFG_INT_DIS_MEAS_OVRHD_NBR=4,NVIC的优先级分组4,那么进入中断操作这些API,是不是会关闭4-15的中断,0-3的还是不会关闭
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-10-8 15:28:36 | 显示全部楼层
浴火重生 发表于 2023-10-8 15:15
最新的ucos也遇到中断问题,新版的中断里调用进入临界-关中断等OSAPI操作,假设CPU_CFG_INT_DIS_MEAS_OVRHD ...

CPU_CFG_KA_IPL_BOUNDARY = 4时
0 -3 里面不受控
4-15里面受控
回复

使用道具 举报

4

主题

139

回帖

151

积分

初级会员

积分
151
发表于 2023-10-8 15:41:49 | 显示全部楼层
eric2013 发表于 2023-10-8 15:28
CPU_CFG_KA_IPL_BOUNDARY = 4时
0 -3 里面不受控
4-15里面受控

那么假设串口优先级为8,中断进入临界时,此时是关闭的中断仅是8还是4-15都关闭了
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 06:53 , Processed in 0.216537 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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