|
本帖最后由 andeyqi 于 2018-11-29 11:47 编辑 很荣祥在社区,【野火助力,书香醉人—第三轮书籍申请】活动中申请到《RT-Thread内核实现与应用开发实战指南》图书,上网一查火哥已经发布了电子版的图书,迫不及待的下载看了电子版阅读先读为快,但还是喜欢纸质版的图书放在书包或者床头随时翻阅。阅读完电子版对RT-Thread这几年的发展变化点赞,待拿到纸质版图书慢慢消化细度体会其中的细节,整理笔记如下。 ***********************************闲话至此,以下为读书的感悟笔记************************** 该书对RT-Thread(以下简称rtt)内核的系统调度,内存管理,IPC通信部分都进行了详细的描述,相信大家阅读完会对系统有了个系统的了解,其中的细节还是需要阅读源码并配合书籍理解消化,不要指望一口就吃成大胖子。 获取最新版本的rtt代码: http://github.com/RT-Thread/rt-thread/ 下载的最新的master版本为3.1.1,最新的4.0版本应该还没有放出来。 1 软件平台: 编译环境支持MDK,IAR,gcc,本文使用的开发环境linux+arm-none-eabi-gcc,另外需要依赖python和scons,软件版本如下。 ①arm-none-eabi-gcc(5.4.1) Using built-in specs. COLLECT_GCC=arm-none-eabi-gcc COLLECT_LTO_WRAPPER=/home/book/andey/arm-none-eabi/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/lto-wrapper Target: arm-none-eabi Configured with: /home/build/work/GCC-5-build/src/gcc/configure --target=arm-none-eabi --prefix=/home/build/work/GCC-5-build/install-native --libexecdir=/home/build/work/GCC-5-build/install-native/lib --infodir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/info --mandir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/man --htmldir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/html --pdfdir=/home/build/work/GCC-5-build/install-native/share/doc/gcc-arm-none-eabi/pdf --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-newlib --with-headers=yes --with-python-dir=share/gcc-arm-none-eabi --with-sysroot=/home/build/work/GCC-5-build/install-native/arm-none-eabi --build=i686-linux-gnu --host=i686-linux-gnu --with-gmp=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-mpfr=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-mpc=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-isl=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-cloog=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-libelf=/home/build/work/GCC-5-build/build-native/host-libs/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='GNU Tools for ARM Embedded Processors' --with-multilib-list=armv6-m,armv7-m,armv7e-m,armv7-r,armv8-m.base,armv8-m.main Thread model: single gcc version 5.4.1 20160919 (release) [ARM/embedded-5-branch revision 240496] (GNU Tools for ARM Embedded Processors) ②SCons(v2.2.0) SCons by Steven Knight et al.: script: v2.2.0.issue-2856:2676:d23b7a2f45e8[MODIFIED], 2012/08/05 15:38:28, by garyo on oberbrunner-dev engine: v2.2.0.issue-2856:2676:d23b7a2f45e8[MODIFIED], 2012/08/05 15:38:28, by garyo on oberbrunner-dev engine path: ['/usr/local/lib/scons-2.2.0/SCons'] Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation scons是一个Python写的自动化构建工具,从构建这个角度说,它跟GNU make是同一类的工具,是一种改进,并跨平台的gnu make替代工具,其集成功能类似于autoconf/automake 。scons是一个更简便,更可靠,更高效的编译软件。 ③Python(2.7.14) 2 代码编译 所谓的移植系统,只是找到RTT bsp类似的board进行修改编译,并配置所需要的组件即可,本实验直接采用的默认配置。 rtt 官方的代码库中已经包含大量bsp支持包,M0~M7的设备都已经全部覆盖了,移植使用的开发板为stm32l476-nucleo,发布版本的BSP已经支持了 该款开发板,只需要编译既可以在开发板上跑起来rtt。 ①配置工程 scons --menuconfig 保存默认配置会在当前路径下生成一个.config的配置文件,并根据这个文件生成rtt配置文件rtconfig.h,编译的时候会根据这个文件的配置来编译代码。
内核的配置选项就不一一详细叙说,本实验最关心的就是console使用的设备,搜索发现console使用的是usrt2,默认的配置usart2已经开启了,如果不开启控制台会没有log输出。
使用过程中还遇到一个坑,如果使用stm32l476-nucleo开发板的朋友可以注意了,使用串口2把串口接到串口2上没有log输出,最后查看原理图发现串口2接到了STlink的虚拟串口上了,串口使用STLINK的串口2就有输出了。
②设置环境变量 一种方式可以通过export RTT_EXEC_PATH=[GCC路径]设置,还可以修改~/bsp/stm32l476-nucleo/rtconfig.py文件中EXEC_PATH值。 ③编译程序 scons -j4 编译成功后,~/bsp/stm32l476-nucleo/目录下生成的rtthread.bin 即为可执行的二进制程序。 3 运行体验上电运行后串口会输出如下的信息,从输出信息可以看出rtt的版本信息,默认的shell使用的msh,输入help命令会列出系统的命令列表及帮助信息,项目开发过程中shell对调试及检测系统运行状态会有很大帮助。
rtt支持两种shell模式,根据上图的help帮助命令输出,msh模式下输入exit即进入finsh模式,finsh模式下输入msh()切换回msh模式。
4 pinctrl 驱动框架rtt提供了一套简单的 I/O 设备管理框架,它把 I/O 设备分成了三层进行处理: 应用层、 I/O设备管理层、硬件驱动层。 应用程序通过 RT-Thread 的备操作接口获得正确的设备驱动,然后通过这个设备驱动与底层 I/O 硬件设备进行数据(或控制)交互。 rtt 提供给上层应用的是一个抽象的设备操作接口,给下层设备提供的是底层驱动框架。 对于通用 GPIO 设备, 应用程序既可以通过设备操作接口访问,又可以直接通过通用 GPIO 设备驱动来访问。
结构如上,对于简单的点灯灭灯程序,用户态主要调用rt_pin_mode配置为输出,调用rt_pin_write设置高低电平就可以控制LED了,rtt驱动将gpio抽象为相应index,用index来代表相应的gpio,通过一张表完成映射。
5 添加名命令rtt系统支持的命令默认写在这个文件中xxx\rt-thread-master\components\finsh\cmd.c,添加一个命令可以在这个文件中添加或者在别的文件中添加,我添加的命令直接添加在cmd.c文件中。 在rtt中添加一个shell命令是很简单的,FINSH_FUNCTION_EXPORT(l);MSH_CMD_EXPORT(l);这两个宏就会将命令代码放到相应的secition中,控制台输入相关的命令对应的函数就会被调用,下面只是将上上述的pinctrl代码写入,写入到执行函数中就可以控制板子上的led,下面的edon,ledoff就会控制板子上的led亮和灭。
|
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
【银杏科技ARM+FPGA双核心应用】STM32H7系列56——CAN
【银杏科技ARM+FPGA双核心应用】STM32H7系列25——IWDG
如何在 Vitis 中使用 UIO 驱动框架创建简单的 Linux 用户应用
STM32 IAP应用中的几个常见问题
TFT LCD 控制接口FSMC/LTDC/DSI 应用文档
介绍FreeRTOS基础及其应用
【银杏科技ARM+FPGA双核心应用】STM32H750福利
微信公众号
手机版
嗯,之前我也是这么猜测的,一直没确认下,刚才看了下手册确实是这样的。