单片机也能跑多线程?5分钟带你入门FreeRTOS

Comments

搞嵌入式的 2024-04-19

最近在做一个比较复杂的项目,深刻体会到了rtos的好处。rtos是一个工具,学习它需要一定的门槛和成本,但是一旦你掌握了这个工具,并在复杂的项目里使用这个工具,就能大大降低开发难度。当然单片机ram要够大,能足够去挥霍。

♥ 727 ↩ 37

教育公平 2024-04-20

一人血书,请孙老师多更新几期FreeRTOS的教学。[鸡腿][鸡腿][鸡腿] 或者说再深入一些,把这个5分钟总的概览拓展出几个常见场景应用的简介。如果比作一本书,目前这个视频好像是快速翻了下前言,直接跳到自学的话,跨度有点大,同时其他的教学不如孙老师会讲。所以在前言和正文之间缺了一套内容,对主要章节的独立的概述和总结。有了这个可以更高效,更有针对性的自学。

♥ 463 ↩ 13

小白猫鼬 2024-04-19

对于单片机而言绝大多数应用场景本质都是在“点灯”,程序应该越简单越好。

♥ 736 ↩ 64

熊熊猫猫po 2024-04-20

rtos的坑新手有些体会不到 例如互斥锁死锁,优先级翻转,还有单总线不保护时序,像ds18b20,软件iic,spi这些低速的总线驱动都有可能失败,内部flash读写有可能会失败,进而进入hardfault中断。关中断的话,系统就不实时,有可能收不到重要信号,可以选择暂时关掉调度器,这样子调度器降停止工作,其实关中断调度器也停止了,像ds18b20这种慢速的总线系统是极其厌恶的,我也是看来安富莱的帖子才了解到可以用硬件定时器做状态机解析驱动ds18b20。

♥ 432 ↩ 28

极佳家 2024-04-23

其实大部分工程中极少用到操作系统,除非你做的是嵌入式,而非单片机。 但是嵌入式更像是学习软件,跟单片机完全不是一个套路了。 很多老板和资深还极力反对使用操作系统,主要原因是对于时间的把握不如裸跑准确。而且上系统的确对于硬件资源的消耗过大,本来C8T6裸跑就能实现的东西,弄不好CBT6都跑不起来,多花了钱还办不成事儿,得不偿失。 其实裸跑也可以做时间分片做多任务,而且代码也不多。现实中绝大多数工程跑多任务都是这么做的,真的不用系统。 但是学学涨点知识也好,但是不要较真。见到任务多了,主观上就认为都必须上系统,真没这一说。 学习操作系统的好处,可能还就是以学习为主。

♥ 452 ↩ 35

你像野驴 2024-04-19

我都是定时中断处理各种逻辑,WHILE来干阻塞的[doge]

♥ 218 ↩ 21

cokesu 2024-04-19

其实我有一个不理解的地方,在抢占式调度的情况下,如果有2个任务A和B他们优先级一样,且A运行时间需要500ms,B运行时间也是500ms,这个运行时间不是vtaskdelay那种是真的需要运行这么多的时间,那么这2个任务是如何运行的是先A执行500ms然后B执行500ms还是说A执行一段时间后然后任务切换到B运行一段时间这样交替运行的,如果是交替运行那么是每个任务运行一个时间片的时间吗

♥ 134 ↩ 39

阳光下的竹蜻蜓 2024-04-19

感觉还是更喜欢国产的rtthread,因为有中文手册[doge]

♥ 104 ↩ 7

兵无常形_ 2024-04-19

其实轮转调度和并行并不是rtos的必选项,理论上rtos是为了实时调度任务而存在。但是话说回来这功能已经成为了freertos及其他类似系统的特色之一。

♥ 75 ↩ 3

愚拙呀 2024-04-20

无论写什么程序,都尽量不要用delay来延时,这是很糟糕的做法。最好用计时器来解决。

♥ 65 ↩ 2

飞龙在天_bili 2024-04-19

直接用全局变量代替消息不行吗

♥ 76 ↩ 26

依然潇洒XTX 2024-04-19

活爹啊[打call]缺啥您发啥[星星眼]

♥ 42

wbeiqhe0 2024-04-21

多线程和多任务是两个东西. 单核上跑RTOS只能算多任务, 不要误导人.

♥ 41 ↩ 16

孤寡柏拉图 2024-04-19

ESP32双核可以学习FreeRtos,可以看孤独的二进制。合宙的LUATOS也可以学习操作系统

♥ 32

EzorienQAQ 2024-04-20

当cubeide可以官方移植freertos的时候,不管做啥项目我都直接塞个freertos上去。后面汇报的时候还能多写点[捂眼][捂眼]

♥ 25

嘿与嘿哈 2024-04-20

一个定时器1ms中断,u16的i在中断里自增,while里用if(i%800==0)和1200,设置两个标志位,满足就开或关

♥ 20 ↩ 14

AS_Turtle 2024-04-20

去年电赛的时候老师叫我们上freeRTOS,捣腾了几天,CubeMX配置倒是会了,但是任务之间传递变量一直没搞明白。到现在还是没学会那些什么信号量互斥量啥的

♥ 20 ↩ 11

稽无止境 2024-04-19

如果两个任务之间有对寄存器(逻辑上相当于全局变量)的操作怎么保证正常运行?比如task a把寄存器b设为0xff,在任务完成后重置为0x00供下次使用,两个任务(rtos层面)轮替时就会出现使用的寄存器值不正确,这种除了修改任务实现有没有其他办法

♥ 17 ↩ 6

Ganix 2024-04-19

我自己搞着玩,在esp32上用micropython跑的coruntine,人生苦短

♥ 20

一十二刻 2024-04-20

感觉实际开发中使用操作系统 更倾向于执行相互无直接关联的任务 或者是单向依赖的项目 比方说一个线程专门用于ad采样 另一个线程对采样的结果做处理 另外就是优先级管理 等等 不管有没有操作系统一般灯控都会封装在一起处理 up只是举例当然没有关系我只是说明一下 裸机这种其实也很好控制 开一个定时器当时基单元 比方说1ms 中断里给标志位置1 主线程while(1) 循环跑 其中加个标志位判断 while底下是实时区 放需要快速执行的东西 判断里是1ms区 1ms执行一次 给不同周期的功能加上计数器再判断一下就好了 听着很麻烦其实还好 封装一下 把函数指针作为参数就可以实现周期定时执行 或者像闹钟一样倒计时的功能了 另外裸机实时性和执行效率都要远高于操作系统 并不是有操作系统就更强 侧重点不一样

♥ 16