天天看点

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

华大单片机移植TencentOS-Tiny

文章目录

  • 华大单片机移植TencentOS-Tiny
    • 一、参考链接:
    • 二、资料准备
    • 三、开始移植
    • 四、移植完成-测试
    • 五、总结

一、参考链接:

1.Tiny的有关概述我就不说了。直接上官网看就可以了。

2.(1)TencentOs官网

(2)其他参考链接:杰杰博主

(3)API说明和demo

二、资料准备

1.要先移植TencentOS,肯定必须要有Tiny的源码,下载源码有两个方法,(1)通过github直接下载 github链接,(2)通过腾讯的 工蜂链接

2.要在华大单片机上移植,同样也必须要又华大单片机的可用工程模块,博主我使用的是华大HC32L13X系列,其他系列一样。工程模板,相信大家手上都是有的。

3.万事俱备,只欠东风

三、开始移植

1.由于前面有了许多前辈走的坑,以及写下的心血,有些部分仔细操作可以具体看下 上面的 杰杰博主链接。

2.下载下来是下面的样子

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

3.由于Tencent与华大有合作吧,反正出了个Hc32L136的demo,这就很舒服了。。不过我还是不喜欢,毕竟没有比这就动手来的实在,也能加深印象。

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

4.在我们的工程目录下新建一个TencetOS,然后将arch和kernel copy过来,在建个文件夹将 tos_config.h也拷贝过来。再将文件添加到工程中

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

(1)

TencentOS\kernel\core

路径下的所有

.c文件

添加到

tos/kernel

工程分组中.同时将

TencentOS\kernel\pm

目录下的所有

.c文件

添加到

tos/kernel

工程分组中。

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

(2)

TencentOS\arch\arm\arm-v7m\common

路径下的

tos_cpu.c、tos_fault.c

添加到

tos/arch

工程分组下面,也将TencentOS\arch\arm\arm-v7m**cortex-m0+**\armcc

路径下的

port_s.S、port_c.c

文件添加到

tos/arch`工程分组下面

(3)再将TencentOS\TOS-CONFIG

路径下的

tos_config.h

文件添加到

tos/config`工程分组中。

(4)最后将头文件的路径添加进去即可

…\TencentOS\arch\arm\arm-v7m\common\include …\TencentOS\arch\arm\arm-v7m\cortex-m0+\armcc …\TencentOS\kernel\core\include …\TencentOS\kernel\pm\include …\TencentOS\TOS-CONFIG

(5)把这个勾上

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

(6)添加这个头文件

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

(7)把 interrupts_hc32l13x.c里面的这个函数改成这样

void SysTick_Handler(void)
{		
	//系统自带
   //SysTick_IRQHandler();
	 
	//TOS
	if(tos_knl_is_running())   //TOS开始跑了,才能执行正常的调度处理
	{
		tos_knl_irq_enter();  //进入中断
		tos_tick_handler();		//调用UCOS的时钟服务函数
		tos_knl_irq_leave();	//触发任务切换软中断
	
	}
}
           

通过上面的操作基本将TencentOS成功的移植到我们的工程模块中了。接下就测试下是否可行。。写个简单的demo试下

四、移植完成-测试

对了。。。。。。。

要在main函数添加这个头文件哦!!!

#include "tos_k.h"

#if TASk_TEST  
k_task_t task1;
k_task_t task2;

k_stack_t task_stack1[512];
k_stack_t task_stack2[512];




void test_task1(void *parameter);
void test_task2(void *parameter);

void test_task1(void *parameter)
{
	while(1)
	{
		printf("hello world sym 1!!!!\r\n");
		tos_task_delay(1000);
	
	}
}

void test_task2(void *parameter)
{
	while(1)
	{
		printf("hello world sym 2!!!!\r\n");
		tos_task_delay(2000);
	
	}
}
#endif
           
k_err_t err1;
	k_err_t err2;


tos_knl_init();  //初始化内核

#if TASk_TEST
	err1 = tos_task_create(&task1,
	"test_task1",
	test_task1,
	NULL,
	2,
	task_stack1,
	512,
	0);
	
	if(err1 != K_ERR_NONE)
	{
		printf("TencentOS Create task fail! code : %d \r\n",err1);
	}	
	
	
	err2 = tos_task_create(&task2,
	"test_task2",
	test_task2,
	NULL,
	3,
	task_stack2,
	512,
	0);
	
	if(err2 != K_ERR_NONE)
	{
		printf("TencentOS Create task fail! code : %d \r\n",err2);
	}

	#endif

	tos_knl_start();
           

实验现象:多说无凭

华大单片机移植TencentOS华大单片机移植TencentOS-Tiny

五、总结

1.基本上操作系统的移植都相差不大,都是移植内核和部分配置文件即可。

2.不同的芯片厂商不同。可以的库函数配置不一样。所以这才是注意的点。。

3.最后一说,文章有一部分是参考杰杰博主的。再次感谢。文中有何问题欢迎提出!一起改进!加油。支持国产

继续阅读