作者共發了8篇帖子。 內容轉換:不轉換▼
 
點擊 回復
647 7
【截图】成功的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文件夹可以删掉。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:647 回複數:7
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2017-3-17 18:47
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。