采用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. biancheng-数据结构

    目录http://c.biancheng.net/data_structure/ 1数据结构入门2线性表3栈和队列4字符串5数组和广义表6树存储结构7图存储结构8动态内存管理9查找表结构10排序算法1 ...

  2. 加速 AI 训推:Lepton AI 如何构建多租户、低延迟云存储平台

    Lepton AI 是一款面向开发者的 AI 平台,旨在提供易用.高效且可扩展的基础设施能力.该平台适用于各种训练.推理需求,GPU充足,在保证高性能的同时,能够灵活应对不断变化的工作负载.用户可以快 ...

  3. react中refs的使用

    1.在dom元素中直接使用ref 意思就是可以在组件中创建一个dom节点的textInput,并将ref直接绑定到他 <script src="https://unpkg.com/@b ...

  4. ed25519加密签名算法及应用

    刷知乎时看到一篇文章,很感兴趣,来学习一下! 转载文章:ed25519加密签名算法及应用 初次使用Github时都需上传本地的公钥,这时需要提前在本地生成密钥对,使用的是ssh-keygen命令: s ...

  5. C++:随机数生成

    C++中生成随机数:需要用到的函数,一个是rand(),该函数只返回一个伪随机数.生成随机数之前必须先调用srand()函数. 生成随机数 #include iostream; #include ct ...

  6. 认识soui4js(第1篇)

    源代码:https://github.com/soui4js/soui4js soui4js是soui4+quickjs的结合体. soui4是一套c++ directui客户端开发框架,soui4j ...

  7. DataV过滤器

    人才库: return data.filter(function (item) { return item.职级 === ''; }) 区县分析:   //一级指标 const t = Object. ...

  8. 常用Maven命令

    一.常用命令 1.1 打包 mvn clean package -DskipTests 指定环境 mvn clean install -Dmaven.test.skip=true -Pprod-tx ...

  9. StarUML画流程图

    一.新建流程图 1.1 新建流程图 1.2 左侧操作符介绍 Flow:顾名思义就是流,用来从一个操作流向下一个操作. Process: 过程 Terminator:用在结束的时候. Dicision: ...

  10. mysql之增删改

    编写配置文件[db.properties]: driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/jdbcStudy?useUni ...