OpenEdv-开源电子网

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

UCOSII串口中断和led任务,只能执行一个,是什么原因?

[复制链接]

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
发表于 2017-9-8 16:56:36 | 显示全部楼层 |阅读模式
1金钱
在ucosii任务调度模板中,加入了自己的IMU读取的代码,结果一直只能执行一个程序。用了系统延时函数,临界区都没有效果。

QQ截图20170908154753.png
QQ截图20170908155121.png
QQ截图20170908155153.png
QQ截图20170908155231.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-8 17:09:52 | 显示全部楼层
为什么要在led0_task中加入临界段代码保护呢?这样的任务就没办法调度了啊
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-8 17:12:26 | 显示全部楼层
当采用了关中断的方式进行临界段代码保护的时候,就不会进入中断服务函数
回复

使用道具 举报

4

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2015-12-16
在线时间
34 小时
发表于 2017-9-8 17:22:43 | 显示全部楼层
你的LED任务的写法完全不是基于操作系统的写法啊,你的delay_ms函数完全可以换成系统提供的OSTimeDly;还有你这个任务也没有任何释放CPU的手段,这个也是不好的
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-10 10:13:18 | 显示全部楼层
章鱼哥丶 发表于 2017-9-8 17:12
当采用了关中断的方式进行临界段代码保护的时候,就不会进入中断服务函数

刚接触UCOSII,这个问题困扰了很久,请问下如何去写呢?我这个程序是一个串口读取IMU数据,一个是LED闪烁。
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-10 10:14:08 | 显示全部楼层
idfulin 发表于 2017-9-8 17:22
你的LED任务的写法完全不是基于操作系统的写法啊,你的delay_ms函数完全可以换成系统提供的OSTimeDly;还有 ...

我用过OSTimeDly效果还是只能执行其中一个程序,请问释放CPU的这个代码是如何写呢?
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-10 22:07:16 | 显示全部楼层
wjlshuaiqi 发表于 2017-9-10 10:13
刚接触UCOSII,这个问题困扰了很久,请问下如何去写呢?我这个程序是一个串口读取IMU数据,一个是LED闪烁 ...

在LED闪烁的任务中不用使用临街段代码保护,就和裸机的写法一样,不过要使用UCOS的延时函数。还用你确定的你的LED任务的堆栈,建立了吗?同时建议你在串口中断中不要有过多的操作,可以通过信号量,或者消息队列的方式让任务去判断数据。
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-11 14:23:36 | 显示全部楼层
章鱼哥丶 发表于 2017-9-10 22:07
在LED闪烁的任务中不用使用临街段代码保护,就和裸机的写法一样,不过要使用UCOS的延时函数。还用你确定 ...

其实我试了很多办法,但是每次的结果都是只能运行一个任务,我用的是mini开发板的模板工程(UCOSII任务调度),请问下有串口中断和其他任务调度的例子吗?
QQ截图20170911130309.png
QQ截图20170911130353.png
QQ截图20170911131732.png
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-11 14:29:01 | 显示全部楼层
这是我的代码,@原子哥,一直只能显示IMU数据,或者更改优先级后,只能闪LED

ALIENTEK MINISTM32 实验35 UCOSII实验1-任务调度 (1).zip

5.64 MB, 下载次数: 97

回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-11 14:49:33 | 显示全部楼层
wjlshuaiqi 发表于 2017-9-11 14:23
其实我试了很多办法,但是每次的结果都是只能运行一个任务,我用的是mini开发板的模板工程(UCOSII任务调 ...

在lcd任务中没进行任务切换,所以一直在lcd_task里运行
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-11 15:14:27 | 显示全部楼层
章鱼哥丶 发表于 2017-9-11 14:49
在lcd任务中没进行任务切换,所以一直在lcd_task里运行

添加了任务切换,LED灯常亮,说明LED任务还是执行了一次,然后再也没有执行,如果LCD任务优先级大于LED,那么LED一次都不执行。

添加了任务切换

添加了任务切换

LED 任务

LED 任务
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-11 15:15:50 | 显示全部楼层
章鱼哥丶 发表于 2017-9-11 14:49
在lcd任务中没进行任务切换,所以一直在lcd_task里运行

观察时间长点,LED常亮很长时间,熄灭很长时间,难道是系统延时函数时间太长了?
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-11 15:52:10 | 显示全部楼层
wjlshuaiqi 发表于 2017-9-11 15:15
观察时间长点,LED常亮很长时间,熄灭很长时间,难道是系统延时函数时间太长了?

你设置的是延时500个节拍,你需要知道你的一个节拍数延时多少毫秒。
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-11 20:31:25 | 显示全部楼层
章鱼哥丶 发表于 2017-9-11 15:52
你设置的是延时500个节拍,你需要知道你的一个节拍数延时多少毫秒。

5ms,现在改为40个节拍,200ms了,但是时间还是很长,我总觉得是不是缺少了什么函数没有写。这个问题太奇怪了。

5ms

5ms
回复

使用道具 举报

3

主题

28

帖子

0

精华

初级会员

Rank: 2

积分
127
金钱
127
注册时间
2017-7-31
在线时间
31 小时
发表于 2017-9-11 21:53:29 | 显示全部楼层
wjlshuaiqi 发表于 2017-9-11 20:31
5ms,现在改为40个节拍,200ms了,但是时间还是很长,我总觉得是不是缺少了什么函数没有写。这个问题太奇 ...

那再找找吧。任务能开始运行就可以了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-9-12 00:35:38 | 显示全部楼层
wjlshuaiqi 发表于 2017-9-11 14:29
这是我的代码,@原子哥,一直只能显示IMU数据,或者更改优先级后,只能闪LED

你直接用我们代码,可以么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

11

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2017-9-8
在线时间
5 小时
 楼主| 发表于 2017-9-12 08:54:27 | 显示全部楼层
正点原子 发表于 2017-9-12 00:35
你直接用我们代码,可以么?

我用的是mini开发板UCOSII-任务调度模版,仿照LED任务模式,重新添加任务(之前也试过直接改LED任务的里面的功能),都是这个样子。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 17:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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