目前共有8篇帖子。
【截圖】成功的uCOS-II移植
1樓 巨大八爪鱼 2017-3-17 18:22
2樓 巨大八爪鱼 2017-3-17 18:23
【main.c】
#include <stdio.h>
#include <stm32f10x.h>
#include "ucos_ii.h"

static OS_STK main_stack[128];

INT32U OS_CPU_SysTickClkFreq(void)
{
    return SystemCoreClock;
}

// 主任務函數
void MainTask(void *arg)
{
    OS_CPU_SysTickInit();
   
    // 初始化PA口和串口
    RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN;
    GPIOA->CRH = 0x4b3;
    USART1->BRR = 0x271;
    USART1->CR1 = USART_CR1_UE | USART_CR1_TE;
    printf("啟動成功\r\n");
   
    while (1)
    {
        GPIOA->ODR ^= GPIO_ODR_ODR8; // 切換PA8上LED燈的狀態, 表明任務正在運行
        OSTimeDlyHMSM(0, 0, 1, 0); // 延時1秒
    }
}

// 必須在項目屬性里勾選Use MicroLIB
// 才能使用printf函數
int fputc(int ch, FILE *fp)
{
    if (fp == &__stdout)
    {
        USART1->DR = ch;
        while ((USART1->SR & USART_SR_TXE) == 0);
    }
    return ch;
}

int main(void)
{
    uint8_t os_err;
    OSInit();
    os_err = OSTaskCreate(MainTask, 0, &main_stack[127], 3);
    OSTaskNameSet(3, (uint8_t *)"Start Task", &os_err);
    OSStart();
    return 0;
}
3樓 巨大八爪鱼 2017-3-17 18:25
項目屬性中C/C++中的Include Paths:
.\Library\uCOS-II\Source;.\Library\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView
4樓 巨大八爪鱼 2017-3-17 18:27
【項目根目錄/Library文件夾】
└─uCOS-II
    ├─Ports
    │  └─ARM-Cortex-M3
    │      └─Generic
    │          ├─IAR
    │          │      os_cpu.h
    │          │      os_cpu_a.asm
    │          │      os_cpu_c.c
    │          │      os_dbg.c
    │          │     
    │          └─RealView
    │                  os_cpu.h
    │                  os_cpu_a.asm
    │                  os_cpu_c.c
    │                  os_dbg.c
    │                 
    └─Source
            os_cfg.h
            os_core.c
            os_flag.c
            os_mbox.c
            os_mem.c
            os_mutex.c
            os_q.c
            os_sem.c
            os_task.c
            os_time.c
            os_tmr.c
            ucos_ii.h
            ucos_ii.h~RF1a298ae.TMP
5樓 巨大八爪鱼 2017-3-17 18:28
ucos_ii.h~RF1a298ae.TMP文件可以不管它,把Keil關閉後這個文件就可以刪除了。
6樓 巨大八爪鱼 2017-3-17 18:29
os_cpu_a.asm、os_cpu_c.c和os_dbg.c這三個文件是RealView文件夾裡面的。
沒有使用IAR文件夾裡面的文件,因為Keil的編譯器無法識別_root這個指令。
7樓 巨大八爪鱼 2017-3-17 18:32
【uCOS-II源文件包的官方下載地址】
https://www.micrium.com/downloadcenter/download-results/?searchterm=mi-stm32f103rb&supported=true
文件名:Micrium_STM32xxx_uCOS-IIl.exe
用WinRAR打開這個exe文件並解壓出來即可。
8樓 巨大八爪鱼 2017-3-17 18:47
【主要步驟】
新建工程時一定要在最開始彈出的Manage Run-Time Environment對話框里勾選Device/Startup和CMSIS/CORE,這樣才會自動出現啟動文件。
把啟動文件裡面的SysTick_Handler全部替換為OS_CPU_SysTickHandler,以及PendSV_Handler替換為OS_CPU_PendSVHandler,不能簡單地只建立兩個跳轉函數就了事,否則程序會卡死(參考https://zh.arslanbar.net/post.php?t=24567

找到壓縮文件中的Micrium/Software/uCOS-II文件夾,解壓Ports和Source文件夾到「項目根目錄/Library/uCOS-II」中,同時把Micrium\Software\EvalBoards\ST\STM3210B-EVAL\RVMDK\OS-Probe文件夾裡面的os_cfg.h文件解壓到「項目根目錄/Library/uCOS-II/Source」文件夾中。
注意:includes.h、app.c和app_cfg.h不需要解壓出來。

打開os_cfg.h文件,把OS_APP_HOOKS_EN後面的1改為0。
然後打開ucos_ii.h文件,刪掉#include <app_cfg.h>。

不用的Library\uCOS-II\Ports\ARM-Cortex-M3\Generic\IAR文件夾可以刪掉。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
 
 
©2010-2024 Arslanbar [手機版] [桌面版]
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。