STM32工作笔记0072---UCOSIII在STM32F103上的移植

技术交流QQ群【JAVA,C++,Python,.NET,BigData,AI】:170933152

STM32F103是cortex-m3的一个架构

把这个跑马灯的实验拿过来

然后

改一下名字就可以了.

然后在工程文件夹中,新建UCOSIII文件夹

然后把UCOSIII的文件都放到这个文件夹中去.

这个UCOSIII源码.zip这个,压缩包,解压以后,可以出来

UCOSIII 3.03

UCOSIII 3.04

这两个文件夹.

这3个文件夹就copy过去就行了

官方移植的也可以解压出来.

这里咱们用官方移植好的,copy过来使用就可以了,

因为官方针对移植做了一些修改,具体修改了什么一会咱们会说到.

复制过来这3个文件夹以后.

然后

再新建这两个文件夹

然后看一下

UCOSIII有5个文件夹

这3个是从官方文件夹中copy过来的

然后:另外两个是咱们自己新建的

然后首先

往这个UCOS_CONFIG中添加文件

找到官方移植的文件夹然后

把画出的文件都copy过去

可以看到把对应的文件copy过来了

然后

再去copy文件到UCOS_BSP这个文件夹中

这里咱们只需要:

.这两个文件

然后到这里第二步就弄好了

然后再看第三步

这里首先去添加这6个分组

然后再往对应的分组中去添加文件

UCOSIII-BSP中只有一个文件bsp.c

然后

再去添加UCOSIII-CPU这个文件夹

找到:这个文件夹,然后,选中文件类型,所有文件

这里只需要这个cpu_core.c这个文件

然后还有一个ARM-Cortex-M3这个文件夹

打开这里,可以看到这里有GNU和IAR,RealView

GNU针对GNU平台,IAR针对IAR平台,这里我们需要

RealView这个文件夹中的内容

可以看到把这两个文件添加进去

这个这个文件夹中有这样3个文件

然后再去添加UCOSIII-LIB这个文件夹

中的内容

选择这几个文件

然后再进去Ports

这个文件也添加进去,这个.asm文件是,汇编文件

UCOSIII-LIB文件夹可以看到就添加了这几个文件

然后

再去添加这个UCOSIII-CORE,这个文件夹

找到对应的文件夹,首先这个source文件夹中的所有内容

要添加,ctrl+a添加就可以了.

然后添加UCOSIII-PORT

 这三个文件添加进去

然后

UCOSIII-CONFIG,要把上面的文件夹的所有的文件添加进去

这样文件就添加好了.

如果文件有个小锁就把只读去掉.

然后去添加头文件去

把这些头文件添加进来.

然后

这里直接从例子程序中把修改完的这两个文件copy过来就可以了.

这两个修改的文件,实际上,就是在原来的官方文件基础上,做了一些精简

把不用的东西删除掉了.

具体的修改过程怎么修改,可以看文档有说.

编译一下,然后看看没有错误

修改这个.asm,是个汇编文件

这个挺难,也从移植好的文件中copy过来就可以了,

把原来改好的例子的代码copy过来就可以了.

注意,这个.s文件和.asm都是汇编文件,是一样的.

copy过来编译有问题,可以看到问题是因为

在os_cpu_a.s文件中和stm32f10x_it.c文件中

有个重复的函数定义:

PendSV_Handler这个函数

去看一下

明显在os_cpu_a.s这个文件中,才是我们需要的,所以

下面的这个函数就先注释掉了.

然后,再去编译一下,可以看到没有错误了

再去修改这个

os_cpu_c.c这个文件

先添加头文件:

然后编译可以看到有错误

说找不到这个.h文件

然后

把这个.h代码注释掉,这个是用不到的.

同样打开移植好的工程

然后把移植好的这文件copy过来

覆盖掉原来的就好

覆盖以后,编译一下没有错误

然后修改sys.h这个文件

这里把这个改成1

原来没用系统是0,用的话,改成1

然后编译有错误

说这个delay_ostickspersec没有定义

可以看到,这个单词,少了个s原来写的是

delay_otickspersec

修改后,再编译一下.

可以看到上面的错误已经没有了

但是还有个重复定义的错误

这个是滴答计时器的服务函数,ucos是一定要用到的

然后

这里面的这咱们注释掉.不用

然后可以看到就移植完了.

然后看一下这个文件夹,这个是ucos的源码文件.

然后,再去看一下所有的

都是有哪些文件

可以看到上面左侧画圈的是,UCOS的源码部分,

右边是UC/LIB库,是提供的一些共通的功能包,用不到可以删除

然后下面左边是与CPU相关的代码,要根据CPU架构来写

然后中间将于CPU相关的功能封装了一下,也可以使用uc系统的,但是这里我们封装了一下自己的.

然后右边是BSP,这一块都是硬件驱动,然后我们的硬件驱动都是在hardware中写的.

这里bsp.h,bsp.c

然后这里可以看到:
上面左边是配置文件

后面用的时候可能会修改.

右边是应用程序,以后会在这个部分写app.c.app.h

写自己的程序.

然后移植是完成了,但是怎么样来证明移植成功了呢,

咱们写个简单的测试任务

这个时候,因为还没有学UCOSIII习题,系统.

这里就从以前的例子中copy过来,测试

copy过来以后

编译

然后编译一下

可以看到这里有个错误

把72删除掉就可以了,这个函数没有参数

然后,编译,下载到开发版

打开摄像头

可以看到,串口有输出,然后

LED灯也是亮的.

为什么会有这种现象呢,可以去看看

对应的代码:

可以看到:

有led0的任务函数,

led1的任务函数,控制灯在亮灭

然后

下面有个:

有个任务,是每隔500ms,加0.01f,然后

输出数据到串口就可以了.

猜你喜欢

转载自blog.csdn.net/lidew521/article/details/108451446