導航:首頁 > 源碼編譯 > gcc編譯ucos

gcc編譯ucos

發布時間:2022-08-04 04:01:42

Ⅰ ucos原理

ucos-ii是一個可剝奪型內核的實時操作系統,以stm32來說,使用系統滴答定時器,定時產生一個時鍾節拍,來推動任務的調度,管理,切換等。

關於系統大概的運行原理
2.當產生一個時鍾節拍時,如果有比當前運行任務優先順序更高的任務就緒,那麼優先順序(「優先順序」為0時優先順序最高)高的任務搶佔CPU,CPU保存現場環境,放入該任務堆棧中。再將優先順序高的任務的堆棧中的現場環境取出來,寫入CPU寄存器中。(CPU中的寄存器暫時還沒有仔細去研究)。當這個任務執行進入延時,或是要等待某個時間或者信號量。那麼它將放棄CPU的使用權,系統會從任務就緒表中,把優先順序最高的且就緒狀態的任務賦予CPU的使用權。至此來推動整個系統,調度所有的任務。

不發生中斷時UCOS系統時間與任務的切換
①.假設當前運行的任務是低優先順序的任務,CPU程序寄存器中存在的一些寄存器都是低優先順序的任務

②當程序運行到檢測到高優先順序的任務進入就緒狀態的時候,此時CPU發送一些命令,把CPU當前的一些程序寄存器的內容復制到低優先順序任務的堆棧中。也就是1過程。

③.此時通過剛剛的就緒表的機制,可以從程序中得到最高優先順序的任務,也就是2過程=

④.最後的過程3就是把剛剛的高優先順序任務的堆棧指針復制到CPU的程序寄存器當中,實現任務的切換。

當有中斷時,UCOS系統的執行原理
當程序正在執行一個中斷服務函數時,發生一個系統滴答中斷,因為系統滴答定時器的優先順序高,所以會中斷這個中斷服務函數執行任務切換。而有些時候,中斷時不能延時的。例如接收數據時,會發生接收錯誤。造成嚴重的後果。

這時,就有下圖中的操作,可以避免。

PendSV異常(我稱它為中斷)編程為最低的優先順序中斷。如果某個中斷正在執行,而系統滴答搶佔了它,那麼這個中斷將懸起一個PendSV中斷,來緩期執行任務切換。

UCOS的任務切換時間可以在os_cfg.h中去設置OS_TICKS_PER_SEC宏UCOS任務數等配置也可以在該文件中去尋找。

UCOS-II主要提供服務
內存管理
多任務管理
外圍資源管理

關於Make 與編譯
書中有講這一塊,所以我也記錄下我的理解
由於我平時都用keil這樣的集成開發環境,之前也有學習過一段時間的linux,但是對編譯,makefile這些理解的還是不是很好。
編輯makefile 來將源文件和包含的頭文件編譯成需要的.obj文件,然後再將這些.obj文件鏈接成,想要生成的程序。關於makefile好像每一種編譯器都有自己的makefile規則和命令,因為以前學習GCC編譯器和現在書上看到的BCC編譯器寫的makefile好像不太一樣。我也沒有去深究。
所以還是集成開發環境好,工具還是怎麼方便怎麼來。需要學習的原理的時候再去理解,實際的應用中用自己寫的Makefile去編譯文件怕是石樂志哦。

UCOS的任務
任務三要素(我理解的)
任務控制塊
OSTaskCreate((void()(void))start_task,
//任務函數
(void*)0,
//傳遞給任務函數的參數
(OS_STK*)&START_TASK_STK[START_STK_SIZE-1],
//任務堆棧的棧頂
(INT8U)START_TASK_PRIO,
//任務的優先順序

主要包含了任務的棧頂地址,
如果處理器的堆棧是高地址向下生長的那麼棧頂地址

Ⅱ linux的PC機上,用什麼編譯器編譯arm程序比較好,比如像arm7的LPC24xx。

當然用交叉編譯工具了。arm-linux-gcc,本人比較懶,你可以上網搜索,很多的。
編譯uboot推薦3.3.1版本,編譯內核推薦4.4.3版本。是不同的版本,一定記得哈

Ⅲ gcc 編譯生成外部調試語法文件

你用的是linux系統吧? binutil包裡面有個objcpy命令:
obj --only-keep-debug [被提取的文件] [提取出來的調試符號文件,建議加.debug後綴]

另外要把調試信息去掉是用strip命令。你可以man下看看。
strip --strip-debug [需要處理的文件]

把debug信息加回去:
obj --add-gnu-debuglink=[debug文件] [需要添加debug信息的文件]

Ⅳ 如何用GCC在linux下編譯C語言程序

在Linux下面,如果要編譯一個C語言源程序,我們要使用GNU的gcc編譯器,假設我們有下面一個非常簡單的源程序(hello.c):


int main(int argc,char **argv)


{


printf("Hello Linux ");


}


要編譯這個程序,我們只要在命令行下執行:


gcc -o hello hello.c


gcc 編譯器就會為我們生成一個hello的可執行文件.執行./hello就可以看到程
序的輸出結果了

Ⅳ ucos_ii有哪些開發工具

ucos_ii是個比較簡單的實時嵌入式操作系統 在pc機上可以用bc45+tasm,linux上可以用arm-linux-gcc交叉編譯工具,嵌入式板子上可以用ads開發環境、使用jtag或者jlink模擬器。甚至可以用vc6.0或者vs來開發編譯。

Ⅵ gcc ucos中的s文件是什麼

匯編文件,與硬體平台移植相關

Ⅶ centos7怎麼編譯安裝gcc-c++

方法/步驟
1
yum install glibc-static libstdc++-static -y
安裝c和c++的靜態庫(據說如果系統中缺少libc.a和libstdc++.a編譯時會出錯,但是我沒有那麼多閑情逸致去試,實踐過的朋友可以回復一下,分享一下經驗,讓大家都長長見識)

2
下載解壓gcc,我的gcc目錄是gcc-4.8.0
3
進入gcc目錄,執行:
./contrib/download_prerequisites
這個神奇的腳本文件會幫我們下載、配置、安裝那三個依賴的庫。可以節約我們大量的時間和精力。
4
你以為這三個庫自動下載了、自動make install了就沒事了嗎?錯!
很多人在編譯gcc的時候出現各種奇奇怪怪的錯誤就是這步沒有做好。
它們還不在.so文件的搜索路徑裡面,需要加進去,最後切記切記一定要執行一下ldconfig。
大致做法為:
1,找到你的共享庫文件被install到哪個目錄了(updatedb+locate命令)。
2,如果你的庫不是直接放在/lib或/usr/lib下,需要修改/etc/ld.so.conf文件,加入你的共享庫的路徑
3,如果在2中添加了共享庫路徑,切記要執行一下ldconfig,更新響應cache文件讓系統能找到你的共享庫。
5
建立臨時目錄,這個目錄用以存放編譯時的大量臨時文件,是文檔要求中必須的。
我是在gcc-4.8.0下建立了一個名為gcc-build-4.8.0的目錄,進入它。
mkdir gcc-build-4.8.0
cd gcc-build-4.8.0
配置gcc編譯選項
6
強烈建議閱讀INSTALL目錄下的說明文檔,尤其是configure.html,以確定你的編譯選項。
比較基本的選項有--enable-languages,說明你要讓你的gcc支持那些語言,--disable-multilib不生成編譯為其他平台可執行代碼的交叉編譯器。--disable-checking生成的編譯器在編譯過程中不做額外檢查,也可以使用--enable-checking=xxx來增加一些檢查。
網上還說了什麼--with-gmp、--with-mpfr、--with-mpc這三個選項,但是如果你3,4步做好了,就不要配了,反之你還是老實點吧別抱僥幸心理了。
調用gcc-4.8.0目錄下的configure文件:
例如:
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
7
執行
../make #不解釋

執行編譯命令(#在8核的虛擬機上進行編譯,每個核分配2個編譯任務)
make -j16
make install編譯過程CPU 核基本100%佔用,整個編譯用時11分50秒。
檢查gcc版本

#你就等吧少年,建議晚上睡覺前做
當然上面三步一定要在前一步順利結束的情況下進行,如果哪一步出錯了,結果都顯示error了,就不要再做後面的了。在shell的輸出里搜索"error"看具體的出錯點是什麼,、google一下為什麼。
如果你求穩的話,可以在make install之前先make check一下。

Ⅷ Linux中gcc的編譯過程包括哪幾步

看你文件有沒有相關:
沒有》》gcc 你的C文件 直接編譯出默認第一個a.c
有相關》》(假設有a.c,b.c,c.c)
gcc -c a.c
gcc -c b.c
gcc -c c.c
(這樣生成a.o b.o c.o)
gcc -o main a.o b.o c.o
(這樣就生成名為:main的執行檔了)
./main
就可以執行

Ⅸ 如何用GCC在linux下編譯C語言程序

在Linux下面,如果要編譯一個C語言源程序,我們要使用GNU的gcc編譯器,假設我們有下面一個非常簡單的源程序(hello.c):


int main(int argc,char **argv)


{


printf("Hello Linux ");


}


要編譯這個程序,我們只要在命令行下執行:


gcc -o hello hello.c


gcc 編譯器就會為我們生成一個hello的可執行文件.執行./hello就可以看到程
序的輸出結果了

Ⅹ gcc可以編譯c++嗎

GCC編譯器編譯C++程序是使用g++命令編譯的,如果強行使用gcc命令編譯的話,部分程序也能編譯通過,但是使用到了C++獨有的語言特性的程序的話,恐怕使用gcc命令編譯會報錯了,建議還是使用g++命令編譯C++程序。
GCC編譯器有gcc/g++,分別用於編譯C程序和C++程序的。
我們常說的gcc,是指GCC編譯器,而不是特質gcc命令哦!

閱讀全文

與gcc編譯ucos相關的資料

熱點內容
打包發送文件如何加密 瀏覽:213
centos解壓縮zip 瀏覽:387
我的世界怎麼用命令風塊取消指令 瀏覽:1000
安卓軟體請求超時怎麼辦 瀏覽:476
androidapp調用另一個app 瀏覽:621
數控銑床法蘭克子程序編程 瀏覽:173
linux打包命令targz 瀏覽:996
抖音app是哪個 瀏覽:407
蘋果app怎麼上架 瀏覽:255
NA伺服器地址 瀏覽:427
我的世界如何初始化伺服器 瀏覽:97
哪個手機app天氣預報最准 瀏覽:752
怎樣把視頻壓縮至25m 瀏覽:570
vivox27文件夾怎麼改變 瀏覽:727
新手玩狼人殺用什麼app 瀏覽:615
pdf在線查看 瀏覽:954
安卓tv90如何關閉後台 瀏覽:683
php讀取word亂碼 瀏覽:755
minicom源碼 瀏覽:1001
海爾冷櫃壓縮機 瀏覽:417