
目前共有8篇帖子。
![]() |
![]() |
![]() |
【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; } |
![]() |
項目屬性中C/C++中的Include Paths:
.\Library\uCOS-II\Source;.\Library\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealView |
![]() |
【項目根目錄/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 |
![]() |
ucos_ii.h~RF1a298ae.TMP文件可以不管它,把Keil關閉後這個文件就可以刪除了。
|
![]() |
os_cpu_a.asm、os_cpu_c.c和os_dbg.c這三個文件是RealView文件夾裡面的。
沒有使用IAR文件夾裡面的文件,因為Keil的編譯器無法識別_root這個指令。 |
![]() |
【uCOS-II源文件包的官方下載地址】
https://www.micrium.com/downloadcenter/download-results/?searchterm=mi-stm32f103rb&supported=true 文件名:Micrium_STM32xxx_uCOS-IIl.exe 用WinRAR打開這個exe文件並解壓出來即可。 ![]() |
![]() |
【主要步驟】
新建工程時一定要在最開始彈出的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文件夾可以刪掉。 |