采用freertos编程后,有必要增加指令测试的功能:

  1、便于对于软件各个子模块或功能点进行测试。

  2、便于对硬件各个功能点是否正常进行测试。

在裸机编程中,我们一般使用串口进行运行数据的打印,同时使用串口接收上位机的控制命令,这样做当然是有局限性的,一方面,如果功能复杂,资源有限,所以的串口都被占用,则无法使用串口进行测试命令的收发,另一方面,测试命令并不一定通过串口传输,也可以通过CAN USB等接口。由于在freertos中,各个功能是模块化的,常见的思路是通过消息队列或者信号量由测试入口发送测试命令给各个测试单元,例如:

  1、使用xQueueSend从中断消息中发送到的FIFO中读出发送的控制命令

  2、TASK1使用xQueueReceive读取消息队列

  3、TASK2使用xQueueReceive读取消息队列

问题在于,使用xQueueReceive读取消息队列对于消息来说是一次性的,如果TASK1读取了,TASK2就无法读取,可能的结果是消息队列内的消息对TASK1没有用处但是被TASK1读取了;TASK2需要消息队列内的控制命令,但是读取到的消息队列内容却是空的。在FREERTOS中,还有另外一个消息队列读取方法xQueuePeek,该方法读取消息队列后,消息仍在队列中,不影响其他任务对消息队列中数据的订阅

综上,一发多收应用场景下,消息队列的使用方法如下:

  1、发送任务中,使用xQueueSend发送控制命令;为了防止消息队列的写满溢出或堵塞,在每次填充消息队列前,使用xQueueReset方法将消息队列清空。

  2、TASK1使用xQueuePeek读取消息队列,如果读取到的控制命令是针对自身任务测试的,则执行。否则,只获取消息,不执行消息,也不影响当前的消息队列。

  3、TASK2使用xQueuePeek读取消息队列,如果读取到的控制命令是针对自身任务测试的,则执行。否则,只获取消息,不执行消息,也不影响当前的消息队列。

当然,在使用消息队列前,不要忘记先要创建消息队列。

FREERTOS指令测试的思考的更多相关文章

  1. 关于html转换为pdf案例的一些测试与思考

    由于工作所需,最近花时间研究了html转换为pdf的功能.html转换为pdf的关键技术是如何处理网页中复杂的css样式,通过在网上收集资料,发现目前html 转换为pdf的解决方案主要分为三类: 客 ...

  2. MinHook测试与分析(x86下 E8,E9,EB,CALL指令测试,且逆推测试微软热补丁)

    依稀记得第一次接触Hook的概念是在周伟民先生的书中-><<多任务下的数据结构与算法>>,当时觉得Hook的本质就是拦截,就算到现在也是如此认为. 本篇文章是在x86下测 ...

  3. [原创]MinHook测试与分析(x64下 E9,EB,CALL指令测试,且逆推测试微软热补丁)

    依稀记得第一次接触Hook的概念是在周伟民先生的书中-><<多任务下的数据结构与算法>>,当时觉得Hook很奇妙,有机会要学习到,正好近段日子找来了MiniHook,就一 ...

  4. 4-51单片机ESP8266学习-AT指令(测试TCP服务器--使用串口调试助手--不连接路由器)

    上一篇连接  http://www.cnblogs.com/yangfengwu/p/8757513.html 源码链接:https://pan.baidu.com/s/1wT8KAOIzvkOXXN ...

  5. 移动onenet基础通信套件V1.08版本的AT指令测试

    1. 本次测试版本V1.08,AT+MIPLCREATE,首先需要一个配置文件.该指令创建一个基础通信套件的实例 2. 看下CGFID=2的配置,这个连接类型,UDP是1还是0?用户名和密码是什么?哪 ...

  6. FreeRTOS中断测试

    configMAX_SYSCALL_INTERRUPT_PRIORITY 高于此优先级的中断,不能被禁止 #ifdef __NVIC_PRIO_BITS #define configPRIO_BITS ...

  7. EC20指令测试

    cat /dev/ttyUSB2 & echo -e "AT+CGMM\r\n" >/dev/ttyUSB2   //输出模块型号 echo -e "AT+ ...

  8. Ubuntu+Fedora进阶学习,指令迅速查询,Bug迅速查询(Ctrl+F)

    There is some notes while I am learning Ubuntu Operate System! (Ask Ubuntu & Fedora) 1-- Hard li ...

  9. tst、cmp、bne、beq指令

    1.tst:逻辑处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值.当前运算结果为1,则Z=0:当前运算结果为0,则Z=1 cmp ...

  10. Http压力测试工具HttpTest4Net

    HttpTest4Net是一款基于C#实现的和HTTP压力测试工具,通过工具可以简单地对HTTP服务进行一个压力测试.虽然VS.NET也集成了压力测试项目,但由于VS自身占用的资源导致了在配置不高的P ...

随机推荐

  1. 教你实现GPUImage【OpenGL渲染原理】

    一.前言 本篇主要讲解GPUImage底层是如何渲染的,GPUImage底层使用的是OPENGL,操控GPU来实现屏幕展示 由于网上OpenGL实战资料特别少,官方文档对一些方法也是解释不清楚,避免广 ...

  2. mysql数据库指定ip远程访问(设置远程连接),赋权操作

    mysql数据库指定ip远程访问(设置远程连接) 远程访问mysql报错,ip不允许链接的情况:错误号码1045Access denied for user '用户名' @'数据库地址' (using ...

  3. 关于toString()的小细节

    3. toString()方法3.1 toString()的使用: 1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() * * 2. Object类中toString()的 ...

  4. Nibbles PG walkthrough Intermediate

    nmap nmap -p- -A 192.168.239.47 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-15 02:26 UTC Nmap ...

  5. moectf2023 web wp

    gas!gas!gas! 直接跑脚本 import requests session=requests.Session() url="http://127.0.0.1:14447" ...

  6. 最佳产品奖,TeleDB拿下!

    近日,第十三届PostgreSQL技术大会在杭州举行.本次大会以"聚焦云端创新,汇聚智慧共享"为主题,行业大咖.学术精英.技术专家和技术爱好者齐聚一堂,共同探讨数据库领域的发展趋势 ...

  7. 让存储绿“翼”盎然,天翼云HBlock入选工信部目录!

    近日,中国电信天翼云的自研产品HBlock凭借"存储资源盘活技术"成功入选<国家工业和信息化领域节能降碳技术装备推荐目录(2024年版)>(以下简称<目录> ...

  8. ubuntu通过tar包安装mysql5.7.21

    作者:zuoguohui 一.场景:最近想搞mysql主从复制,需要在两台服务器上安装mysql,之前有一台已经装好了mysql5.7.21,于是在另外一台上也装mysql5.7.21,安装过程中碰到 ...

  9. Q:以非root用户编辑定时任务报错You are not allowed to use this program(crontab)

    编辑定时删除文件任务时报错 crontab -e 编辑定时任务时报错,如下图所示 问题原因:/etc/cron.allow中没有添加对应的用户名解决办法:切换到root用户,在/etc/cron.al ...

  10. Qt项目下pro文件设置库路径

    问题 正常情况下我们会将工程的路径用一个变量来储存 例如: PROJECT_DIR=/home/$$(USER)/svn/embd_linux/app 然后后面的变量引用这个变量,例如: INCLUD ...