完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我是 Freertos 的新手。我有一个关于两个线程的练习项目。一个线程用于AD7606的数据采集,另一个线程用于labview中uart的数据传输。不幸的是,当我在 LabVIEW 中显示从线程 2 获取的数据时,我发现它会丢失数据或采样率不一致。我该如何解决这个问题?
到目前为止,我不知道解决方案是否是 freertos 中的定时器中断。 请给我提示或一些我可以参考的教程。有需要请指教。 非常感谢你。
|
|
相关推荐
1个回答
|
|
AD7606 具有 SPI 或并行输出。我假设您正在以设定的时间间隔从 SPI 或 GPIO 引脚读取最近的转换。如果您需要精确的采样率,请根据您的间隔设置硬件 TIM 计时器,并使用 TIM 中断读取 GPIO 引脚,或启动 SPI 移位周期。
首先,如果要保证时延,你的采集任务必须运行在FreeRTOS配置的最高优先级。由于任务上下文开销和运行优先级高于 ADC 任务的任何任务,您仍然需要针对一些抖动进行调整。您没有提及哪些中断处于活动状态,或者您是否使用 AD7606 中断请求对 ADC 进行采样。软定时器必须考虑中断延迟(即 SYSTICK 或您用于 RTOS 时基的任何定时器)。中断服务例程中的回调(ST 程序员的最爱)可能是低延迟的杀手。 另请记住,在 daq 任务中读取 ADC 样本所花费的时间会影响您的时间间隔。如果您有自旋锁(即持续轮询状态标志),您的获取时间可能是不确定的(即不可预测的)。 如果您使用的是 FreeRTOS V9 或更高版本,您可能希望查看任务通知而不是常规信号量。只要仅在两个任务之间,通知就需要较少的处理时间。 您的信号量被配置为互斥锁(互斥),但这似乎不是必需的。输出队列本身可以起到同步两个任务的作用。将您的 MyQueue 大小设置为 8(您的主机)消息大小?_并将 xQueueSend 延迟设置为零。这将丢弃到达太快而无法在每个间隔速率 8 个样本的一条输出消息中发送的样本。您不需要在输出任务中调用任何 osDelay,因为它是由队列中样本的到达驱动的事件。假设 daq 任务以正确的速率采样,您的输出消息将完全填满输出队列。 这还假设输出消息从队列中读取样本的速度快于转换率(如果速度不快,您将遇到溢出情况)。如果您将 MyQueue 限制为样本的一个主机消息大小,您可以抢占较慢的输出任务并转换新样本,同时仍在处理先前的样本集。搜索流数据的“双缓冲区”概念,因为它是处理您的要求的常用方法。 如果您的输出队列增长速度快于您向主机发送数据的速度,会发生什么情况?看来您的采集任务最终将在您的采样间隔之外的很长一段时间内被阻止。您将在丢失数据的主机上遇到周期性的丢失。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
1960 浏览 1 评论
2681 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1558 浏览 1 评论
3121 浏览 6 评论
5557 浏览 21 评论
533浏览 4评论
945浏览 4评论
在Linux上安装Atollic TRUEStudio的步骤有哪些呢?
349浏览 3评论
使用DMA激活某些外设会以导致外设无法工作的方式生成代码是怎么回事
913浏览 3评论
869浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-26 21:39 , Processed in 1.826992 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号