技术交流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,然后
输出数据到串口就可以了.