㈠ 網上沒找到ucos 的2.52源碼。
是沒有,我也找了,就用2.84的,這個和2.52的差不多一樣,用的很多
㈡ ucosii源代碼是用什麼語言寫的
是否μC/OS-II,是就看下面的內容,如果不是你想要的答案,本人也無能為力
外行人粗略理解:從這篇文章可以看出μC/OS-II內核和應用程序放在一起編譯成一個文件這種做法是特有的,應該也不能分開。
單片機軟體操作系統的利弊,UCOSII在單片機上的使用
來源:今日電子
摘要:近年來,在單片機系統中嵌入操作系統已經成為人們越來越關心的一個話題。本文通過對一種源碼公開的嵌入式實時操作系統μC/OS-II的分析,以51系列單片機為例,闡述了在單片機中使用該嵌入式操作系統的優缺點,以及在應用中應當注意的一些問題。
關鍵詞:實時操作系統;μC/OS-II;單片機
引言
早在20世紀60年代,就已經有人開始研究和開發嵌入式操作系統。但直到最近,它才在國內被越來越多的提及,在通信、電子、自動化等需要實時處理的領域所日益顯現的重要性吸引了人們越來越多的注意力。但是,人們所談論的往往是一些著名的商業內核,諸如VxWorks、PSOS等。這些商業內核性能優越,但價格昂貴,主要用於16位和32位處理器中,針對國內大部分用戶使用的51系列8位單片機,可以選擇免費的μC/OS-II。
μC/OS-II的特點
1.μC/OS-II是由Labrosse先生編寫的一個開放式內核,最主要的特點就是源碼公開。這一點對於用戶來說可謂利弊各半,好處在於,一方面它是免費的,另一方面用戶可以根據自己的需要對它進行修改。缺點在於它缺乏必要的支持,沒有功能強大的軟體包,用戶通常需要自己編寫驅動程序,特別是如果用戶使用的是不太常用的單片機,還必須自己編寫移植程序。
2.μC/OS-II是一個佔先式的內核,即已經准備就緒的高優先順序任務可以剝奪正在運行的低優先順序任務的CPU使用權。這個特點使得它的實時性比非佔先式的內核要好。通常我們都是在中斷服務程序中使高優先順序任務進入就緒態(例如發信號),這樣退出中斷服務程序後,將進行任務切換,高優先順序任務將被執行。拿51單片機為例,比較一下就可以發現這樣做的好處。假如需要用中斷方式採集一批數據並進行處理,在傳統的編程方法中不能在中斷服務程序中進行復雜的數據處理,因為這會使得關中斷時間過長。所以經常採用的方法是置一標志位,然後退出中斷。由於主程序是循環執行的,所以它總有機會檢測到這一標志並轉到數據處理程序中去。但是因為無法確定發生中斷時程序到底執行到了什麼地方,也就無法判斷要經過多長時間數據處理程序才會執行,中斷響應時間無法確定,系統的實時性不強。如果使用μC/OS-II的話,只要把數據處理程序的優先順序設定得高一些,並在中斷服務程序中使它進入就緒態,中斷結束後數據處理程序就會被立即執行。這樣可以把中斷響應時間限制在一定的范圍內。對於一些對中斷響應時間有嚴格要求的系統,這是必不可少的。但應該指出的是如果數據處理程序簡單,這樣做就未必合適。因為μC/OS-II要求在中斷服務程序末尾使用OSINTEXIT函數以判斷是否進行任務切換,這需要花費一定的時間。
3.μC/OS-II和大家所熟知的Linux等分時操作系統不同,它不支持時間片輪轉法。μC/OS-II是一個基於優先順序的實時操作系統,每個任務的優先順序必須不同,分析它的源碼會發現,μC/OS-II把任務的優先順序當做任務的標識來使用,如果優先順序相同,任務將無法區分。進入就緒態的優先順序最高的任務首先得到CPU的使用權,只有等它交出CPU的使用權後,其他任務才可以被執行。所以它只能說是多任務,不能說是多進程,至少不是我們所熟悉的那種多進程。顯而易見,如果只考慮實時性,它當然比分時系統好,它可以保證重要任務總是優先佔有CPU。但是在系統中,重要任務畢竟是有限的,這就使得劃分其他任務的優先權變成了一個讓人費神的問題。另外,有些任務交替執行反而對用戶更有利。例如,用單片機控制兩小塊顯示屏時,無論是編程者還是使用者肯定希望它們同時工作,而不是顯示完一塊顯示屏的信息以後再顯示另一塊顯示屏的信息。這時候,要是μC/OS-II即支持優先順序法又支持時間片輪轉法就更合適了。
4.μC/OS-II對共享資源提供了保護機制。正如上文所提到的,μC/OS-II是一個支持多任務的操作系統。一個完整的程序可以劃分成幾個任務,不同的任務執行不同的功能。這樣,一個任務就相當於模塊化設計中的一個子模塊。在任務中添加代碼時,只要不是共享資源就不必擔心互相之間有影響。而對於共享資源(比如串口),μC/OS-II也提供了很好的解決辦法。一般情況下使用的是信號量的方法。簡單地說,先創建一個信號量並對它進行初始化。當一個任務需要使用一個共享資源時,它必須先申請得到這個信號量,而一旦得到了此信號量,那就只有等使用完了該資源,信號量才會被釋放。在這個過程中即使有優先權更高的任務進入了就緒態,因為無法得到此信號量,也不能使用該資源。這個特點的好處顯而易見,例如當顯示屏正在顯示信息的時候,外部產生了一個中斷,而在中斷服務程序中需要顯示屏顯示其他信息。這樣,退出中斷服務程序後,原有的信息就可能被破壞了。而在μC/OS-II中採用信號量的方法時,只有顯示屏把原有信息顯示完畢後才可以顯示新信息,從而可以避免這個現象。不過,採用這種方法是以犧牲系統的實時性為代價的。如果顯示原有信息需要耗費大量時間,系統只好等待。從結果上看,等於延長了中斷響應時間,這對於未顯示信息是報警信息的情況,無疑是致命的。發生這種情況,在μC/OS-II中稱為優先順序反轉,就是高優先順序任務必須等待低優先順序任務的完成。在上述情況下,在兩個任務之間發生優先順序反轉是無法避免的。所以在使用μC/OS-II時,必須對所開發的系統了解清楚,才能決定對於某種共享資源是否使用信號量。
μC/OS-II在單片機使用中的一些特點
1.在單片機系統中嵌入μC/OS-II將增強系統的可靠性,並使得調試程序變得簡單。以往傳統的單片機開發工作中經常遇到程序跑飛或是陷入死循環。可以用看門狗解決程序跑飛問題,而對於後一種情況,尤其是其中牽扯到復雜數學計算的話,只有設置斷點,耗費大量時間來慢慢分析。如果在系統中嵌入μC/OS-II的話,事情就簡單多了。可以把整個程序分成許多任務,每個任務相對獨立,然後在每個任務中設置超時函數,時間用完以後,任務必須交出CPU的使用權。即使一個任務發生問題,也不會影響其他任務的運行。這樣既提高了系統的可靠性,同時也使得調試程序變得容易。
2.在單片機系統中嵌入μC/OS-II將增加系統的開銷。現在所使用的51單片機,一般是指87C51或者89C51,其片內都帶有一定的RAM和ROM。對於一些簡單的程序,如果採用傳統的編程方法,已經不需要外擴存儲器了。如果在其中嵌入μC/OS-II的話,在只需要使用任務調度、任務切換、信號量處理、延時或超時服務的情況下,也不需要外擴ROM了,但是外擴RAM是必須的。由於μC/OS-II是可裁減的操作系統,其所需要的RAM大小就取決於操作系統功能的多少。舉例來說,μC/OS-II允許用戶定義最大任務數。由於每建立一個任務,都要產生一個與之相對應的數據結構TCB,該數據結構要佔用很大一部分內存空間。所以在定義最大任務數時,一定要考慮實際情況的需要。如果定得過大,勢必會造成不必要的浪費。嵌入μC/OS-II以後,總的RAM需求可以由如下表達式得出:
RAM總需求=應用程序的RAM需求+內核數據區的RAM需求+(任務棧需求+最大中斷嵌套棧需求)·任務數
所幸的是,μC/OS-II可以對每個任務分別定義堆棧空間的大小,開發人員可根據任務的實際需求來進行棧空間的分配。但在RAM容量有限的情況下,還是應該注意一下對大型數組、數據結構和函數的使用,別忘了,函數的形參也是要推入堆棧的。
3.μC/OS-II的移植也是一件需要值得注意的工作。如果沒有現成的移植實例的話,就必須自己來編寫移植代碼。雖然只需要改動兩個文件,但仍需要對相應的微處理器比較熟悉才行,最好參照已有的移植實例。另外,即使有移植實例,在編程前最好也要閱讀一下,因為裡面牽扯到堆棧操作。在編寫中斷服務程序時,把寄存器推入堆棧的順序必須與移植代碼中的順序相對應。
4.和其他一些著名的嵌入式操作系統不同,μC/OS-II在單片機系統中的啟動過程比較簡單,不像有些操作系統那樣,需要把內核編譯成一個映像文件寫入ROM中,上電復位後,再從ROM中把文件載入到RAM中去,然後再運行應用程序。μC/OS-II的內核是和應用程序放在一起編譯成一個文件的,使用者只需要把這個文件轉換成HEX格式,寫入ROM中就可以了,上電後,會像普通的單片機程序一樣運行。
結語
由以上介紹可以看出,μC/OS-II具有免費、使用簡單、可靠性高、實時性好等優點,但也有移植困難、缺乏必要的技術支持等缺點,尤其不像商用嵌入式系統那樣得到廣泛使用和持續的研究更新。但開放性又使得開發人員可以自行裁減和添加所需的功能,在許多應用領域發揮著獨特的作用。當然,是否在單片機系統中嵌入μC/OS-II應視所開發的項目而定,對於一些簡單的、低成本的項目來說,就沒必要使用嵌入式操作系統了。
㈢ 學操作系統讀ucos源碼,需要看移植部分嗎
不管怎麼說,如果要深入了解操作系統原理的話,移植肯定是需要的!因為移植部分會涉及到最最底層的匯編程序,可以說那是uCOS的調度核心。建議樓主如果時間多並想深入進行了解的話還是學習一下,另外可以自己在官網上下載基於x86的uCOS Demo程序那是用VC寫的自己在電腦上跑跑,會印象更深刻,自己動手後才會學得更多更直觀!
這是我以前學uCOS的經驗,希望採納!
㈣ 不同單片機用到的需要移植的UCOSIII源碼是不一樣的嗎
C語言有個很大的好處就是可移植性好。
各種不同的單片機應用平台,只是一些寄存器,外設等不同,但主體程序不會相差太大,只需要修改一些頭文件或者一些寄存器等等。
㈤ 《嵌入式實時操作系統uCOS-II》邵貝貝(第二版) 這本書的源碼
配套光碟里有。
㈥ 學習ucos-ii 需不需要把源碼都看的很明白
調度那塊 要看明白
㈦ Keil u4 編譯uCOSIII移植有錯誤 Error: L6218E: Undefined symbol Mem_Copy (referred from lib_mem.o)
在lib_cfg.h文件里有這樣的宏定義#define LIB_MEM_CFG_OPTIMIZE_ASM_EN DEF_ENABLED
而mem_的定義事這樣的
//#if (LIB_MEM_CFG_OPTIMIZE_ASM_EN != DEF_ENABLED)
void Mem_Copy ( void *pdest,
const void *psrc,
CPU_SIZE_T size)
也就是說LIB_MEM_CFG_OPTIMIZE_ASM_EN 定義為DEF_DISABLED就可以了。
㈧ 怎麼在ucos官網下載源碼
是呀,需要郵件注冊的。
http://micrium.com/page/downloads/source_code
點擊download會進入注冊界面的
http://micrium.com/user/login
㈨ ucos-ii源碼怎麼官方下載
注冊就可以了~
不想注冊的話,網上也有很多工程、例子下載,不一定要從官網下。
㈩ ucosiii源碼中有多個os-app-cfg
/*
************************************************************************************************************************
* uC/OS-III
* The Real-Time Kernel
*
* (c) Copyright 2009-2011; Micrium, Inc.; Weston, FL
* All rights reserved. Protected by international right laws.
*
* CONFIGURATION FILE
*
* File : OS_CFG.H
* By : JJL 注釋:~風中的葉~
* Version : V3.02.00
*
* LICENSING TERMS:
* ---------------
* uC/OS-III is provided in source form for FREE short-term evaluation, for ecational use or
* for peaceful research. If you plan or intend to use uC/OS-III in a commercial application/
* proct then, you need to contact Micrium to properly license uC/OS-III for its use in your
* application/proct. We provide ALL the source code for your convenience and to help you
* experience uC/OS-III. The fact that the source is provided does NOT mean that you can use
* it commercially without paying a licensing fee.
*
* Knowledge of the source code may NOT be used to develop a similar proct.
*
* Please help us continue to provide the embedded community with the finest software available.
* Your honesty is greatly appreciated.
*
* You can contact us at www.micrium.com, or by phone at +1 (954) 217-2036.
************************************************************************************************************************
*/
#ifndef OS_CFG_H
#define OS_CFG_H
/* ---------------------------- MISCELLANEOUS -------------------------- */
#define OS_CFG_APP_HOOKS_EN 1u /* Enable (1) or Disable (0) application specific hooks;HOOK功能的使能 */
#define OS_CFG_ARG_CHK_EN 1u /* Enable (1) or Disable (0) argument checking;參數檢測使能(調試的時候允許)*/
#define OS_CFG_CALLED_FROM_ISR_CHK_EN 1u /* Enable (1) or Disable (0) check for called from ISR;是否允許在ISR中調用系統函數(除了POST)*/
#define OS_CFG_DBG_EN 1u /* Enable (1) debug code/variables ;debug功能允許使能(可以知道OS_TCB的大小等,調試的時候使能)*/
#define OS_CFG_ISR_POST_DEFERRED_EN 1u /* Enable (1) or Disable (0) Deferred ISR posts;使能則有短的中斷延時,但是有長的ISR—to—task響應*/
#define OS_CFG_OBJ_TYPE_CHK_EN 1u /* Enable (1) or Disable (0) object type checking;對象類型檢測(調試的時候允許)*/
#define OS_CFG_TS_EN 1u /* Enable (1) or Disable (0) time stamping;時間戳使能 */
#define OS_CFG_PEND_MULTI_EN 1u /* Enable (1) or Disable (0) code generation for multi-pend feature是否支持事件的多路等待功能*/
#define OS_CFG_PRIO_MAX 64u /* Defines the maximum number of task priorities (see OS_PRIO data type)任務優先順序的最大數*/
#define OS_CFG_SCHED_LOCK_TIME_MEAS_EN 1u /* Include code to measure scheler lock time包含測量調度鎖定時間的代碼 */
#define OS_CFG_SCHED_ROUND_ROBIN_EN 1u /* Include code for Round-Robin scheling 包含輪轉調度的代碼 */
#define OS_CFG_STK_SIZE_MIN 64u /* Minimum allowable task stack size 最小允許的任務堆棧的大小 */
/* ----------------------------- EVENT FLAGS --------------------------- */
#define OS_CFG_FLAG_EN 1u /* Enable (1) or Disable (0) code generation for EVENT FLAGS使能事件標志的代碼*/
#define OS_CFG_FLAG_DEL_EN 1u /* Include code for OSFlagDel()使能標志刪除功能 */
#define OS_CFG_FLAG_MODE_CLR_EN 1u /* Include code for Wait on Clear EVENT FLAGS使能等待清除事件標志功能*/
#define OS_CFG_FLAG_PEND_ABORT_EN 1u /* Include code for OSFlagPendAbort()標志事件的等待終止功能 */
/* -------------------------- MEMORY MANAGEMENT ------------------------ */
#define OS_CFG_MEM_EN 1u /* Enable (1) or Disable (0) code generation for MEMORY MANAGER是否允許內存管理的功能*/
/* --------------------- MUTUAL EXCLUSION SEMAPHORES ------------------- */
#define OS_CFG_MUTEX_EN 1u /* Enable (1) or Disable (0) code generation for MUTEX互斥性信號量功能使能*/
#define OS_CFG_MUTEX_DEL_EN 1u /* Include code for OSMutexDel()互斥性信號量刪除功能使能 */
#define OS_CFG_MUTEX_PEND_ABORT_EN 1u /* Include code for OSMutexPendAbort()互斥性信號量等待終止功能使能 */
/* --------------------------- MESSAGE QUEUES -------------------------- */
#define OS_CFG_Q_EN 1u /* Enable (1) or Disable (0) code generation for QUEUES消息隊列功能使能 */
#define OS_CFG_Q_DEL_EN 1u /* Include code for OSQDel() 消息隊列刪除功能使能 */
#define OS_CFG_Q_FLUSH_EN 1u /* Include code for OSQFlush()消息隊列刷新功能使能 */
#define OS_CFG_Q_PEND_ABORT_EN 1u /* Include code for OSQPendAbort()消息隊列等待終止功能使能 */
/* ----------------------------- SEMAPHORES ---------------------------- */
#define OS_CFG_SEM_EN 1u /* Enable (1) or Disable (0) code generation for SEMAPHORES信號量功能使能*/
#define OS_CFG_SEM_DEL_EN 1u /* Include code for OSSemDel()信號量刪除功能使能 */
#define OS_CFG_SEM_PEND_ABORT_EN 1u /* Include code for OSSemPendAbort()信號量等待終止功能使能 */
#define OS_CFG_SEM_SET_EN 1u /* Include code for OSSemSet()信號量置位功能使能 */
/* -------------------------- TASK MANAGEMENT -------------------------- */
#define OS_CFG_STAT_TASK_EN 1u /* Enable (1) or Disable(0) the statistics task統計功能使能 */
#define OS_CFG_STAT_TASK_STK_CHK_EN 1u /* Check task stacks from statistic task統計任務堆棧檢測功能使能 */
#define OS_CFG_TASK_CHANGE_PRIO_EN 1u /* Include code for OSTaskChangePrio()改變任務優先順序功能使能 */
#define OS_CFG_TASK_DEL_EN 1u /* Include code for OSTaskDel() 任務刪除功能使能 */
#define OS_CFG_TASK_Q_EN 1u /* Include code for OSTaskQXXXX()任務消息隊列功能使能 */
#define OS_CFG_TASK_Q_PEND_ABORT_EN 1u /* Include code for OSTaskQPendAbort()任務消息隊列等待取消功能使能 */
#define OS_CFG_TASK_PROFILE_EN 1u /* Include variables in OS_TCB for profiling使能任務的詳細情況功能,包括任務的切換次數,執行時間,相對於其他任務的CPU利用率*/
#define OS_CFG_TASK_REG_TBL_SIZE 1u /* Number of task specific registers任務特殊功能寄存器 */
#define OS_CFG_TASK_SEM_PEND_ABORT_EN 1u /* Include code for OSTaskSemPendAbort()任務信號量等待取消功能使能 */
#define OS_CFG_TASK_SUSPEND_EN 1u /* Include code for OSTaskSuspend() and OSTaskResume()任務暫時中止和恢復功能使能*/
/* -------------------------- TIME MANAGEMENT -------------------------- */
#define OS_CFG_TIME_DLY_HMSM_EN 1u /* Include code for OSTimeDlyHMSM()時間延時函數使能 */
#define OS_CFG_TIME_DLY_RESUME_EN 1u /* Include code for OSTimeDlyResume()時間延時取消功能使能 */
/* ------------------------- TIMER MANAGEMENT -------------------------- */
#define OS_CFG_TMR_EN 1u /* Enable (1) or Disable (0) code generation for TIMERS定時器功能使能 */
#define OS_CFG_TMR_DEL_EN 1u /* Enable (1) or Disable (0) code generation for OSTmrDel()定時器刪除功能使能*/
#endif