RT_Thread的测试框架使用及分析

RT_Thread的测试框架使用及分析

为了行文的简单,RT_Thread将简称为RTT。

一个最简单的测试用例(不使用TestCase框架)

RTT的finsh组件,提供了非常强大的调试功能,我们可以将函数输出到finsh上,然后就可以在finsh中手动的调用这个函数,这一点非常的强大。可以说finsh是RTT的调试利器,善用finsh,可以极大的提高开发的效率。

关于finsh的详细的介绍,可以参考《RT_Thread实时操作系统编程指南》的 Finsh Shell系统一章,这里先只是简单的举一个例子。

在application.c中的最后添加如下代码


int testfunc(void)
{
	rt_kprintf("hello, rt-thread!\n");
}

#include <finsh.h>
FINSH_FUNCTION_EXPORT(testfunc, just a test function);

不要忘记在rtconfig.h中使能 RT_USING_FINSH宏.
我们编写了名为 testfunc的函数,然后希望在finsh中挑用它,那么我们需要使用FINSH_FUNCTION_EXPORT宏带两个参数,第一个参数是函数名,第二个参数是对函数的说明,可以是任意字符串,用户可以根据自己的喜好编写,不过建议对函数做客观的说明或介绍。
FINSH_FUNCTION_EXPORT 会函数testfunc输出给finsh,这样finsh就会“知道”有一个函数名为testfunc。

接下来,重新编译工程,启动串口工具,比如putty,windows系统自带的超级终端,或者SecureCRT。
复位开发板,你就可以看到如下信息:

 \ | /
- RT -     Thread Operating System
 / | \     1.1.0 build Apr 15 2012
 2006 - 2012 Copyright by rt-thread team

finsh />


此时,按下Tab键,可以看到如下语句

--function:
testfunc         -- just a test function
list_mem         -- list memory usage information
list_date        -- list date
hello            -- say hello world
version          -- show RT-Thread version information
list_thread      -- list thread
list_sem         -- list semaphone in system
list_event       -- list event in system
list_mutex       -- list mutex in system
list_mailbox     -- list mail box in system
list_msgqueue    -- list message queue in system
list_mempool     -- list memory pool in system
list_timer       -- list timer i
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
RT-Thread作品秀】基于RT-Thread的气压温度测量系统作者:安静的句型 概述(说明应用产生的背景、实现功能)基于ART-Pi,利用MS-P2XD10气压传感器模块,L610-CN-00-MiniPCIe-10Cat模块,设计了一款气压温度测量系统,测量环境的大气压力和温度,并上报到阿里云,连接到物模型,实时显示。 开发环境(所采用的软、硬件方案)硬件:ART-Pi;L610;LPS22HH RT-Thread版本:4.0.3 开发工具及版本:MDK-v5.27.0.0 RT-Thread使用情况概述(简要总结下应用中RT-Thread使用情况:内核部分、组件部分、软件包部分、内核、其他)使用RT-Thread内核中使用线程、信号量、 邮箱、内存池等功能,在读取到传感器数据后,将气压和温度数据通过邮箱传输到阿里云发布线程,向云端发送。 调用了FinSH组件用于系统过程调试,监视线程应用情况、设备使用情况、其它信息等。 加载了多个软件包: AT DEVICE软件包,用于L610的驱动。 WebClient软件包,测试L610功能。 ali_iotkit软件包,配置阿里云三元组信息,连接阿里云。 cJSON软件包,进行数据封装。 硬件框架(概述应用所采用的硬件方案框图,并对核心部分做介绍)利用ART-Pi作为主控单元,通过I2C接口与LPS22HH气压传感器模块通讯,获取气压和温度值。通过UART接口与L610Cat通讯模块通讯,与云端连接。 其中LPS22HH需注意连线,具体连线如下: LPS22HH板 ART-Pi 定义 VDD P1-1 3.3V VDDIO P1-1 3.3V SA0 P2-39 GND SDA P1-3 I2C-SDA SCL P1-5 I2C-SCL CS P1-1 3.3V GND P1-39 GND 其中VDD和VDDIO都是为LPS22HH供电,直接使用ART-Pi的3.3V电源。SA0是用于选择地址,接地后地址为0x5C。SDA和SCL是I2C接口“i2c3”。CS作为片选信号,接高电平后选择接口为I2C。 L610连线如下: L610板 ART-Pi 定义 UA1_TX P1-10 UART-TX UA1_RX P1-8 UART-RX AUTO_POWER_ON_1 P1-6 GND AUTO_POWER_ON_2 P1-12 PI5 CTS短路帽不接。 电源短路帽接至VUSB。 连接USB接口供电和通讯。 软件框架说明(介绍应用所采用的软件方案框图、流程图等,并加以解说)在main.c文件中首先进行了L1610的上电,mqtt初始化,lps22hh初始化等,并创建了四个线程,LED闪烁线程、阿里云发送数据线程、接收阿里云命令线程、定时器线程。 当前实现了基础功能: 通过控制台发送读取传感器数据指令后,在阿里云显示的功能。 后期还需继续完善两个功能: 硬件定时器功能,可按设定的时间间隔进行工作,采集传感器数据并上报云端,当前使能了timer13,但是定时器无法正常工作,程序是按照文档和原潘多拉板直接移植的,暂未找到问题原因。 阿里云下发命令功能,阿里云可以下发命令控制LED开关,下发命令控制硬件定时器定时间隔,随时修改传感器上报数据频率。除了阿里云在线调试界面,暂未找到如何下发命令方法。 还有一些问题: L610的初始化过程有些不太清楚,看at_device_l610.c文件,是在其中创建了一个初始化的线程并直接调用了,这个怎么能在main中统一初始化呢,现在是在main中延时了10秒等待初始化完成后再执行mqtt等初始化。 对接sensor设备框架未成功,尝试了创建sensor设备成功,但是初始化过程应该有问题,对于一个传感器两个参数的情况暂未了解透彻。 软件模块说明(介绍应用软件关键部分的逻辑、采用的实现方式等)sensor_st_lps22hh应用模块直接调用了st的函数库lps2hh_reg,首先创建了stmdev_ctx_t变量,完成了寄存器读写函数的实例化,在此需注意lps22hh的地址,选择了sa0为gnd后地址为0x5c,此地址为7位,可以直接在i2c设备框架中直接赋值无需右移。另外在读取寄存器值时应首先写地址然后才是读数据。参考st的polling文件,编写了初始化函数和读取数据函数,直接读取气压和温度值,并发送至邮箱。 api_ali应用模块参考ali-iotkit的mqtt_example文件,在ENV中配置好三元组信息后,进行mqtt初始化,读取三元组,与云端建立mqtt连接,并订阅了发布和读取主题。编写了数据发布函数,可由发布线程直接调用。试验了cJSON软件包,直接打包成json数据,试验了直接赋值字符串,均可正常实现。试验了接收命令线程,在阿里云中
RT-Thread作品秀】EE-Lab作者:卿俊成 概述随着集成电路的不断发展,电子测量仪器分别向着高性能和微型化不断发展。本作品基于微型化便携式需求,设计一个集成数字电源、信号发生器、示波器的便携式电子测量仪器。 开发环境硬件:ART-Pi开发板、2.8‘SPI TFT屏幕(ILI9341)、AD9833模块、自制扩展板(由于设计失误,无法使用RT-Thread版本: RT-Thread Nano(V3.1.3) 开发工具及版本:STM32CubeMX(V6.1.0)、HAL库(H7_V1.8.0)、Keil/MDK(V5.33.0.0) RT-Thread使用情况概述本应用使用Nano版RT-Thread,因此只使用了内核部分。 本应用使用信号量作为DMA分批通过SPI刷屏的屏幕数据,在中断中释放信号量,用于分批刷屏的同步。 本应用使用Finsh组件作为无GUI情况下的数据查看方式,及命令行方式对AD9833模块及定时器的操作方式。 硬件框架电脑端通过Putty软件与ART-Pi开发板的Finsh组件通信,实现控制功能。 SPI TFT屏幕模块由开发板的SPI4总线控制,作为波形显示界面。 AD9833信号发生模块由开发板通过模拟SPI控制,作为信号发生器。 信号测试夹用于外部电压输入,作为示波器的源信号。 由于自制扩展板存在问题,不在此介绍,但附上立创eda工程的在线链接:https://oshwhub.com/OneToken/art-pi-ee-tools 软件框架说明Finsh组件通过与电脑端交互,控制TIM15的预装载值,达到通过控制TIM15触发DMA_ADC转换的采样频率,并在显存对应位置打点,实现示波器功能。同时还可以控制AD9833产生频率不同的三角波、正弦、方波。 屏幕的刷新,由DMA1通道0将内部预先分配好的显存数据搬运至SPI移位寄存器,从而发送至ILI9341,实测频率60Mbit的情况下可以完美刷新,实现了高速刷屏的功能。 软件模块说明DMA传输ADC数据框图 通过定时器15触发DMA1通道1将ADC数据循环采集至指定内存处,实现示波器数据采集功能。 SPI通过DMA方式刷屏功能框图 理想情况下的刷屏方式 受到DMA一次传输数据数目uint16_t也就是65535的限制,无法一次性完成显存刷新至屏幕,因此分成三个数据包,依次顺序传输,使用信号量作为同步信号。 最终实现的刷屏方式 演示效果演示视频: 比赛感悟通过本次比赛,极大程度上熟悉了H7系列开发板,特别是大量参考了安富莱提供的教程,了解了H7的多域设计,RAM的分布式设计以及指定存储位置,DMA通信只能用于特定的RAM区和特定的外设之间,若RAM区域使用最高性能的DTM区,则大部分DMA通信都无法使用。在决定使用RT-Thread Nano之前,尝试使用RT-Thread完整版,按照完整版的流程注册SPI设备并且使用时,发现无法驱动SPI液晶屏,使用逻辑分析仪抓取信号也没啥问题,因此才换成RT-Thread Nano。 通过本次的小作品,比较深入的理解了RTOS的作用,特别是用于线程同步时,阻塞下来,等待中断释放信号量的方式,使得分段DMA SPI刷屏也能毫无感知延时的连续刷新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值