打印
[STM32F1]

stm32cubemx的freertos

[复制链接]
1534|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djz1992|  楼主 | 2020-9-11 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
神奇了,上次那个裸机程序,只是用stm32cubeide开启了freertos,稍微改一改居然跑起来了。
然后创建了三个任务
默认的任务放了用户初始化函数,运行后删除任务;
任务一,放原本1ms定时器中断内的东西,osdelay(1)就可以。
任务二,放原本主函数内,非通讯部份的东西,osdelay(1)。
任务三,放通讯部分,因为由AT的/mqtt的,所有以前有很多hal_delay,慢的很。都改成了osdelay。

然后一个软件定时器,放原本RTC秒中断的东西。

其他啥都没改,就跑起来了。。。

但是还有很多的全局变量、结构体、数组。这些东西该怎么改?
用信号量来替换全局变量?
用队列来替代数组?

好像不是所有的变量都需要替换掉吧?接收缓存的数组应该还可用,只是需要多个地方访问的数组应该用消息队列。是这样吗?

以前学过一点freertos,队列、互斥信号量等都知道,但是就是不知道怎么用。
@dirtwillfly @m564522634 @xyz549040622 @ufbycd

使用特权

评论回复
沙发
ufbycd| | 2020-9-11 16:23 | 只看该作者
裸机改OS,运行环境最大的不同是:可能会有多个线程同时访问同一个资源。
那么相应的修改是要保证,同一时刻只有一个线程访问以前的资源。
修改的方法有很多,最简单就是对资源加互斥锁。

使用特权

评论回复
板凳
djz1992|  楼主 | 2020-9-11 16:29 | 只看该作者
ufbycd 发表于 2020-9-11 16:23
裸机改OS,运行环境最大的不同是:可能会有多个线程同时访问同一个资源。
那么相应的修改是要保证,同一时 ...

感谢大佬指点。要是所有通信功能都在一个任务里,是不是通信部分的资源就不会存在多处访问的情况?

使用特权

评论回复
地板
djz1992|  楼主 | 2020-9-11 16:30 | 只看该作者
ufbycd 发表于 2020-9-11 16:23
裸机改OS,运行环境最大的不同是:可能会有多个线程同时访问同一个资源。
那么相应的修改是要保证,同一时 ...

另外,怎么实现us级别的延时呢?以前是写的delay。现在在rtos内,还用定时器吗?延时过程中是不是要防止调度

使用特权

评论回复
5
ufbycd| | 2020-9-11 16:41 | 只看该作者
djz1992 发表于 2020-9-11 16:29
感谢大佬指点。要是所有通信功能都在一个任务里,是不是通信部分的资源就不会存在多处访问的情况?
...

在设计上已经保证单一访问,就不要管了。

使用特权

评论回复
6
ufbycd| | 2020-9-11 16:42 | 只看该作者
本帖最后由 ufbycd 于 2020-9-11 16:44 编辑
djz1992 发表于 2020-9-11 16:30
另外,怎么实现us级别的延时呢?以前是写的delay。现在在rtos内,还用定时器吗?延时过程中是不是要防止 ...

us级延时用硬件定时器,定时中断优先级比系统定时中断的高。

使用特权

评论回复
7
djz1992|  楼主 | 2020-9-11 17:29 | 只看该作者
ufbycd 发表于 2020-9-11 16:42
us级延时用硬件定时器,定时中断优先级比系统定时中断的高。

因为rtos的时钟源和中断源是systick是吗?

使用特权

评论回复
8
djz1992|  楼主 | 2020-9-11 17:31 | 只看该作者
ufbycd 发表于 2020-9-11 16:41
在设计上已经保证单一访问,就不要管了。

有个问题,我现在用了n各全局变量,n个结构体变量,n个收发buf。
哪些要改成信号量、队列呢?就看是不是存在多处同时调用吗?
不存在多处调用,用全局变量、数组也没关系是么。

使用特权

评论回复
9
xyz549040622| | 2020-9-11 23:53 | 只看该作者
djz1992 发表于 2020-9-11 17:31
有个问题,我现在用了n各全局变量,n个结构体变量,n个收发buf。
哪些要改成信号量、队列呢?就看是不是 ...

肯定是没关系的,怎么可能不用全局变量呢。你把功能区分开就好了,比如数据刷新,数据处理,数据采集等,然后在子任务之间加信号量和队列就好了。

使用特权

评论回复
10
dirtwillfly| | 2020-9-12 08:34 | 只看该作者
这个建议你还是对照freertos的例程,慢慢来学习

使用特权

评论回复
11
便携手到老| | 2020-9-12 21:01 | 只看该作者
这个不错的,例程就是很好,很棒的,不错的说。

使用特权

评论回复
12
答案很长吧| | 2020-9-12 21:10 | 只看该作者
感谢楼主的分享,不错,这个芯片确实不错的。

使用特权

评论回复
13
海洋无限| | 2020-9-13 11:35 | 只看该作者
可以可以

使用特权

评论回复
14
djz1992|  楼主 | 2020-9-14 07:57 | 只看该作者
xyz549040622 发表于 2020-9-11 23:53
肯定是没关系的,怎么可能不用全局变量呢。你把功能区分开就好了,比如数据刷新,数据处理,数据采集等, ...

好的,谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:人生苦短,冬日苦长,正是青葱,却无骄阳

115

主题

620

帖子

5

粉丝