一、操作系統
嵌入式操作系統介紹
嵌入式操作系統是為嵌入式系統設計的特定操作系統,它可以有效地管理系統資源并提供良好的任務調度、內存管理和驅動程序支持。
滿足實時控制要求的嵌入式操作系統(RTOS)操作系統,以下介紹11種主流的RTOS,分別為RTX、Vxworks、QNX、NuttX、μClinux、FreeRTOS,而國產的嵌入式操作系統包括都江堰操作系統(djyos)、IntewellOS、Alios Things、Huawei LiteOS、SylixOS。
1、RTX
RTX是ARM公司的一款嵌入式實時操作系統,使用標準的C結構編寫,運用RealView編譯器進行編譯。不僅僅是一個實時內核,還具備豐富的中間層組件,不但免費,而且代碼也是開放的。
主要功能:開始和停止任務(進程),除此之外還支持進程通信,例如任務的同步、共享資源(外設或內存)的管理、任務之間消息的傳遞。開發者可以使用基本函數去開啟實時運行器,去開始和終結任務,以及去傳遞任務間的控制(輪轉調度)。開發者可以賦予任務優先級。
主要特點:支持時間片,搶占式和合作式調度。不限制數量的任務,每個任務都具有254的優先級。不限制數量的信號量,互斥信號量,消息郵箱和軟定時器。支持多線程和線程安全操作。使用MDK基于對話框的配置向導,可以很方便的完成MDK的配置。
2、Vxworks
美國WindRiver公司于1983年設計開發的一種嵌入式實時操作系(RTOS),具有硬實時、確定性與穩定性,也具備航空與國防、工業、醫療、汽車、消費電子產品、網絡及其他行業要求的可伸縮性與安全性。
主要功能:
支持可預測的任務同步機制、支持多任務間的通信、存儲器優化管理、操作系統的(中斷延遲、任務切換、驅動程序延遲等)行為是可知的和可預測的。實時時鐘服務+中斷管理服務。
主要特點:
具有一個高性能的操作系統內核Wind(實時性好、可裁減)友好的開發調試環境、較好的兼容性、支持多種開發和運行環境。
心僅提供4種服務:進程調度、進程間通信、底層網絡通信和中斷處理,其進程在獨立的地址空間運行。所有其它OS服務,都實現為協作的用戶進程,因此QNX核心非常小巧(QNX4.x大約為12Kb)而且運行速度極快。
4、NuttX
NuttX是一個實時嵌入式操作系統(Embedded RTOS),第一個版本由 Gregory Nutt 于 2007 年在寬松的 BSD 許可證下發布。
主要功能:可以構建為開放的、平面的嵌入式 RTOS,或單獨構建為具有系統調用接口的微內核。容易擴展到新的處理器架構、 SoC 架構或板級架構。實時的、確定性的、支持優先級繼承。BSD 套接字接口。優先級管理的擴展。可選的具有地址環境的任務(進程)。
主要特點:配置靈活,采用模塊化設計,核心部分由小同的組件構成,包括內核、C語言庫和底層運行包等。每個組件可提供大量的配置選項(實時內核也可作為可選配置),使用eCos提供的配置工具可以很方便地配置,并通過不同的配置使得eCos能夠滿足不同的嵌入式應用要求。
5、μClinux
μClinux是一種優秀的嵌入式Linux版本,其全稱為micro-control Linux,從字面意思看是指微控制Linux。同標準的Linux相比,μClinux的內核非常小,但是它仍然繼承了Linux操作系統的主要特性,包括良好的穩定性和移植性、強大的網絡功能、出色的文件系統支持、標準豐富的API,以及TCP/IP網絡協議等。因為沒有MMU內存管理單元,所以其多任務的實現需要一定技巧。
μClinux在結構上繼承了標準Linux的多任務實現方式,分為實時進程和普通進程,分別采用先來先服務和時間片輪轉調度,僅針對中低檔嵌入式CPU特點進行改良,且不支持內核搶占,實時性一般。
綜上可知,μClinux最大特點在于針對無MMU處理器設計,這對于沒有MMU功能的stm32f103來說是合適的,但移植此系統需要至少512KB的RAM空間,1MB的ROM/FLASH空間,而stmf103擁有256K的FLASH,需要外接存儲器,這就增加了硬件設計的成本。
μClinux結構復雜,移植相對困難,內核也較大,其實時性也差一些,若開發的嵌入式產品注重文件系統和與網絡應用則μClinux是一個不錯的選擇。
6、FreeRTOS
由于RTOS需占用一定的系統資源(尤其是RAM資源),只有μC/OS-II、embOS、salvo、FreeRTOS等少數實時操作系統能在小RAM單片機上運行。
相對于C/OS-II、 embOS等商業操作系統,FreeRTOS操作系統是完全免費的操作系統,具有源碼公開、可移植、可裁減、調度策略靈活的特點,可以方便地移植到各種單片機上運行,其最新版本為6.0版。
作為一個輕量級的操作系統,FreeRTOS提供的功能包括:任務管理、時間管理、信號量、消息隊列、內存管理、記錄功能等,可基本滿足較小系統的需要。
FreeRTOS內核支持優先級調度算法,每個任務可根據重要程度的不同被賦予一定的優先級,CPU總是讓處于就緒態的、優先級最高的任務先運行。
FreeRT0S內核同時支持輪換調度算法,系統允許不同的任務使用相同的優先級,在沒有更高優先級任務就緒的情況下,同一優先級的任務共享CPU的使用時間。
7、都江堰操作系統(djyos)
都江堰操作系統,簡稱djyos,得名于一個偉大的水利工程:都江堰。
與傳統操作系統不同,djyos不是以線程而是以事件為調度核心,這種調度算法使程序員擺脫模擬計算機執行過程編寫程序的思維方式,而是按人類認知世界的方式編寫應用程序,就如同在嵌入式編程中引入了VC似的。
djyos的調度算法使程序員可以擺脫線程和進程的束縛,djyos沒有有關線程的api,一個完全不懂線程知識的程序員也可以順利地在djyos下編寫應用程序。
djyos 操作系統是以事件為核心進行調度的,這種調度策略使程序員可以按人類認知事物的習慣而不是計算機的習慣來編程。
IntewellOS
Intewell操作系統是科東軟件基于“道”系統研發出來的一款微內核實時操作系統(RTOS),具備軟件定義控制、高實時、微內核、微秒級響應、高可靠、全國產自主可控、多業務承載、軟硬件解耦等一系列的特性。
主要功能:
具有良好的可擴展性、友好的用戶開發環境和豐富的開發調試工具,提供POSIX接口,支持目前市面上的主流芯片。Intewell還可以提供Windows和Linux的實時擴展解決方案,可以為用戶更好地進行業務部署。
主要特點:
可以單個RTOS在多核上運行,高實時、高可靠;驅動、組件等運行在核心態外的非特權級空間中,系統隔離性和可靠性高;采用用戶級線程,線程切換性能以及線程間的同步、通信性能更高;支持X86、ARM、RISC-V等各種架構的硬件平臺。
9、Alios Things
據著名媒體嵌入式操作系統RTOS介紹,AliOS Things 是 AliOS 家族旗下、面向 IoT 領域的、高可伸縮的物聯網操作系統。AliOS Things將致力于搭建云端一體化IoT基礎設施,具備極致性能、極簡開發、云端一體、豐富組件、安全防護等關鍵能力,并支持終端設備連接到阿里云Link,可廣泛應用在智能家居、智慧城市、新出行等領域。
10、Huawei LiteOS
嵌入式操作系統RTOS介紹,Huawei LiteOS 是華為面向IoT領域,構建的輕量級物聯網操作系統,以輕量級低功耗、快速啟動、互聯互通、安全等關鍵能力,為開發者提供 “一站式” 完整軟件平臺,有效降低開發門檻、縮短開發周期。
11、SylixOS
嵌入式操作系統RTOS介紹,SylixOS 是一個開源的跨平臺的大型實時操作系統(RTOS),SylixOS誕生于2006年,經過十多年的持續開發,SylixOS 已成為功能最為全面的國產操作系統之一。目前已有眾多產品和項目應用案例,行業涉及航空航天、軍事防務、軌道交通、智能電網、工業自動化等諸多領域。SylixOS 完全符合 POSIX 規范,開源社區豐富的自由軟件移植非常方便。
二、Shell
1. shell介紹
shell可以理解為軟件系統提供給用戶操作的命令行界面,是人機交互的一種方式
可以使用shell和操作系統、uboot等軟件系統交互,但是存在缺陷,例如創建多個文件時,單獨touch a.c需要輸入多次,為了簡便,可以把創建過程寫成一個shell腳本程序,執行這個程序的效果和在命令行輸入效果一樣
shell是一類編程語言,又叫腳本語言。常見shell語言:**sh、bash、**csh、ksh、perl、python等。
腳本語言在嵌入式應用中,主要用來做配置,不會使用過于復雜的腳本語言特性
linux中最常用的腳本是bash
shell腳本的運行機制:解釋運行
C語言編寫過程為:編寫出源代碼,然后編譯鏈接成可執行二進制程序,然后才能運行;而腳本程序不同,腳本程序編寫好后源代碼即可直接運行
shell程序是解釋運行的,shell解析器會逐行的解釋shell程序代碼,然后一行行去運行
2. shell程序初識
shell程序是文本格式的,編輯器是文本編輯器就可以。因為shell要在Linux系統下運行,所以換行符必須為‘\n’,而windows下的換行符為"\r\n",因此windows中的編輯器寫的shell不能在Linux下運行,選擇在Linux下使用vi編輯器進行編寫調試
不需要編譯器
shell程序運行有三種方法
./xx.sh,要求程序必須有可執行權限
source xx.sh,source是一個Linux命令,腳本沒有可執行權限也可以運行
bash xx.sh,bash是一個腳本解釋器,本質上是一個可執行程序,xx.sh相當于傳進去的參數
shell程序的第一行一般為:#!/bin/sh,以#!開頭,后加上一個pathname,意思為指定shell程序被那個解釋器執行。/bin/sh意思為這個腳本將被當前機器中/bin目錄下的sh可執行程序執行
在Ubuntu中默認使用的解釋器sh其實不是bash而是dash
腳本中的注釋使用#,如果要多行注釋,則每行前面都要加#
shell就是把以前命令行中輸入執行的命令寫成了程序,即為了避免反復在命令行下手工輸入而設計的一中記錄下手工輸入步驟,然后通過執行shell腳本程序就能復述手工輸入的過程。
三、內核模式(kernel mode)
通常也被稱為超級模式(supervisor mode),在內核模式下,正在執行的代碼具有對底層硬件的完整且不受限制的訪問。它可以執行任何CPU指令并引用任何內存地址。內核模式通常保留給操作系統的最低級別,最受信任的功能。內核模式下的崩潰是災難性的;他們將停止整個計算機。超級用戶模式是計算機開機時選擇的自動模式。
四、用戶模式(user node)
當操作系統運行用戶應用程序(例如處理文本編輯器)時,系統處于用戶模式。當應用程序請求操作系統的幫助或發生中斷或系統調用時,就會發生從用戶模式到內核模式的轉換。在用戶模式下,模式位設置為1。從用戶模式切換到內核模式時,它從1更改為0。
五、GUI
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。嵌入式GUI即在嵌入式設備上使用顯示屏去顯示操作界面,主要用來與用戶互動。
當前市面上主流的嵌入式 GUI 主要有:emWin(uCGUI),TouchGFX,Embedded Wizard GUI,以及QT。
TouchGFX 是這兩年才發布的嵌入式 GUI,以界面華麗,流暢以及強勁的 TouchGFX Designer著稱。美中不足的是 TouchGFX 是要收費的。
Embeded Wizard GUI 也是這兩年才發布的嵌入式 GUI,同樣以華麗,流暢的界面和強勁的GUIBuilder 著稱。獨創 Chora 界面編程語言,讓大家的界面編程極其簡單,GUIBuilder 上面含有非常多的控件,皮膚和主題供用戶選擇,且支持調試。 美中不足的是 Embeded Wizard GUI 也是要收費的。
emWin 屬于老牌的嵌入式 GUI 了,有著十幾年的歷史,軟件架構和功能比較成熟了。但是做出來比較炫的效果非常麻煩,且不支持較為復雜的控件。
QT是是一個1991年由Qt Company開發的跨平臺C++圖形用戶界面應用程序開發框架。目前使用Linux操作系統的GUI設計大多數是基于QT開發的。
x86
目前的PC架構絕大多數都是Intel的X86架構,貌似也是因為INTEL的這個X86架構早就了目前INTEL如日中天的地位。X86架構(The X86 architecture)是微處理器執行的計算機語言指令集,指一個intel通用計算機系列的標準編號縮寫,也標識一套通用的計算機指令集合。
X86結構比ARM結構的系統在性能方面要快得多、強得多。X86的CPU隨便就是1G以上、雙核、四核大行其道,通常使用45nm(甚至更高級)制程的工藝進行生產;而ARM方面:CPU通常是幾百兆,最近才出現1G左右的CPU,制程通常使用不到65nm制程的工藝,可以說在性能和生產工藝方面ARM根本不是X86結構系統的對手。X86系統由微軟及Intel構建的Wintel聯盟一統天下,壟斷了個人電腦操作系統近30年,形成巨大的用戶群,也深深固化了眾多用戶的使用習慣,同時x86系統在硬件和軟件開發方面已經形成統一的標準,幾乎所有x86硬件平臺都可以直接使用微軟的視窗系統及現在流行的幾乎所有工具軟件,所以x86系統在兼容性方面具有無可比擬的優勢