1. 程式人生 > >九天攬月帶你零基礎學習Nuttx(1)

九天攬月帶你零基礎學習Nuttx(1)

目錄

摘要



本節主要記錄自己Nuttx的過程,如果有錯誤的歡迎批評指正,看了網上大部分的部落格,個人感覺寫的一塌糊塗,容易產生誤導,這裡我們怎麼學習Nuttx,我感覺不要把它想得太複雜,想想你怎麼學習的Linux,怎麼學習的UCOS,怎麼學習的FreeRTOS,想想你怎麼學習的RTT,不都鳥樣嗎?,無非多了哪些功能,少了哪些功能!!!記住你的重點是瞭解,我們會用就行!!!別一口吃個胖子,孰能生巧,多接觸自然就好了。Nuttx是什麼鬼,我們總得知道吧,這個很重要,其他的慢慢來學,這裡不妨建議按照原子教你玩FreeRTOS或者UCOS的過程來學。微信:lxw15982962929或者手機:18129927205,扣扣:995439743



第一部分:Nuttx簡介



1.Nuttx這鬼是啥?


要想學好Nuttx,我們的知道這鬼是啥???跟其他的作業系統有啥區別???為啥老外喜歡用???前身是什麼???作為一個小白我怎麼看懂那些大佬的部落格???一句話沒有處在小白的角度分析問題,思路混亂!!!



1)Nuttx 是一個實時嵌入式作業系統(Embedded RTOS);


2)強調標準相容和小型封裝


3)具有從8位到32位微控制器環境的高度可擴充套件性。


4)NuttX 主要遵循 Posix 和 ANSI 標準。對於在這些標準下不支援的功能,或者不適用於深度嵌入環境的功能(如 fork()),採用來自 Unix 和常見 RTOS (如 VxWorks)的額外的標準 API。


5)NuttX 的第一個版本由 Gregory Nutt 於 2007 年在寬鬆的 BSD 許可證下發布。



這裡我們對比下RT-Thread


RT-Thread是一款來自中國的開源嵌入式實時作業系統,由國內一些專業開發人員從2006年開始開發、維護,除了類似FreeRTOS和UCOS的實時作業系統核心外,也包括一系列應用元件和驅動框架,如TCP/IP協議棧,虛擬檔案系統,POSIX介面圖形使用者介面,FreeModbus主從協議棧,CAN框架,動態模組等,因為系統穩定,功能豐富的特性被廣泛用於新能源,電網,風機等高可靠性行業和裝置上,已經被驗證是一款高可靠的實時作業系統。



一句話基本都鳥樣



2.Nuttx這鬼有啥特點?


1) 標準相容
2) 核心任務管理
3) 模組化設計
4) 完全可搶佔
5) 天然可擴充套件
6) 高度可配置
7) 圖形化配置工具
8) 容易移植到新的處理器架構,SoC架構,或板級的架構
9) FIFO 和輪轉排程
10) 實時的、確定性的、支援優先順序繼承
11) 類 POSIX/ANSI 的任務控制、命名訊息佇列、計數訊號量、時鐘/定時器、訊號、pthread、環境變數、檔案系統
12) 類VxWorks的任務管理和看門狗定時器
13) BSD (BSD開源協議是一個給予使用者很大自由的協議)套接字介面
14) 優先順序管理的擴充套件
15) 可選的具有地址環境的任務(程序)
16) 可繼承的“控制終端”和 I/O 重定向。偽終端
17) 按需分頁
18) 系統日誌記錄
19) 可以構建為開放的、平面的嵌入式 RTOS,或單獨構建為具有系統呼叫介面的微核心
20) 內建執行緒級CPU負載測量
21) 客製化的NuttX C庫
22) NuttX使用者指南很好的描述了應用程式介面 。


對比下FreeRTOS特點:


這裡寫圖片描述


是不是就是多些少些功能,注意Nuttx類似Linux,所以可以參照linux的學習思想



3.Nuttx這鬼可以用在哪些平臺?


1. ARM

  • ARM7TDMI (TI TMS320 C5471, Calypso, MoxART, NXP LPC214x, LPC2378, STMicro STR71x)
    • ARM920T (Freescale i.MX1)
    • ARM926EJS (TI DM320, NXP LPC31xx)
    • ARM Cortex-A5 (Atmel SAMA5D2, SAMA5D3, SAMA5D4)
    • ARM Cortex-A8 (Allwinner A10)
    • ARM Cortex-A9 (NXP/Freescale i.MX6)
    • ARM Cortex-R4/R4F (TI TMS570)
    • ARM Cortex-M0 (nuvoTon NUC120, NXP/Freescale KL25Z, KL26Z, Atmel SAMD20/21, SAML21, ST Micro STM32 F0)
    • ARM Cortex-M3 (ST Micro STM32 F1/L4/F2, TI/Stellaris LM3S, NXP LPC17xx, Atmel SAM3U/3X, SiliconLabs EFM32)
    • ARM Cortex-M4 (with/without floating point unit: ST Micro STM32 F3/F4/L4, TI/Stellaris LM4F/TM4C, NXP LPC43xx, - Freescale Kinetis K20/K40/60/64/66, Atmel SAM4C/4E/4S/4L, Infineon XMC4xxx)
      -ARM Cortex-M7 (Atmel SAMV71/SAME70, ST Micro STM32 F7)
      這裡需要注意我們pixhawk用的就是這個

2.Atmel AVR

  • Atmel 8-bit AVR (AT90USB, ATmega)
  • AVR32

3. Intel

  • 80×86

4. MIPS

  • MicroChip PIC32MX (MIPS32 24Kc)
  • MicroChip PIC32MZ (MIPS32 M14k)

5. Misoc

  • LM32 (Qemu)

6. Renesas/Hitachi

  • Renesas/Hitachi SuperH
  • Renesas M16C/26

7.RISC-V


8. Xtensa LX6

  • Expressif ESP32

9.Zilog

  • Zilog Z16F ZNeo
  • Zilog eZ80 Acclaim!
  • Zilog Z8Encore!
  • Zilog Z80


第二部分:Nuttx學習資料


在進入主題之前看看我們之前學習UCOS,FreeRTOS的資料目錄,Nuttx有資料嗎?答案有,但是全是英文的,有視訊嗎?有,也是英文的,資料怎麼樣,反正做的沒有UCOS好看,畢竟國內英文水平處於…,哈哈!!還是建議多看吧,看不懂就google,百度翻譯!!!


這裡寫圖片描述
這裡寫圖片描述


官網資料Nuttx官網資料
資料手冊資料手冊下載
Nuttx視訊資料:視訊網站
Nuttx相關原始碼下載

  1. 下載Nuttx原始碼:git clone https://bitbucket.org/nuttx/nuttx
  2. 下載apps:git clone https://bitbucket.org/nuttx/apps
  3. 下載工具:git clone https://bitbucket.org/nuttx/tools

  • 下載目錄

ubuntu下載Nuttx相關原始碼
- nuttx目錄
這裡寫圖片描述
- apps目錄
這裡寫圖片描述

  • tools目錄
    這裡寫圖片描述

到這裡這就是Nuttx所有的程式碼,無論你移植哪個平臺,都是來自這裡,所以你可以對比下PX4或者ardupilot的Nuttx原始碼,看看是不是基本一樣。


首先看下Ardupilot的Nuttx,在目錄:modules/PX4Nuttx下


這裡寫圖片描述
這裡寫圖片描述


再看下PX4的Nuttx,在目錄:platforms/nuttx下

這裡寫圖片描述


大家都知道pixhawk飛控的主控晶片是STM32F427VIT6,如果我們想換個自己的晶片比如F7或者F4,等等,我們首先要修改Nuttx,地方就是在nuttx-configs裡面,我們不妨看下里面是配置什麼,這裡我們以px4fmu-v2為例,


這裡寫圖片描述


整個board.h的檔案就不貼出來了,感興趣的可以看戲,裡面有很多配置和定義,像時鐘,串列埠,CAN,SPI,IIC,led等。



第一節大家注意熟悉下Nuttx原始碼就行,看不懂不重要,關鍵是後面用的時候再去理解。吐槽下:網上很多人上來就看.txt,我個人感覺就是扯淡。應該首先熟悉一下Nutxx這鬼,後面我們在慢慢分析,對於一個都不懂系統的小白,能看懂.txt檔案,有啥用???還是一句話,我們先用,所以第二講主要回到程式再去看理論。