完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
移植前的准备工作
1. 获取STM32的裸机工程模板 STM32的裸机工程模板直接使用野火STM32开发板配套的固件库例程即可。可以从我github上获取https://github.com/jiejieTop/TencentOS-Demo 下载TencentOS tiny 源码 TencentOS tiny的源码可从TencentOS tiny GitHub仓库地址https://github.com/Tencent/TencentOS-tiny下载,如果GitHub下载慢,也可以通过腾讯工蜂开源仓下载,地址:https://git.code.tencent.com/Tencent_Open_Source/TencentOS-tiny ,大家在移植时并不需要把整个TencentOS tiny 源码放进工程文件中,否则工程的代码量太大。杰杰将在下文讲解如何将TencentOS tiny移植到工程中去,以及如何把TencentOS tiny源码中的核心部分单独提取出来,方便以后在不同的平台上移植。目前使用的是TencentOS tiny最新版本,由于TencentOS tiny在不断更新,如果以后TencentOS tiny更新到更高的版本,则以最新的版本为准。 TencentOS tiny源码核心文件夹分析 打开TencentOS tiny源码文件,可以看见里面有12个文件夹,下面先来了解主要文件夹及其子文件夹的作用,然后将TencentOS tiny源码的核心文件提取出来,添加到工程根目录下的文件夹中,因为工程只需要有用的源码文件,而不是全部的TencentOS tiny源码,所以可以避免工程过于庞大。 [tr]一级目录二 / 三级目录说明(杰杰)[/tr]
将裸机工程源码重命名为hello-world,然后在裸机工程中新建一个TencentOS文件夹,接着将kernel文件夹、arch文件夹、添加到TencentOS文件夹下: 除了TencentOS tiny的核心文件外,还需要移植一下其他文件,如关于TencentOS tiny系统的配置文件。这是一些可以被用户修改的文件,所以会放在具体的工程文件中。board就是TencentOS tiny为一些常用开发板开发的demo文件夹,其内有各个工程的配置文件,选一个与移植芯片最相机的开发板,找到它的配置文件tos_config.h,比如我们可以选择:TencentOS-tinyboardSTM32F103_SIM800ATOS-CONFIG路径下的配置文件,把它拷贝到我们工程中的TencentOS文件夹下,当然你也可以把整个TOS-CONFIG目录拷贝过去,把其他无关的配置删掉就好了。 这个配置文件很重要,后续在移植工程时,我们需要对这个配置文件进行修改,这样子可以裁剪TencentOS tiny的功能,得到最适合的工程配置。 开始移植 打开TencentOS-Demohello-worldProjectRVMDK(uv5)路径下的TencentOS.uvprojx文件。
添加完成后的文件: 指定头文件路径 编译时需要为这些源文件指定头文件的路径,否则编译会报错。TencentOS tiny的源码中有很多头文件,必须将对应的路径添加到开发环境里。在添加TencentOS tiny源码时,一些其他的头文件夹也被复制到了工程目录中,所以这些文件夹的路径也要加到开发环境中。 这些头文件的路径分别是: ....TencentOSarcharmarm-v7mcommoninclude....TencentOSarcharmarm-v7mcortex-m3armcc....TencentOSkernelcoreinclude....TencentOSkernelpminclude....TencentOSTOS-CONFIG 同时还要在配置中勾选支持C99模式: 尝试编译 如果你走到这一步,那么可以尝试编译一下,不过我测试时编译是没通过的,原因是缺少了部分头文件: 不过这不影响,我们在配置文件tos_config.h中修改一下就好,添加两句话 #include "stm32f10x.h"#include 修改中断函数 注释PendSV_Handler()函数 鉴于TencentOS tiny已经处理好PendSV与SysTick中断了,就不需要用户自己去处理,所以要在中断相关的源文件(stm32f10x_it.c文件)中注释(或者删除)PendSV_Handler()函数。 编写SysTick_Handler()函数 SysTick中断服务函数是一个非常重要的函数,TencentOS tiny所有跟时间相关的事情都在里面处理,SysTick就是TencentOS tiny的一个心跳时钟,驱动着TencentOS tiny的运行,就像人的心跳一样,假如没有心跳,我们就相当于“挂掉”,同样的,TencentOS tiny没有了心跳,那么它就会卡死在某个地方,不能进行任务调度,不能运行任何的东西,因此我们需要实现一个TencentOS tiny的心跳时钟。代码如下: 注意:SysTick_Handler()中调用的都是TencentOS tiny中的函数,所以需要在stm32f10x_it.c文件中包含tos.h头文件。 #include "tos.h"// SysTick_Handler()函数void SysTick_Handler(void){ if (tos_knl_is_running()) { tos_knl_irq_enter(); tos_tick_handler(); tos_knl_irq_leave(); }} 编写main函数 当你走到这一步,编译是不会出错了,此时我们已经完全移植好操作系统了,那么可以编写代码了,现在编写一个测试代码,在main.c文件中: #include "stm32f10x.h"#include "bsp_usart.h"#include "tos.h"k_task_t task;k_stack_t task_stack[1024];void test_task(void *Parameter){ while(1) { printf("hello world!rn"); tos_task_delay(1000); }}/** * @brief 主函数 * @author 杰杰 * @retval 无 */int main(void){ k_err_t err; /*初始化USART 配置模式为 115200 8-N-1,中断接收*/ USART_Config(); printf("Welcome to TencentOS tinyrn"); tos_knl_init(); // TOS Tiny kernel initialize err = tos_task_create(&task, "task1", test_task, NULL, 2, task_stack, 1024, 20); if(err != K_ERR_NONE) printf("TencentOS Create task fail! code : %d rn",err); tos_knl_start(); // Start TOS Tiny} 下载 然后编译,下载到开发板上,就通过串口可以看到程序已经跑起来了: end 至此,TencentOS tiny移植到stm32f1的过程全部完成! |
||
|
||
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1767 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1069 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 02:31 , Processed in 0.795616 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号