开启ucosii的移植之旅
开启ucosii的移植之旅:
4.6.1、移植和硬件平台的关系
(1)只要是cortex-m3内核内核的soc移植差异都不大。
同内核同soc的不同开发板移植差异都不大。
不同内核的开发板移植难度大,找的官方移植的同内核版本为起点。
移植的一般思路: 先找到相近的内核移植好的源码。(官网里找一个)
在开发环境上建立好工程模板后,将ucosii的核心代码添加进去。然后编译,解决报错和警告。(在这里我们只是解决了语法错误,并不知道整个代码具体干了什么事,自己是不清楚的)下载运行,并小幅修改代码查看结果(验证自己的想法),最后添加并调试项目需要的BSP,编写并调试项目app部分。
4.6.2开始移植代码
跟着朱老师实战一下: 自己的板子是 STM32F103RCT6,建好工程模板。
编译出错3个错误。
..\app\..\APP\includes.h(52): error: #5: cannot open source input file "stm32f10x_lib.h": No such file or directory
找不到"stm32f10x_lib.h"头文件,因为老版本的缘故,实际上"stm32f10x_lib.h"里边包含了各个外设的头文件。这个在新版本里没有,但是我们有"stm32f10x.h"
还有绝对路径包含的问题,注意自己的文件名大小写以及对错。
.\Objects\project_template.axf: Error: L6200E: Symbol __ARM_use_no_argv multiply defined (by app.o and main.o).
.\Objects\project_template.axf: Error: L6200E: Symbol main multiply defined (by app.o and main.o). main函数重复了。我们在user里定义了main函数,而移植过来的app里面也有main函数。
.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_SysTickInit (referred from app.o).
.\Objects\project_template.axf: Error: L6218E: Undefined symbol OS_CPU_PendSVHandler (referred from vectors.o).
把一些文件没有添加进来。粗心造成的。 在这里遇到vectors.s这是以前的启动文件,现在用startup_stm32f10x_xx,,xx根据单片机的容量来选择。代码可以编译成功了。
4.6.3整理bsp部分:
实际移植发现的问题:
stm32单片机硬件仿真时超过五个断点就会全速运行不了。
自己对 OSTCBList的指针的理解有偏差:刚开始确实是OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]任务数组,按照元素下标依次连接(在TCB初始化函数中)但是每创建一个任务时(在此之前已经创建了两个任务,)
在OSTCBint函数中 :
ptcb->OSTCBNext = OSTCBList; /* Link into TCB chain */
ptcb->OSTCBPrev = (OS_TCB *)0;
if (OSTCBList != (OS_TCB *)0) {
OSTCBList->OSTCBPrev = ptcb;
}
OSTCBList = ptcb;
OSTCBList保存的是是上一次的TCB的地址,所以每次OSTCBList
开启ucosii的移植之旅的更多相关文章
- Docker学习总结(6)——通过 Docker 化一个博客网站来开启我们的 Docker 之旅
通过 Docker 化一个博客网站来开启我们的 Docker 之旅 这篇文章包含 Docker 的基本概念,以及如何通过创建一个定制的 Dockerfile 来 Docker 化Dockerize一个 ...
- STM32W108无线传感器网络嵌入式uCOS-II的移植及实时环境监測
基于STM32W108无线开发板,将ucos-ii v2.86内核移植到其上,并加入用户任务.实现对温湿度.超声波.声音.光敏等传感器的控制及实时数据採集. 14.1开发环境说明 硬件:STM32W1 ...
- uCOS-II之移植20160823
首先我们看一下uC/OS-II的框架图: 1.配置文件修改 +------------------------------------------ |core: os_core.c | os: os ...
- 用浏览器快速开启Docker的体验之旅
互联网科技发展创造了很多奇迹,比如我今天要提到的 docker 技术就是其一.我很早就关注它(在2015年写过这方面的博客),那会儿还只是一个开源项目,现在已经是一个行业事实标准了,它推动了云原生的变 ...
- 开启我的Android之旅-----记录Android环境搭建遇到的问题
在现在这个离不开手机的时代,对于手机APP的开发也是一个很大的市场,所以自己也想去探一探手机APP开发,在我们进行Android开发的第一步就是搭建环境,具体怎么搭建我就不说,这里记录一下在搭建环境的 ...
- Docker(一)Linux开启你的Docker之旅
前言 Docker容器最早受到RHEL完善的支持是从最近的CentOS 7.0开始的,官方说明是只能运行于64位架构平台, 内核版本为2.6.32-431及以上(即 >= CentOS 6.5, ...
- vim 开启我们的Python之旅
1.在我们的Mac系统下打开“终端”,输入python,然后回车即可看到我们电脑是否安装了python,以及它的版本,这里我的是2.7.5版本,如果未安装请百度之.
- 在 Ubuntu 开启 GO 程序编译之旅
本文将使用 putty 连接到一台阿里云 Ubuntu 16.04 服务器,在其上安装 go 语言的编译环境,旨在呈现从安装到"你好,世界!"涉及的方方面面,希望完成这个过程无须觅 ...
- 使用python开启你的opencv之旅---图像的读入,存储
python的便捷是如此的引人着迷,而opencv给python提供的接口使我们能够使用python来快速验证我们的想法,或者与别的模块快速结合,在这个系列文章我会通过jupyter notebook ...
随机推荐
- 4.1ASP.NET Core请求过程「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. HTTP请求过程 这里展示整体的HTTP请求的过程,这里化繁为简,保留了主干流程: 从浏览器输入域名开始,这里忽略 ...
- Docker最全教程——数据库容器化(十)
终于按时完成第二篇.本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化.本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容 ...
- 搞懂Redis到底快在哪里
前言 Redis是一种基于键值对(Key-Value)的NoSQL数据库,Redis的Value可以由String,hash,list,set,zset,Bitmaps,HyperLogLog等多种数 ...
- [Linux] deepin与nginx
deepin Linux Deepin 是一个基于 DEB 包管理的一个独立操作系统,和那些 Ubuntu(下个大版本是基于debian开发) 的衍生版仅仅只是换主题.调整ISO预置的软件包不同.Li ...
- OpenXMl倒出word、PDF
OpenXMl倒出word.PDF @using MarkdownSharp @{ ViewBag.Title = "预览"; Layout = "~/V ...
- GTX 750TI 使用 ffmpeg 时无法用 GPU HEVC(h.265) 进行加速
官网版本好像不是能加速的,所以在github上找到一个已经带gpu加速的. https://github.com/illuspas/ffmpeg-hw-win32 GPU加速命令格式: ffmpeg. ...
- Netty解决粘包和拆包问题的四种方案
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...
- 硬杠后端(后端坑系列)——Django前期工作
Django是一个开放源代码的Web应用框架,由Python写成,采用了MVC的框架模式. MVC MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件 ...
- setTimeout传参 和 运行机制
1.setTimeout 传参数 setTimeout还允许添加更多的参数.它们将被传入推迟执行的函数(回调函数) 上面代码中,setTimeout共有4个参数.最后那两个参数,将在1000毫秒之后回 ...
- Dotnetcore 开发速记
1.System.InvalidOperationException:"Internal connection fatal error." 全球固定模式,坑爹 https://gi ...