野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5529|回复: 2

[ucos] 上位机向单片机通过串口读取任务A的计算结果,如何处理?

[复制链接]
发表于 2021-7-27 21:29:08 | 显示全部楼层 |阅读模式
上位机通过串口命令协议向单片机发送读【计算结果数据】命令,数据是由一个ADC采样关联任务的计算结果组成,该如何设计呢?


此计算结果在TaskA内部,以前通过裸机写程序时,设置一个全局变量的数组即可,现在用ucos不太明白该怎么发出来此计算结果。


我自己的一个思路是TaskA产生的数组通过邮箱传给TaskB,中断产生的信号量也给TaskB。TaskB先是每30秒接收到数据,然后不定时地等待上位机读数命令,当上位机发送读数命令时进入中断产生信号量以触发TaskB任务。但问题是,TaskB可以这么处理吗,如此处理后TaskB在接收到邮箱数据后执行到【等待中断信号量】这一句时挂起,下一次等收到信号量是否直接从TaskB的中间【等待中断信号量】这一条语句开始执行??

回复

使用道具 举报

 楼主| 发表于 2021-8-2 15:04:54 | 显示全部楼层
已经通过全局变量的方式解决了
回复 支持 反对

使用道具 举报

发表于 2022-3-9 20:57:07 | 显示全部楼层
zhildren 发表于 2021-8-2 15:04
已经通过全局变量的方式解决了

全局变量有危险,除非你只有一个任务在写,其它任务都是读。而且这个全局变量的读在一个单片机指令周期内完成,否则会出现原子完整性危险。

    1、上位机和串口可以使用信号量触发通信任务
    2、通信任务和AD采样任务关联的计算结果可以使用消息队列传递计算结果
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-22 03:29 , Processed in 0.026200 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表