ADC读取数据进入死循环

news2024/7/6 18:39:48

结论优先:程序并发处理不当引起寄存器标志位被非预期清除,引起进入死循环。

现象:在进行AD读取数据时,有一个等待ADC转换完成的标志位,概率性卡死在while等待ADC数据转换完成。

static err_t gd32_adc_read(struct drv_adc_device *dev, int16_t channel,
                           uint32_t *buf, size_t size) 
{
  struct gd32_adc *adc = (struct gd32_adc *)(dev->private_data);
  uint32_t adc_periph = (uint32_t)(adc->adc_periph);

  if (buf == NULL) 
  {
    return -E_INVAL;
  }

  adc_channel_length_config(adc_periph, ADC_REGULAR_CHANNEL, 1);
  adc_regular_channel_config(adc_periph, 0, channel, ADC_SAMPLETIME_239POINT5);

  for (size_t i = 0; i < size; i++) 
  {
    adc_software_trigger_enable(adc_periph, ADC_REGULAR_CHANNEL);

    gd32_udelay(2);

    while (!adc_flag_get(adc_periph, ADC_FLAG_EOC))
      ;
    adc_flag_clear(adc_periph, ADC_FLAG_EOC);

    buf[i] = (uint16_t)adc_regular_data_read(adc_periph);
  }

  return size;
}

在不同任务中都有调用获取AD数据的操作,死循环出现时定位到在while (!adc_flag_get(adc_periph, ADC_FLAG_EOC))处

一开始推测问题出现方向:

1. 函数参数传递异常

2. 寄存器的置位异常(硬件动作)

验证1:仿真时定位到问题现场,传参正确,可排除

验证2:手动置起转换完成标志位,不复现,但暂无法证明硬件置位异常(首先还是从自身找问题)

想到一个读取AD的动作发生在硬件定时器超时回调里,中断优先级高于任务执行,可能出现在任务正在读取AD数据中,来了硬件定时器中断,读取过程被打断,此时中断中读取完成把转换完成标志位清除,退出中断回调,继续执行任务读取,此时一直等不到标志被置起。

这里存在设计缺陷,我们移出在中断里读取AD操作(中断不做耗时,延时操作),同时同一个ADC控制器,应该作为临界资源互斥访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136995.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytorch入门实例的分解写法

数据集是受教育年限和收入,如下图 代码如下 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pddata pd.read_csv(./Income.csv)X torch.from_numpy(data.Education.values.reshape(-1,1).astype(np.float32)) Y torch.from_numpy(data…

python 查找波峰和波谷

import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks# 生成示例信号 x np.array([1, 3, 7, 1, 2, 6, 0, 4, 3, 2, 5, 1])# 寻找波峰 peaks, _ find_peaks(x)# 寻找波谷&#xff08;使用信号的负数形式&#xff09; valleys, _ find_pe…

炒冷饭、语雀崩、领会员-我最主观的一段文字

目录 什么是语雀 语雀&#xff0c;为每一个人提供优秀的文档和知识库工具。 作为一个程序员来说&#xff0c;我们需要一块位置去存储我们正在学习的技术、过往踩过的坑以及正在做的事情&#xff0c;如果我们需要记录每天的TO-DO List&#xff0c;或者需要按照四象限工作法亦或…

瑞虎9:外观够虎,内饰够豪,起售价15.29万

随着更多家庭习惯了全家自驾出行&#xff0c;国内消费者对SUV车型越来越感兴趣。随着生活水平的提高和旅游观念的普及&#xff0c;家庭出行已成为人们生活中的常态。每个家庭成员都希望在出行时能够享受到舒适的感觉&#xff0c;这成为购车时的重要考虑因素。因此&#xff0c;车…

码住!双11支付宝小程序云云市集,享骨折优惠最强购物清单,抽奖赢iPhone 15 Pro!

活动介绍 一年一度的双11狂欢即将拉开序幕&#xff01; 如今的双11不仅是清空购物车的年度盛宴 对于个人开发者和企业来说 也是采购云产品的绝佳时机&#xff01; 今年有什么需要抄作业的购物清单呢&#xff1f; 支付宝小程序云的首次大规模促销活动必须码住&#xff01…

C++初阶(六)类和对象

文章目录 一、 拷贝构造函数1、概念2、特性 二、 赋值运算符重载1、运算符重载2、赋值运算符重载1、赋值运算符重载格式2、 赋值运算符只能重载成类的成员函数不能重载成全局函数3、 用户没有显式实现时&#xff0c;编译器会生成一个默认赋值运算符重载&#xff0c;以值的方式逐…

[ROS系列]ORB_SLAM3错误版本(仅记录)

背景&#xff1a; 1、设备&#xff1a;pc&#xff1b;旭日派x3&#xff08;后续会加上&#xff0c;目前只有pc&#xff09; 2、环境&#xff1a;Ubuntu20.04&#xff1b;ROS2&#xff08;Foxy&#xff09;​​​​​​​ ros2机器人foxy版用笔记本摄像头跑单目orb_slam3-CSD…

142.环形链表

环形链表问题是链表中的经典问题&#xff0c;接下来是142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 的描述和详解 。 题目描述&#xff1a; 题目分析&#xff1a; situation1:当链表没有环形结构时&#xff0c;返回空&#xff1a; situation2&#xff1a;当链…

【html】图片多矩形框裁剪

说明 由于项目中需要对一个图片进行多选择框进行裁剪&#xff0c;所以特写当前的示例代码。 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><base href"/"><title>图片裁剪</tit…

【广州华锐互动】智能家居设计3D虚拟还原系统

随着科技的飞速发展&#xff0c;人们对家居生活的需求也在不断提高。智能家居作为一种新兴的生活方式&#xff0c;正逐渐成为现代人追求的理想居住环境。而智能家居设计3D虚拟还原系统&#xff0c;正是为了让人们更好地了解和体验智能家居带来的便捷与舒适&#xff0c;让未来生…

Latex笔记

1. Section 编号方式(数字、字母、罗马)&计数器计数形式修改 IEEE模板中Section的编号是罗马数字&#xff0c;要是改投其他刊物的话可能得用阿拉伯数字&#xff0c;所以可以在导言部分做如下修改&#xff08;放在导言区宏包调用之后&#xff09;&#xff1a; \renewcomma…

AMD大规模裁员15%? 赔偿N+7?官方回应来了 | 百能云芯

近日&#xff0c;美国芯片大厂AMD遭传出在中国进行大规模裁员15%的消息&#xff0c;引发网友关注。 对此&#xff0c;AMD官方26日回应称&#xff0c;「网络传闻失实」&#xff0c;该公司并没有进行大规模裁员。 相反地&#xff0c;AMD是进行的「小幅度」的组织架构优化和重组&a…

使用node创建Web服务

创建Web服务 基于 Node.js 环境&#xff0c;使用内置 http 模块&#xff0c;创建 Web 服务程序 需求&#xff1a;引入 http 模块&#xff0c;使用相关语法&#xff0c;创建 Web 服务程序&#xff0c;响应返回给请求方一句提示 ‘hello&#xff0c;world’ 步骤&#xff1a; 引…

高速电路设计----第三章(3)LVPECL、CML逻辑电平详解

一、LVPECL介绍 LVPECL是ECL电平的正电源、低电压版本。 ECL电平是指发射极耦合逻辑&#xff08;Emitter Coupled Logic&#xff09;,与TTL相同&#xff0c;ECL的主体结构由三极管组成&#xff0c;不同的是 ECL内部的三极管工作在非饱和状态&#xff08;即截止或者放大状态&…

你能用原来的塞子保存你未喝完的葡萄酒吗?

这是一个工作日的晚上&#xff0c;你发现自己在商店的过道里寻找一瓶葡萄酒。在您的高贵探索中&#xff0c;您可能已经注意到了装饰在每个独特瓶子顶部的各种瓶盖&#xff0c;有些是软木塞&#xff0c;有些是一个简单的螺旋盖。在最终决定了一个有趣的外观黑皮诺葡萄酒带回家品…

python安装包失败 安装scipy包

最近在配深度学习环境&#xff0c;安装好了conda、CUDA、cuDNN&#xff0c;运行之后报错&#xff0c;没有scipy包。 试了很多方法&#xff1a; 用命令行pip、conda install 在pycharm下载包 在环境中添加包 都失败了 要么直接ERROR&#xff0c;要么超时 问了师兄 需要在conda环…

sys.dm_exec_requests中statement_start_offset与statement_end_offset

文章目录 1.缘起2.根因3.示例4.附录 1.缘起 mssql中查早阻塞与及其相关联的sql时&#xff0c;遇到如下内容&#xff0c;故记录一下&#xff0c; substring(dest_blocked.text,der.statement_start_offset/21,(case when der.statement_end_offset-1 then DATALENGTH(der.sta…

GZ035 5G组网与运维赛题第1套

2023年全国职业院校技能大赛 GZ035 5G组网与运维赛项(高职组) 赛题第1套 赛须知 1.竞赛内容分布 竞赛模块1--5G公共网络规划部署与开通(35分) 子任务1:5G公共网络部署与调试(15分) 子任务2:5G室内与室外站点建设(20分) 竞赛模块2--5G公共网络运维与优化(3…

【ETL工具】本地环境IDEA远程DEBUG调试Flume代码

&#x1f984; 个人主页——&#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01;&…

推开科研成果落地“最后一扇门”

科研成果只有落地了&#xff0c;才能发挥出它真正的价值。虽然中国近几年已经飞速发展&#xff0c;但是我们的自主创新能力依然比不了发达国家。而且&#xff0c;尽管科研成果在理论和实践上已经取得了很大的进展&#xff0c;但如何将其落地到实际生产中仍然存在很多问题。其中…