
目前共有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文件夹可以删掉。 |