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

แชร์
ฝัง
  • เผยแพร่เมื่อ 18 ธ.ค. 2024

ความคิดเห็น • 77

  • @dayworkhard
    @dayworkhard 6 หลายเดือนก่อน +7

    写了多少年的PC上的多线程代码,现在看看FreeRTOS的线程调度,感觉很有当年PC多线程的感觉。简单来讲就是非堵塞式近似于同步的异步处理。当年学嵌入式c的时候,1ns的函数运行时我们是计算在内的,当时教程比较严谨。其实在PC OS上并行运行的程序多了以后,1ns的区分是能体验出来的,然后线程交互要花费不只1ns,至少在PC上。FreeRTOS可以看成小型PC OS。PC上的多线程现在多是高级语言打包,很少能见到底层实现。PC上的CPU、RAM可以看作为高级单片机。无论多少个核心,没有完美执行多线程的,多多少少有点分配不均,只是肉眼难看,示波器能看出来。如果在PC上写严格的时间运行程序,都是写的堵塞式单线程程序,这里就有点浪费多核心cpu,这点不如直接用单片机。例如好多优化不好的游戏就这样写的,所谓1核有难,7核围观。

  • @徐志達
    @徐志達 7 หลายเดือนก่อน +8

    其多工運行基本大概是使用計時器中斷,每隔一定時間做計時器中斷,指向程序分配器,其依據編譯好的執行程序列表分別將後續的執行指標指向個別程序。在切換程序時將所有的暫存器的值全部備份,將下一個程序先前所備份的暫存器值還原,再把執行指標指向下一個程序。

    • @techd9861
      @techd9861 7 หลายเดือนก่อน

      高级中断的应用。瞬间想起了学汇编时处理中断的经历。

    • @TMJ123
      @TMJ123 7 หลายเดือนก่อน

      高併發必學

  • @bwshiau5354
    @bwshiau5354 7 หลายเดือนก่อน +4

    謝謝,讓我對一直沒有時間搞懂的FreeRTOS有初步的概念。之前一直認為他像linux一樣是一種作業系統可以讀寫檔案,看來是沒辦法了。

    • @林天逸
      @林天逸 7 หลายเดือนก่อน

      它可以用fatfs讀寫檔案

  • @tommymairo8964
    @tommymairo8964 2 หลายเดือนก่อน +1

    1:06 8 和 12 的最大公約數是 4,所以你可以寫一個 0.2s 的循環更新狀態,判斷計數器是二的倍數還是三的倍數對 LED 狀態取反……

  • @hengfeb
    @hengfeb 7 หลายเดือนก่อน +5

    FreeRTOS 你講得最好,最棒,我最能理解。

  • @Heryun_CD4
    @Heryun_CD4 6 หลายเดือนก่อน

    感謝孫老師,請問Cypress PSoC也是多線程的嗎? 會不會很難?

  • @marvinalone
    @marvinalone 3 หลายเดือนก่อน

    最近正好在看AWS的IoT相关的东西,涉及到freeRTOS,谢谢老师的介绍!

  • @weeixunzht
    @weeixunzht 7 หลายเดือนก่อน

    受益良多,希望能持續介紹這個內容!

  • @jairwen82
    @jairwen82 7 หลายเดือนก่อน

    讲的好。那怎么知道资源不够呢?如果线程多了,时间精度会下降吗?

  • @XX-ff6kx
    @XX-ff6kx 7 หลายเดือนก่อน

    我第一次用freeRTOS是在學microros時,影片講得蠻清楚 推推

  • @leatea520
    @leatea520 7 หลายเดือนก่อน

    講得很棒,很容易理解

  • @MarvbitProject
    @MarvbitProject 7 หลายเดือนก่อน

    Nice video, what software you use to make the video ?

  • @sgwong513
    @sgwong513 7 หลายเดือนก่อน

    thanks, first time seeing video that explain rtos concept so clearly. like and subscribed.

  • @wildoxlin
    @wildoxlin 7 หลายเดือนก่อน

    容易理解,太棒了

  • @lililichunwei
    @lililichunwei 7 หลายเดือนก่อน

    很容易理解,謝謝

  • @BigBigSmile
    @BigBigSmile 7 หลายเดือนก่อน

    太感谢了,太感谢了

  • @liweilin6649
    @liweilin6649 7 หลายเดือนก่อน

    希望有更多FreeeRTOS的講解

    • @atussentinel
      @atussentinel 7 หลายเดือนก่อน

      上一学期操作系统的课就什么都知道了,yt有的是资源,会英文更好

  • @soapsam4383
    @soapsam4383 7 หลายเดือนก่อน

    两个灯同时闪烁可以用2个定时器实现吧

  • @unnamed2047
    @unnamed2047 7 หลายเดือนก่อน +2

    我是做互联网相关开发的,对操作系统有一定了解,最近在造一些东西学习单片机,感觉这个视频漏掉了一些缺点信息。一个是多任务切换必然带来额外的性能开销,以及非阻塞 CPU 的挂起再执行计时器跟 阻塞 CPU 计时的准确性可靠性还是有比较大的差别。并发编程的复杂性也很高,不仅是逻辑上的,还有线程安全问题等,所以要实现的东西简单的话还是别用操作系统了

    • @kafuu1
      @kafuu1 7 หลายเดือนก่อน +1

      我感觉有点奇怪的是,在单核上切换也任务叫多线程吗,难道不是只是异步执行而已?

    • @unnamed2047
      @unnamed2047 7 หลายเดือนก่อน

      @@kafuu1 操作系统发明就是为了多任务,早期CPU也都是单核 甚至性能不如今天的单片机。主要是障眼法,分配计算时间给不同的任务,比如我要从 0 i++ 到 100,你要从 100 i-- 到 0,操作系统会先帮我加到 10,再帮你 减到 90,来回切换,最终我们看到Cpu 在同时干我们两的活。而且很多任务其实在等其他硬件的 IO 更应该让出 CPU 资源,感兴趣可以看看操作系统原理相关书蛮有意思,是个十分复杂有趣的体系

    • @unnamed2047
      @unnamed2047 7 หลายเดือนก่อน

      @@kafuu1 操作系统发明就是切换线程分配计算资源的,早期 CPU 都是单核当时奔腾 486 586 什么的没准还比不上今天的单片机性能,不妨碍多任务并发,让你觉得多任务同时进行,可以看看操作系统原理,就比较明白了,操作系统是个复杂精妙有趣的东西

    • @hookchen7128
      @hookchen7128 7 หลายเดือนก่อน +1

      應該是多任務切換

    • @cccc-zg1wx
      @cccc-zg1wx 7 หลายเดือนก่อน

      互聯網相关是什麼? 如果是物联网就非常相关了
      其實rtoS 就是Soc其中一款
      看功能看需求看開發成本 自己決定用不用
      可以選擇的太多了 mcu mpu fpga asic
      Mpu支持的ISA, 不同厰商支援的開发工具流程
      ARM心片天然做好的R系列就是做RTOS的,A系統 For Application 等等

  • @sunnypig6382
    @sunnypig6382 7 หลายเดือนก่อน

    谢老師😊😊

  • @陈大文-u7q
    @陈大文-u7q 7 หลายเดือนก่อน

    毕业多年都没搞懂,一下子就被孙老师教懂了

  • @zhaochengcheng3245
    @zhaochengcheng3245 7 หลายเดือนก่อน

    谢谢

  • @xfp5012
    @xfp5012 3 หลายเดือนก่อน

    能不用freertos就不用rtos,直接开个定时器去定时,然后根据定时器的时间完成时间的问题

  • @NoProblem76
    @NoProblem76 7 หลายเดือนก่อน

    孙老师怎么看coroutine?

    • @tommymairo8964
      @tommymairo8964 2 หลายเดือนก่อน

      這玩意兒就是協程呀,本身沒有 context switch,更不是多核環境 😂

  • @etherdream5906
    @etherdream5906 4 หลายเดือนก่อน

    单片机版 async/await

  • @nobody2937
    @nobody2937 7 หลายเดือนก่อน

    信号量?信号灯🚥?

  • @hengfeb
    @hengfeb 6 หลายเดือนก่อน

    如果每個老師都像你這樣教書,那不會有陳桂林。

  • @hongentsai4489
    @hongentsai4489 7 หลายเดือนก่อน

    挺好的

  • @RockyChen1205
    @RockyChen1205 7 หลายเดือนก่อน

    先按讚,再來看

  • @neilg2256
    @neilg2256 7 หลายเดือนก่อน

    这些API跟Linux C/Windows C++的都很像,功能几乎一样,名称也类似

  • @Chen-zd6rx
    @Chen-zd6rx 7 หลายเดือนก่อน +5

    這應該不能算多線程
    只是引入多工的概念,我所知的約20~30年前就有韌體工程師用這概念實現AT89C51的分時多工

    • @osasosas4313
      @osasosas4313 7 หลายเดือนก่อน +5

      算喔
      多線程可細分出軟體多線程這個分類
      就是你說的分時多工
      同時也是常見作業系統會用的排程方式

    • @JK-pz1ld
      @JK-pz1ld 7 หลายเดือนก่อน

      8051應該都是靠timer中斷,資源不夠也會卡,現在只是修改成好寫容易懂的方式讓os幫你處理更底層的東西

  • @rosspanda4042
    @rosspanda4042 7 หลายเดือนก่อน +1

    搞笑,点两个灯怎么会卡死,定时都是用中断,异步执行的。M0级别的用rtos就是找抽

    • @b_2u
      @b_2u 7 หลายเดือนก่อน

      能細說嗎

    • @rosspanda4042
      @rosspanda4042 7 หลายเดือนก่อน

      @@b_2u 单片机,中断,去了解一下

  • @SimonJinyuLiu
    @SimonJinyuLiu 7 หลายเดือนก่อน

    RT是real-time吧?引入了线程和任务,那调度是怎么处理的呢?还能叫real-time吗

    • @tommymairo8964
      @tommymairo8964 2 หลายเดือนก่อน

      real-time 指的是調度器嚴格按照任務的優先級分配 cpu quota,這樣做的好處是高優先級的任務永遠能夠保證按點執行。缺點也很明顯,如果一個高優先級的任務需要等待一個低優先級的任務,且高優先級的任務輪詢低優先級的任務完成狀態,那低優先級的任務會一直讓位給高優先級的任務,從而造成整個系統死鎖。這種現象叫 priority inverse,NASA 的火星車就出過這種事故 😂

  • @ymz9184
    @ymz9184 7 หลายเดือนก่อน

    可以用timer

  • @lukefan715
    @lukefan715 4 หลายเดือนก่อน

    u so goooood

  • @doutu4624
    @doutu4624 7 หลายเดือนก่อน +2

    搞python的感觉还是micropython更容易上手

    • @NoProblem76
      @NoProblem76 7 หลายเดือนก่อน

      搞circuitpython吧,更简单

  • @DC-xt3ui
    @DC-xt3ui 7 หลายเดือนก่อน +4

    我小白一個不知道對不對,這個有點像把中斷都幫你包好包,讓使用者容易使用的概念?

    • @osasosas4313
      @osasosas4313 7 หลายเดือนก่อน +4

      類似
      實際上在設定裡就可以看到跟中斷有關的code

    • @無名氏-l1c
      @無名氏-l1c 7 หลายเดือนก่อน +1

      約等於async

    • @atussentinel
      @atussentinel 7 หลายเดือนก่อน +4

      具体每个单片机的实现可能不尽相同,但从操作系统的层级来看就是这么个意思。针对单个核心的线程调度都大差不差

    • @b_2u
      @b_2u 7 หลายเดือนก่อน +1

      Bare metal上的async

  • @Tim88666
    @Tim88666 7 หลายเดือนก่อน +1

    听起来有点像js

  • @一二-g6c
    @一二-g6c 2 หลายเดือนก่อน

    zephyr 更好用, work,net_buf,poll,device等都非常好用.

  • @btc-btc-net
    @btc-btc-net 2 หลายเดือนก่อน

    Linux Kernel 6.12 原生支持实时 RT

  • @yuyaolin7861
    @yuyaolin7861 7 หลายเดือนก่อน

    有點中斷執行的意思

  • @fish1968-utf8
    @fish1968-utf8 7 หลายเดือนก่อน

  • @gnawacceber
    @gnawacceber 7 หลายเดือนก่อน

    重要的都沒講 寫一堆LED不就卡死整個系統 真的會寫單片機的人就不會一定要上FreeRTOS

  • @zxz4129
    @zxz4129 7 หลายเดือนก่อน

    我的理解是“多任务”

  • @KL-gc2hx
    @KL-gc2hx 7 หลายเดือนก่อน

    plc控制成千上万个定时器都不需要多线程,实现一个ton定时器就行了