注意:本手册基于最新版本的SL_RTE,目前提供的板子配套工程中的SL_RTE为上一版本,没有更新。新旧版本的RTE主要区别在于SoftTimer、Shell等模块的维护方式有所不同,老版本是静态维护,新版本是动态维护。
1、总体说明
TuringBoard的工程结构如上图所示,其中CMSIS是KEIL自带的中间件,包括NN-LIB、RTX、CMSIS头文件等内容(这里之所以使用其的原因是方便仿真时候使用RTOS VIEW)。
除上述CMSIS部分以外,工程的其他源码均以源文件的形式添加到IDE中,这里做逐一介绍:Main包括主函数与中断函数,目前的程序当中线程没有以单独的.c文件的形式做维护,后续会更新,方便管理;Boot包括启动文件与system_stm32h7xx.c,完成进入main函数前的配置工作;HAL_Lib是ST公司提供的驱动库,其中的dcmi部分做了修改;Board_BSP是针对板子适配的驱动库,介绍如下:
各个模块的配置以结构体形式做静态管理,方便维护,同时提供了回调函数:
方便与CubeMX结合,实现傻瓜式配置。
Board_HALCallback.c文件是上述提及的回调函数的集合,也是HAL中断回调函数的集合,在中断回调函数中通过线程标志位或者标志位等实现线程的切换。
SL_APP、SL_BSP、SL_Config、SL_ThirdParty是SL_RTE的组成部分,在下一章会详细描述。
SL_MV是实现机器视觉的核心算法及其支持件,在本开发板相关其余文档中会详细描述。
2、SL_RTE
2.1、总介
总的来说,SL_RTE是“好用的轮子的集合”,在本人这么多年的码代码生涯中,经历了不少换一个平台或者换一个项目就重造一遍轮子的“悲惨声调”。不可否认重造轮子肯定能一定程度上提高个人业务水平,但是这意味着时间资源的大大消耗。在这博弈的过程中,本人整理了各种自己使用过的轮子,进行了重构或者创新,整理集合为SL_RTE,并在此开源,希望能帮助到大家。
2.2、组成
SL_RTE主要有以下四个部分组成:
Config部分:即以头文件形式完成对整个RTE使用模块的配置,配合MDK环境可以实现图形化配置:
如上图,打开RTE_Config.h头文件,点击左下角的Configuration Wizard标签,切换到图像化配置界面:
这里可以实现各个模块的使用选择,以及模块内部可能存在的一些配置:
RTE部分:
这是整个SL_RTE轮子集合的精华所在。包括多块内存管理、用于实现stdio逻辑的重定向文件、一个类shell交互组件、环形队列与消息队列、时间片轮转调度、状态机模板、一个刚刚开始弄的GUI。
--RTE_BGet
关于BGet内存分配不了解的请先参阅原版代码:
SL_RTE做的工作在于精简了一些功能,改写其为多块内存管理。
--RTE_Shell
提供一个给用户快速与MCU交互的框架,相对于静态写被调用的函数,RTE_Shell使用RTE_BGet进行动态管理,有需要按照以下格式进行cmd的添加与删除。
RTE_Shell_AddCommand("Help",RTE_Shell_CMD_Help,"shell使用帮助")
RTE_Shell_DeleteCommand("Help")
Shell函数格式如下:两个参数argc和argv分别是用户输入的参数个数和各个参数的指针。
环形队列和时间片调度大家伙应该很熟悉了,这里不多说,需要注意的是SoftTimer也是动态管理的。
BSP部分:
针对不同MCU提供基本的驱动,主要有LED和KEY以及COM。
Board_Driver部分:
针对不同的开发平台提供板级驱动,主要就是各种传感器、LCD之类。
实际运行情况:
可以看到各种cmd的使用,以及一个led定时器的添加和删除。
最新版本的RTE开放在群中。
我的机器视觉开发板群号为:858707065,欢迎大家前来学习交流。
此内容由EEWORLD论坛网友shannon2014原创,如需转载或用于商业用途需征得作者同意并注明出处