uCos-III移植到STM32F10x
最近在百度上看了uCOS-III 的介绍后,诸多功能有很大的提升和改进,感觉有必要升级一下开发环境。百度介绍:http://baike.baidu.com/view/8531313.htm
环境:
- STM32F10x 3.5固件库。
- MDK4.23 编译器
- 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
希望以上资料对大家有所帮助。
uCos-III移植到STM32F10x的更多相关文章
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- uC/OS - III 移植 IAR平台
关于移植uC/OS-III 网上已经有很多教程了此处只是做个记录 首先下载源码然后解压得到下面的文件: 然后在模版工程里新建各种文件夹: 最后全部都添加进工程: OK了,编译一下,惊呆了,竟然 0错误 ...
- LWIP带UCOS操作系统移植
LWIP支持RAW.NETCONN.SOCKET这三种编程接口,后两者必须有操作系统来支持的:LWIP带操作系统的移植很重要!!
- 从FPGA搞定OV7670 VGA显示 移植到 STM32F10x TFT显示 总结及疑问(高手请进)
OV7670不愧是最便宜的摄像头了最大显示像素:640*480(在VGA显示器上显示效果还不赖,用usb模块采集显示依然显著) 第一步:VGA显示 视频图像(实时)FPGA+SDRAM+OV7670= ...
- ucos III中任务之间的数据通信和任务划分
1. 如果将关系密切(比如两个任务之间需要经常收发数据)的若干功能分别用不同的任务来实现,则需要进行大量的任务之间数据通信和同步通信,这系统来说是一个很大的负担.因此应该将关系密切的若干功能组合成一个 ...
- UCOS III的时间片轮转调度的一个问题
1. 如果当前一个任务A在时间片未到来之前,主动放弃剩下的时间片,进入下一个任务B,那么下一个任务的的执行时间是多久? 书上说,是重置时间片,也就是说任务B也运行一个完整的时间片.
- ucos实时操作系统学习笔记——操作系统在STM32的移植
使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...
- [ucos]了解ucos
1. uCosIII移植到STM32F10x http://www.cnblogs.com/hiker-blogs/archive/2012/06/13/2547176.html 2. uCosIII ...
- 关于STM32F103系列从大容量向中容量移植的若干问题
一.把STM32F103大容量移植到STM32F103C8T6上的步骤: 1.换启动文件 startup_stm32f10x_cl.s ——互联型的器件 包括:STM32F105x ...
随机推荐
- POJ 3680: Intervals【最小费用最大流】
题目大意:你有N个开区间,每个区间有个重量wi,你要选择一些区间,使得满足:每个点被不超过K个区间覆盖的前提下,重量最大 思路:感觉是很好想的费用流,把每个区间首尾相连,费用为该区间的重量的相反数(由 ...
- 【dfs+理解题意+构造】【待重做】codeforces E. Ice cream coloring
http://codeforces.com/contest/805/problem/E [题意] 染色数是很好确定,最少染色数是max(si)(最小为1,即使所有的si都为0,这样是单节点树形成的森林 ...
- IIS文件存在但报404问题解决
遇到一个奇怪的问题,在IIS7.5中,一些样式和JS文件存在,但访问就是报404. 根据网上搜索到的解决方法,发现解决不了,不同同样的问题引起的. 网上解决: 1.没有配置合适的MIME信息,通过添加 ...
- hdu3306:Another kind of Fibonacci
A(0)=A(1)=1,A(i)=X*A(i-1)+Y*A(i-2),求S(n)=A(0)^2+A(1)^2+A(2)^2+A(3)^2+……+A(n)^2. 这个矩阵有点毒.. #include&l ...
- 通过分析exevc系统调用处理过程来理解Linux内核如何装载和启动一个可执行程序
前言说明 本篇为网易云课堂Linux内核分析课程的第七周作业,本次作业我们将具体来分析exec*函数对应的系统调用处理过程,来分析Linux内核如何来执行一个可执行程序,由于有一个在网易云课堂共同学习 ...
- Java实验——输出一个数组里面连续子数组最大的和(二)文件操作
在本周的练习中,主要是对上周的实验进行健壮性的完善,即在所能考虑到的情况之中,尽量使自己的程序能够正常地运行. 在上周的实验中,我已经是在编程过程中考虑到用户输入的错误类型的问题,所以这一方面并没有多 ...
- 2018 11.1 PION 模拟赛
期望:250 100+100+50 实际:210 80+100+30 期望:100 实际:80 最后:两个点T了.可能是求逆元的方法太慢了,也可能是闲的又加了一个快速乘的原因. #inclu ...
- BZOJ 1055 HAOI2008 玩具取名 动态规划
题目大意:给定一个由'W','I','N','G'构成的字符串.给定一些规则.这些规则能够将两个字符合成为一个,比如"II"能够合成为'W',"WW"能够合成为 ...
- webpack-Dependency Graph(依赖图)
依赖图(Dependency Graph) 任何时候,一个文件依赖于另一个文件,webpack 就把此视为文件之间有依赖关系. 这使得 webpack 可以接收非代码资源(non-code asset ...
- WebApi-路由机制 Visual Studio 2015中的常用调试技巧分享
WebApi-路由机制 一.WebApi路由机制是什么? 路由机制通俗点来说:其实就是WebApi框架将用户在浏览器中输入的Url地址和路由表中的路由进行匹配,并根据最终匹配的路由去寻找并匹配相应 ...