关于TencentOS tiny 基础内核实验
本次介绍的是关于TencentOS tiny 基础内核实验 ——hello_world实验
TencentOS tiny官方开源仓下载源码,地址为: https://github.com/Tencent/TencentOS-tiny 进入 <TencentOS_tiny\board\TencentOS_tiny_EVB_MX_Plus\KEIL\hello_world> 目录,打开
TencentOS_tiny.uvprojx 工程
:就可以编辑下载运行。官方给出运行结果:在 PC 的串口助手中可以看到 TencentOS tiny 的两个任务交替运行,打印消息并完成任务计数,如下图所示:
当然它屏幕也显示了LOGO。但是作为要学习的小白,这就能打发我们吗?不行!!!
来一起看看运行原理——为啥打印这些,要怎么做到这些,懂做才懂改。
#一个从源头查起,main.c
#主要看 int main函数:
#先看board_init(); //板子初始化:
<TencentOS_tiny\board\TencentOS_tiny_EVB_MX_Plus\BSP\Src\mcu_onit.c>文件中44行左右有相关函数,这里我对它进行了简单标注方便阅读:
去掉它注解掉的函数,就能很清晰的看出来它用了几种功能:GPIO配置,串口初始化,定时器初始化,OLED初始化与显示。
注:这里的初始化,就是对一些基础设置,跟STM32基础一致,网上资料较全,不在累述。而OLED显示部分,在这里显示字符串,跟串口打印函数相似:OLED_ShowString(X坐标,Y坐标,需要显示的字符串); OLED_ShowChinese(X坐标,Y坐标,显示的字体在字库的位置);
下面看看OLED_ShowChinese函数代码:
//显示汉字
而Hzk字库在oleddfont.h中
可设置里面数组用工具(PctoLCD2002网上可免费下载)取模;
现在为止,屏幕显示已经明确,分析完 board_init();函数。
printf(“Welcome to TencentOS tiny\r\n”); //串口打印
就是让串口打印字符串
那么 osKernelInitialize(); 内核初始化做了什么?
Cmsis_os.c (osal\cmsis_os)中 :
同样Cmsis_os.c (osal\cmsis_os)中:
就是反馈K_ERR_NONE 变量是否异常。
#osThreadCreate(osThread(application_entry), NULL); // Create TOS Tiny task
Cmsis_os.c (osal\cmsis_os)中:
而之中变量osThread(application_entry)
application_entry函数在Hello_world.c (examples\hello_world):中:
同文件中
#关于osThreadDef(name, priority, instances, stacksz)定义如下:
总体总结为:创建结构体,给结构体命名,重装初值
而task函数为:
除去判断功能就是为了 printf("###I am task1\r\n"); 输出;
而且在main函数中
#最后一句 osKernelStart(); // Start TOS Tiny
// ==== Kernel Control Functions ====
与内核初始化相同,是一种判断返回。
本文用代码反推形式说明功能实现,具体修改相应的修改可以进行两个地方的简单修改:
1、把腾讯的LOGO改掉,用字库软件从新生成字符库。在oleddfont.h的Hzk[]的库中
2、把打印数据改掉,可以直接改在Hello_world.c (examples\hello_world):的task函数中: printf("###I am task1\r\n");
两种数据传出方式,为之后的传感器传出数据建立基础。