uCos-III移植到STM32F10x

简介: 最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm环境:STM32F10x 3.5固件库。

最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm

环境:

  1. STM32F10x 3.5固件库。
  2. MDK4.23 编译器
  3. uCos-III v3.03

         1. uCos-III 源文件KRN-K3XX-000000.zip

                   官网http://micrium.com/page/downloads/source_code  

         我的网盘:http://115.com/file/anr4r6a8#

2.uCos-III 官网 移植程序

         Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO.zip

官网http://micrium.com/download/Micrium-Book-uCOS-III-STM32F107.exe

网盘http://115.com/file/dpuyusej#

一、第一步新建工程(在上一篇文章中有详解)

二、新建文件夹uCOS_III。在此文件下新建四个文件夹uC-CPU,uC-LIB, uCOS-III。

1.uCOS-III下新建三个文件 Source, Ports, Cfg

复制KRN-K3XX-000000\Micrium\Software\uCOS-III\Source下所有文件到Source;

复制KRN-K3XX-000000\Micrium\Software\uCOS-III\Cfg\Template下所有文件到Cfg;

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uCOS-III\Ports\ARM-Cortex-M3\Generic\RealVie下所有文件到 Ports。

 

2. uC-LIB下新建三个文件 Source, Ports, Cfg

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB文本文件到Source

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB\Cfg\Template下 lib_cfg.h 到Cfg

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-LIB\Ports\ARM-Cortex-M3\RealView 下lib_mem_a.asm 到Ports

 

3. uC-CPU下新建三个文件 Source, Ports,Cfg

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-CPU下三个文本文件到Source

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\uC-CPU\ARM-Cortex-M3\GNU下三个文件到 Ports

复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\Atollic\uCOS-III\APP下cpu_cfg.h 到Cfg

 

4.复制Micrium_uCOS-III-STM32F107-Eval-Atollic-TrueSTUDIO\Micrium\Software\EvalBoards\Micrium\uC-Eval-STM32F107\Atollic\uCOS-III\APP下app_cfg.h 到Main中。

 

好了, 到这里工程文件以复制完了。

1.把工程引用文件路径指定 参图:

2.添加工程文件:

 

Main.c, Kernel.c,Kernel.h,Config.c,Config.h代码如下提供。

Main.c
Kernel.c
Kernel.h
Config.c
Config.h

app_cfg.h 追加代码 后如下:

app_cfg.h

 

 

下面对Project\App\uCOS_III\uC-CPU\Ports 下cpu_a.s进行修改, 因为这是GNU的汇编代码。

如下替换:

‘@’ 换为‘;’

.global  换为EXPORT

以下代码

.text

.align 2

.thumb

.syntax unified

换为

 

         PRESERVE8

         AREA        |.text|, CODE, READONLY

                   THUMB

把函数名上的.thumb_func  在前后添加 ‘;’注释掉;

并把函数 名后紧跟的‘:’删除。

修改后如下:

cpu_a.s

修改os_cfg.h

OS_CFG_TS_EN宏定义改为0u

OS_CFG_SCHED_LOCK_TIME_MEAS_EN 宏定义改为0u

OS_CFG_TASK_DEL_EN 宏定义改为 1u

其它可根据自己的功能需要 先1u或ou。

 

 

这里Project\App\uCOS_III\uC-LIB\Source中lib_str.c的Str_FmtNbr_Int32 函数 的函数体内局部变量没有赋初值,不够严谨 这里赋初值如下:

复制代码
    CPU_CHAR     *pstr_fmt = (CPU_CHAR *)0;
    CPU_DATA      i = 0u;
    CPU_INT32U    nbr_fmt = 0u;
    CPU_INT32U    nbr_log = 0u;
    CPU_INT08U    nbr_dig_max = 0u;
    CPU_INT08U    nbr_dig_min = 0u;
    CPU_INT08U    nbr_dig_fmtd = 0u;
    CPU_INT08U    nbr_neg_sign = 0u;
    CPU_INT08U    nbr_lead_char = 0u;
    CPU_INT08U    dig_val = 0u;
    CPU_INT08U    lead_char_delta_0 = 0u;
    CPU_INT08U    lead_char_delta_a = 0u;
    CPU_BOOLEAN   lead_char_dig = 0u;
    CPU_BOOLEAN   lead_char_0 = 0u;
    CPU_BOOLEAN   fmt_invalid = 0u;
    CPU_BOOLEAN   print_char = 0u;
    CPU_BOOLEAN   nbr_neg_fmtd = 0u;
复制代码

 

 

最后修改启动文件startup_stm32f10x_hd.s ,加载不同的启动文件 时不用怕,修改的内容都是一样的:

OS_CPU_PendSVHandler 替换所有的PendSV_Handler

OS_CPU_SysTickHandler替换所有的SysTick_Handler

使中断执行uCos的中断函数。

 

到这里就全部OK了。

 

仿真查看端口变化

 

编程结果过于臃肿:

 

开启3级优化:

再编译看结果:

 

整个工程文件存到我的网盘中http://pan.baidu.com/share/link?shareid=25418&uk=118334538

希望以上资料对大家有所帮助。

目录
相关文章
|
Web App开发 移动开发 测试技术
uCosII移植STM32F103教程
本文介绍如何快速移植uCosII源码到STM32F103工程,使用标准库进行快速开发
1924 0
uCosII移植STM32F103教程
|
8月前
|
网络协议
了解AT指令以及STM32F103如何通过ESP8266连接到WiFi
AT指令是一组用于控制调制解调器的命令,最早由Hayes公司为其智能调制解调器开发。如今,AT指令已被广泛应用于各种通信模块中,包括GSM、Bluetooth和WiFi模块。AT指令通常以“AT”开头,后跟特定的命令和参数。通过这些指令,我们可以执行一系列操作,如设置网络参数、发送数据和查询状态等。
341 0
|
5月前
|
Java 编译器 数据安全/隐私保护
Java 重写(Override)与重载(Overload)详解
在 Java 中,重写(Override)和重载(Overload)是两个容易混淆但功能和实现方式明显不同的重要概念。重写是在子类中重新定义父类已有的方法,实现多态;重载是在同一类中定义多个同名但参数不同的方法,提供多种调用方式。重写要求方法签名相同且返回类型一致或为父类子类关系,而重载则关注方法参数的差异。理解两者的区别有助于更好地设计类和方法。
557 1
|
Cloud Native 微服务
《微服务治理技术白皮书》电子版和音频版地址
《微服务治理技术白皮书》由阿里云云原生微服务团队编著,筹备近半年多的,长达 379 页。
32170 4
《微服务治理技术白皮书》电子版和音频版地址
|
存储 Kubernetes 前端开发
基于Kubernetes的实战案例分享
基于Kubernetes的实战案例分享
|
Shell 开发工具
基于neovim和plantuml搭建写代码并实时预览的绘图环境
## 传统画流程图的痛点 我们经常需要画流程图来表示代码逻辑或者基本框架等。但我们在绘画流程图的时候,经常会在对齐连接线这些和流程图表达的意义无关的环节上浪费大量时间。 而流程图这一表达方式本身天然适合代码描述,因此有人设计了plantuml这种软件语言来专门处理流程图逻辑,把图片渲染的工作交给graphviz来做。 本文旨在基于neovim和浏览器(一般是chro
985 0
|
9月前
|
Docker 容器
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
222 1
Element-ui中 表单(Form)校验的几种形式 及 表单嵌套表格含上传(Upload)组件的综合案例
Element-ui中 表单(Form)校验的几种形式 及 表单嵌套表格含上传(Upload)组件的综合案例
1063 0
|
5月前
|
存储 人工智能 运维
阿里云自研存储部件创新亮相2024全球闪存峰会
阿里云在AI时代背景下对自研存储部件进行的一系列创新实践并取得丰硕成果。
阿里云自研存储部件创新亮相2024全球闪存峰会
|
Linux 开发工具 数据安全/隐私保护
CentOS7开机提示welcome to emergency mode!after logging in...
CentOS7.3昨天用的还好好的的,但是今天开机提示如下(如图提示): welcome to emergency mode!after logging in ,type “journalctl -xb” to view system logs,“systemctl reboot” to reboot ,“systemctl default” to try again to boot into default mode。
4915 0

热门文章

最新文章