新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 在pcDuino上學習μC/OS II

        在pcDuino上學習μC/OS II

        作者: 時間:2016-09-12 來源:網絡 收藏

        前言

        本文引用地址:http://www.104case.com/article/201609/303410.htm

        uC/OS II(Micro Control Operation System Two)是一個可以基于ROM運行的、可裁減的、搶占式、實時多任務內核,具有高度可移植性,特別適合于微處理器和控制器,是和很多商業操作系統性能相當的實時操作系統(RTOS)。為了提供最好的移植性能,uC/OS II最大程度上使用ANSI C語言進行開發,并且已經移植到近40多種處理器體系上,涵蓋了從8位到64位各種CPU(包括DSP)。 uC/OS II可以簡單的視為一個多任務調度器,在這個任務調度器之上完善并添加了和多任務操作系統相關的系統服務,如信號量、郵箱等。其主要特點有公開源代碼,代碼結構清晰、明了,注釋詳盡,組織有條理,可移植性好,可裁剪,可固化。內核屬于搶占式,最多可以管理60個任務。從1992年開始,由于高度可靠性、移植性和安全性,uC/OS II已經廣泛使用在從照相機到航空電子產品的各種應用中。

        想學習操作系統的同學的可以好好分析這個系統的代碼

        ucos下載編譯

        $sudo apt-get install git git-core

        $git clone https://github.com/Pillar1989/ucos-ii-for-

        $cd arduino

        $make

        $cd ..

        $make

        ucos-ii測試

        編寫測試程序:

        1 /*

        2 *************************************************************************************************** ******

        3 * sample.c

        4 *

        5 * Description: This sample program uses the ucos linux port to start 5 simple tasks.

        6 *

        7 * Author: Philip Mitchell

        8 *

        9 *************************************************************************************************** ******

        10 */

        11

        12 #include

        13 #include

        14 #include “ucos_ii.h”

        15 #include

        16 #include

        17

        18 int led_pin = 1;

        19 int btn_pin = 5;

        20

        21 void hardware_init()

        22 {

        23 pinMode(led_pin, OUTPUT);

        24 }

        25 /* Function common to all tasks */

        26

        27 void MyTask( void *p_arg )

        28 {

        29

        30 char* sTaskName = (char*)p_arg;

        31 static flag1 = 1;

        32 #if OS_CRITICAL_METHOD == 3

        33 OS_CPU_SR cpu_sr = 0;

        34 #endif

        35

        36 while(1)

        37 {

        38 /* printf uses mutex to get terminal access, therefore must enter critical section */

        39 OS_ENTER_CRITICAL();

        40 printf( “Name: %sn”, sTaskName );

        41 if(!strcmp(sTaskName,”Task 1″))

        42 {

        43 if(flag1 == 1)

        44 {

        45 flag1 = 0;

        46 printf(“HIGHn”);

        47 digitalWrite(led_pin, HIGH);

        48 }

        49 else

        50 {

        51 flag1 = 1;

        52 printf(“LOWn”);

        53 digitalWrite(led_pin, LOW);

        54 }

        55 }

        56 OS_EXIT_CRITICAL();

        57

        58 /* Delay so other tasks may execute. */

        59 OSTimeDly(50);

        60 }/* while */

        61

        62 }

        63

        64

        65 int main (void)

        66 {

        67 /* pthreads allocates its own memory for task stacks. This UCOS linux port needs a minimum stack size

        68 in order to pass the function information within the port. */

        69 hardware_init();

        70 INT8U Stk1[ OSMinStkSize() ];

        71 INT8U Stk2[ OSMinStkSize() ];

        72 INT8U Stk3[ OSMinStkSize() ];

        73 INT8U Stk4[ OSMinStkSize() ];

        74 INT8U Stk5[ OSMinStkSize() ];

        75

        76 char sTask1[] = “Task 1″;

        77 char sTask2[] = “Task 2″;

        78 char sTask3[] = “Task 3″;

        79 char sTask4[] = “Task 4″;

        80 // char sTask5[] = “Task 5″;

        81

        82 OSInit();

        83

        84 OSTaskCreate( MyTask, sTask1, (void*)Stk1, 4 );

        85 // OSTaskCreate( MyTask, sTask2, (void*)Stk2, 5 );

        86 // OSTaskCreate( MyTask, sTask3, (void*)Stk3, 6 );

        87 // OSTaskCreate( MyTask, sTask4, (void*)Stk4, 7 );

        88 // OSTaskCreate( MyTask, sTask5, (void*)Stk5, 8 );

        89

        90 OSStart();

        91

        92 return 0;

        93 }

        94

        連接一個led燈到1腳,執行剛剛編譯出來的程序

        ubuntu@ubuntu:~/ucos-ii-for-$ ./ucos_sample

        1Name: Task 1

        HIGH

        Name: Task 1

        LOW

        Name: Task 1

        HIGH

        Name: Task 1

        LOW

        Name: Task 1

        板子上接到1 pin的led會不斷的閃爍



        關鍵詞: pcDuino μC/OS II

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 峨眉山市| 阿瓦提县| 托克逊县| 苍南县| 普格县| 正蓝旗| 铜川市| 左云县| 民县| 勐海县| 车险| 肥乡县| 三门县| 巴林左旗| 开鲁县| 浮山县| 蛟河市| 恭城| 秦安县| 汝城县| 郑州市| 松阳县| 突泉县| 沾益县| 上犹县| 凉城县| 揭东县| 盘锦市| 尼木县| 逊克县| 资阳市| 双城市| 琼海市| 清水河县| 成武县| 永胜县| 福海县| 崇礼县| 莆田市| 中方县| 咸丰县|