0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RTOS內(nèi)核源碼,非必要不建議閱讀

strongerHuang ? 來源:strongerHuang ? 2023-10-30 16:37 ? 次閱讀

最近看到技術(shù)交流群在討論【要不要閱讀RTOS內(nèi)核源碼】的話題。站在過來人的角度來說下:非必要,不建議你閱讀RTOS內(nèi)核源碼。

我在讀大學(xué)的時(shí)候,喜歡研究底層的技術(shù)原理,比如數(shù)碼管、液晶、74系列邏輯IC等,好奇它們?cè)趺垂ぷ?、怎么?shí)現(xiàn)的,也會(huì)寫一些代碼來測(cè)試,驗(yàn)證其中原理。

再后來,學(xué)習(xí)一些協(xié)議棧、RTOS,會(huì)比較好奇,也會(huì)花時(shí)間研究其中的源碼。直到深入閱讀、理解RTOS內(nèi)核源碼的時(shí)候,才發(fā)現(xiàn)并非一件容易的事。

我學(xué)習(xí)RTOS的經(jīng)歷

先給大家說下我學(xué)習(xí)RTOS的經(jīng)歷吧。

我學(xué)習(xí)RTOS是從大學(xué)的時(shí)候就開始了,在學(xué)習(xí)RTOS之前和很多人一樣,也是什么都不懂,跟著老師、看著周邊的人學(xué)什么就跟著學(xué)什么,比如數(shù)電、模電、單片機(jī)編程、外設(shè)等。

單片機(jī)裸機(jī)各種資源外設(shè)學(xué)的差不多,感覺應(yīng)該進(jìn)階一下了,所以就選擇了RTOS。

在2011、12年讀書的時(shí)候,RTOS還不像現(xiàn)在這么流行(那時(shí)還是以“裸機(jī)”為主),那個(gè)時(shí)候網(wǎng)上RTOS的教程大多都還是以μCOS為主,其他RTOS的資料相對(duì)很少。像FreeRTOSRT-Thread以及其他RTOS的資料都很少。

因?yàn)樵缙讦藽OS的發(fā)行都有配套的書籍(請(qǐng)參看μC/OS的那段故事),所以早些年在教學(xué)方面大多選擇了μCOS,這也是我當(dāng)時(shí)選擇μCOS作為學(xué)習(xí)的原因。

(順便再提一點(diǎn),雖然早期μCOS是商業(yè)收費(fèi)的操作系統(tǒng),但源碼是可以免費(fèi)下載的)

1.選擇單片機(jī)開發(fā)

我早期學(xué)習(xí)單片機(jī)主要是51(AT89C51、STC89C51等),MSP430等,可以說對(duì)他倆玩的比較熟。

所以學(xué)習(xí)μCOS也是基于他倆開始的,因?yàn)榇蠹叶贾?1資源(Flash、RAM)確實(shí)太少了,雖然網(wǎng)上有基于51單片機(jī)移植μCOS系統(tǒng)的,但移植系統(tǒng)之后基本干不了別的事了。

所以,我基于51移植μCOS折騰了一段時(shí)間就放棄了,選擇了MSP430,430相對(duì)51資源多一些,還能有發(fā)揮的余地。

早些年如果有學(xué)習(xí)基于MSP430移植μCOS系統(tǒng)的同學(xué),或許都看過我早期分享的源碼:

764e93a8-76d4-11ee-939d-92fbcf53809c.png

因?yàn)镸SP430之后用過STM32xx、 LPC17xx等基于ARM Cortex-M3 內(nèi)核的32位單片機(jī),當(dāng)時(shí)基于MSP430跑μCOS系統(tǒng)也感覺很吃力,所以后來選擇了STM32跑μCOS系統(tǒng)。

順便再回憶一下STM32開發(fā)板:

現(xiàn)在STM32開發(fā)板基本是正點(diǎn)原子、安富萊、野火這三家的天下,早些年基于STM32的開發(fā)板是一家神舟開發(fā)版,當(dāng)時(shí)可以說全網(wǎng)最火,關(guān)鍵原因是性價(jià)比很高。

765285bc-76d4-11ee-939d-92fbcf53809c.jpg

當(dāng)時(shí),像神舟III號(hào)基于STM32F103ZE那樣一塊板載資源非常豐富的開發(fā)板只要一百多。雖然我當(dāng)時(shí)比較窮,但我還是沒經(jīng)受住誘惑買了神舟I號(hào),后又買了神舟III號(hào)。

可惜的是,神舟開發(fā)板團(tuán)隊(duì)后面(應(yīng)該在15年之后)就沒有再做了,不知道有多少人還有這段記憶?

2.閱讀μCOS內(nèi)核源碼

我接觸μCOS操作系統(tǒng)是在2011年,那個(gè)時(shí)候也是參考各種例程移植代碼,觀察各種現(xiàn)象。

雖然系統(tǒng)跑通了,內(nèi)核資源也用上了,但始終不能理解各種原理,也不能Get到實(shí)時(shí)操作系統(tǒng)的精髓。

于是,開啟了閱讀源碼之路,這一下來,發(fā)現(xiàn)并不簡(jiǎn)單。因?yàn)椴僮飨到y(tǒng)中有各種指針、數(shù)組、結(jié)構(gòu)體等,那個(gè)時(shí)候老師也從來沒有教過數(shù)據(jù)結(jié)構(gòu)那些知識(shí),只能靠自己一步一步摸索。

我閱讀μCOS操作系統(tǒng)內(nèi)核源碼及內(nèi)核資源,前前后后、斷斷續(xù)續(xù)大概花了一年時(shí)間,之后才深入明白R(shí)TOS原來是這么工作的,也更加理解了μCOS內(nèi)核調(diào)度原理、通信機(jī)制等。

如果早些年有學(xué)習(xí)μCOS的同學(xué),應(yīng)該會(huì)看過我早期分享的一份基于神舟III號(hào)、uCOS2.92系統(tǒng)的源碼,包含多任務(wù)、信號(hào)量、互斥鎖、事件標(biāo)志、消息郵箱、消息隊(duì)列、內(nèi)存管理等各種例程:

765666a0-76d4-11ee-939d-92fbcf53809c.png

這份源碼有中文注釋,是我早期學(xué)習(xí)μCOS的時(shí)候一步一步翻譯過來,當(dāng)時(shí)學(xué)習(xí)μCOS可以說下了狠功夫。

學(xué)習(xí)RTOS有必要閱讀源碼嗎?

你看了我上面的經(jīng)歷,可能會(huì)有一種閱讀內(nèi)核源碼的沖動(dòng)。

其實(shí),對(duì)于很多人我是不建議閱讀源碼,特別是兩種人:

基礎(chǔ)較差的人

沒有時(shí)間的人

我學(xué)習(xí)RTOS之前折騰過很多源碼,也參加過電子設(shè)計(jì)競(jìng)賽,自認(rèn)為基礎(chǔ)還可以。關(guān)鍵是在大學(xué),有大量的時(shí)間。

如果你基礎(chǔ)不好,且沒有太多空閑時(shí)間,又要學(xué)習(xí)RTOS,閱讀源碼一定要慎重、慎重、再慎重。

對(duì)于絕大部分讀者,我的建議是:直接參考例程,然后折騰操作系統(tǒng)的各種API,通過狀態(tài)燈、串口打印輸出理解其中的作用及原理。

比如:創(chuàng)建任務(wù)之后,刪除任務(wù),你觀察狀態(tài)燈是否還在執(zhí)行這個(gè)任務(wù)。

閱讀并理解內(nèi)核源碼有什么好處?

你可能會(huì)問:不建議閱讀源碼,是不是閱讀源碼就沒啥作用了?

閱讀并理解源碼其實(shí)對(duì)自己有很大幫助作用的,比如你會(huì)進(jìn)一步理解RTOS各種通信機(jī)制方便后期應(yīng)用編程,再比如能提升自己的編程思維,我后期很多項(xiàng)目都借鑒了一些源碼的模式。

最后再說明一下,RTOS內(nèi)核有一些相對(duì)復(fù)雜的內(nèi)容,如果你基礎(chǔ)不好,可能閱讀幾天就放棄了。同時(shí),如果你沒時(shí)間,只是三天打魚兩天曬網(wǎng),最終可能沒有一點(diǎn)收獲。

所以,對(duì)于絕大部分人我是不建議閱讀源碼。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:RTOS內(nèi)核源碼,非必要不建議閱讀

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RTOS信號(hào)量、隊(duì)列通信原理

    有深入理解RTOS原理,或閱讀RTOS源碼的同學(xué)應(yīng)該知道:RTOS實(shí)現(xiàn)任務(wù)間通信通常是由一系列指針進(jìn)行操作實(shí)現(xiàn)的。
    發(fā)表于 08-16 10:07 ?1568次閱讀

    深入理解和實(shí)現(xiàn)RTOS_連載

    的前生今世感興趣,建議仔細(xì)閱讀《嵌入式操作系統(tǒng)史話》這個(gè)連載的文章,作者何小慶教授花了很多精力編寫了這組資料。深入理解和實(shí)現(xiàn)RTOS_連載2_多任務(wù)機(jī)制概述在前面我們?cè)榻B了多任務(wù)系統(tǒng)是如何演化的。和前后
    發(fā)表于 05-29 11:20

    Win10系統(tǒng)進(jìn)行深度學(xué)習(xí)時(shí)系統(tǒng)C盤滿了,正確卸載一些非必要的內(nèi)容的方法

    C盤:當(dāng)Win10系統(tǒng)進(jìn)行深度學(xué)習(xí)的時(shí)候發(fā)現(xiàn)系統(tǒng)C盤滿了,大神教你如何正確卸載一些非必要的內(nèi)容——Jason niu
    發(fā)表于 12-26 10:45

    Linux內(nèi)核源碼之我見——內(nèi)核源碼的分析方法

    一、內(nèi)核源碼之我見Linux內(nèi)核代碼的龐大令不少人“望而生畏”,也正因?yàn)槿绱耍沟萌藗儗?duì)Linux的了解僅處于泛泛的層次。如果想透析Linux,深入操作系統(tǒng)的本質(zhì),閱讀
    發(fā)表于 05-11 07:00

    我的項(xiàng)目要不要跑RTOS?

    經(jīng)常有初學(xué)讀者問一些關(guān)于RTOS的問題,比如: 我現(xiàn)在要不要學(xué)習(xí)RTOS?學(xué)習(xí)RTOS有什么好處?我的項(xiàng)目要不要跑
    發(fā)表于 06-17 06:30

    下載編譯源碼的要點(diǎn)和搭建源碼閱讀環(huán)境的方法

    下載編譯源碼的要點(diǎn)和搭建源碼閱讀環(huán)境的方法。下載編譯源碼,一方面是為了搭建源碼閱讀環(huán)境,另一方面
    發(fā)表于 01-10 06:49

    實(shí)時(shí)操作系統(tǒng)RTOS必要的嗎

    什么目標(biāo)是決定RTOS必要的還是花瓶的關(guān)鍵?如何選擇RTOS?
    發(fā)表于 02-28 06:21

    Linux內(nèi)核閱讀心得體會(huì)

    Linux內(nèi)核閱讀心得體會(huì)
    發(fā)表于 10-24 08:55 ?8次下載
    Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>閱讀</b>心得體會(huì)

    需要掌握的Linux內(nèi)核源碼分析方法

    Linux內(nèi)核代碼的龐大令不少人“望而生畏”,也正因?yàn)槿绱耍沟萌藗儗?duì)Linux的了解僅處于泛泛的層次。如果想透析Linux,深入操作系統(tǒng)的本質(zhì),閱讀內(nèi)核源碼是最有效的途徑。
    發(fā)表于 04-28 16:54 ?737次閱讀
    需要掌握的Linux<b class='flag-5'>內(nèi)核</b><b class='flag-5'>源碼</b>分析方法

    華為鴻蒙系統(tǒng)內(nèi)核源碼分析上冊(cè)

    鴻蒙內(nèi)核源碼注釋中文版【 Gitee倉】給 Harmoηy○S源碼逐行加上中文注解,詳細(xì)闡述設(shè)計(jì)細(xì)節(jié),助你快速精讀 Harmonyos內(nèi)核源碼,掌握整個(gè)鴻蒙
    發(fā)表于 04-09 14:40 ?17次下載

    分享一個(gè)超級(jí)實(shí)用的源碼閱讀小技巧

    工欲善其事必先利其器; 我發(fā)現(xiàn)函數(shù)調(diào)用圖可以讓我們更加直觀地了解到源碼函數(shù)直接的調(diào)用和層次關(guān)系,提高閱讀源碼的效率 。 1 前言 看源碼的時(shí)候,心血來潮想弄一下函數(shù)之前的調(diào)用關(guān)系,想起
    的頭像 發(fā)表于 05-29 11:50 ?1904次閱讀
    分享一個(gè)超級(jí)實(shí)用的<b class='flag-5'>源碼</b><b class='flag-5'>閱讀</b>小技巧

    MCU跑操作系統(tǒng)時(shí)RTOS總是必要的嗎

    對(duì)許多嵌入式項(xiàng)目來說,系統(tǒng)設(shè)計(jì)師都傾向于選擇實(shí)時(shí)操作系統(tǒng)(RTOS)。但RTOS總是必要的嗎?答案是取決于具體的應(yīng)用,因此了解我們要達(dá)到什么目標(biāo)是決定RTOS
    的頭像 發(fā)表于 11-18 15:45 ?2147次閱讀

    閱讀內(nèi)核系列之內(nèi)核調(diào)度器為何全局導(dǎo)出

    [導(dǎo)讀]?Linux內(nèi)核代碼龐大,閱讀內(nèi)核書籍總覺得云山霧繞,紙上得來終覺淺,希望通過閱讀代碼撰寫筆記,能將這美人神秘的面紗掀開一角,...
    發(fā)表于 02-07 11:49 ?1次下載
    <b class='flag-5'>閱讀</b><b class='flag-5'>內(nèi)核</b>系列之<b class='flag-5'>內(nèi)核</b>調(diào)度器為何全局導(dǎo)出

    AOSP Android11系統(tǒng)源碼內(nèi)核源碼簡(jiǎn)析

    AOSP源碼中并不包括內(nèi)核源碼,需要單獨(dú)下載,內(nèi)核源碼有很多版本,比如common是通用的Linux內(nèi)核
    的頭像 發(fā)表于 01-29 09:25 ?4899次閱讀

    如何去閱讀源碼,我總結(jié)了18條心法

    在一個(gè)優(yōu)秀的開源項(xiàng)目中,設(shè)計(jì)模式處處存在,所以在你開始閱讀源碼之前最好先了解一下常見的一些設(shè)計(jì)模式。當(dāng)你了解了一些設(shè)計(jì)模式以后,在源碼中遇到了相關(guān)的設(shè)計(jì)模式,你就可以快速明白代碼結(jié)構(gòu)的設(shè)計(jì),從而以整體的視角去
    的頭像 發(fā)表于 07-17 16:00 ?658次閱讀
    如何去<b class='flag-5'>閱讀</b><b class='flag-5'>源碼</b>,我總結(jié)了18條心法