第3章       示波器设计—功能划分和准备工作

本章节主要为大家讲解示波器的系统框架设计。

3.1 功能划分

3.2 任务优先级安排

3.3 按分类封装各种变量

3.4 选择编译器最高等级优化

3.5 制作工程模板

3.6         总结

3.1  功能划分

示波器的实现大致可以分为模拟信号的采集,波形处理,波形刷新和测量值显示,波形的控制调节和波形的存储浏览。将这些功能的实现落实到实际硬件上,详情如下:

1、模拟信号采集

STM32自带3个独立的ADC,分别是ADC1,ADC2和ADC3。实现双通道示波器,我们需要用到两个ADC,另外一个ADC用于简易电压采集。实际的使用中由于要采样频率可调,需要配置成定时器触发。虽然每个通道最高速度只有2.4Msps的采样率(实际应用中是配置到2.8Msps),但是每秒的采集的数据高达4.8MB左右,所以还得配合DMA一起使用,大大降低CPU的负担。

2、波形处理

波形处理就是指FFT,FIR,RMS,平均值,最大值,最小值和峰峰值的计算,这个功能需要交给一个单独的任务去做。

3、波形刷新和测量值显示

这个功能通过emWin任务就可以实现。

4、波形的控制调节

由于需要按键和触摸都可以调节,所以单独安排一个任务。

5、波形的存储浏览

波形的浏览继续放在emWin任务里面实现,而波形的存储记录需要放在一个单独的文件系统任务里面。

下面通过框图将这几个功能做个规划:

上面是初步的功能划分,有了这些划分后,实际程序设计的时候就会方便很多,在这个基础上再进一步调整。具体任务之间的通信机制在我们实现了各个功能后再实现。

3.2   任务优先级安排

首先emWin任务一定要是除了空闲任务,统计任务以外最低优先级的,因为emWin极其占用系统资源,而且时间长,如果这个任务设置为高优先级,会直接影响低优先级任务的执行。

DSP任务一定要是优先级最高的,因为采集的数据要实时处理。

触摸和按键任务,以及文件系统任务的优先级谁高谁低都没有关系。

知识点拓展

关于任务优先级的安排,在我们RTX操作系统教程第8章的8.2小节有些拓展:

http://forum.armfly.com/forum.php?mod=viewthread&tid=14837。

同时在我们FreeRTOS操作系统教程的第13章的13.2小节有些拓展:

http://forum.armfly.com/forum.php?mod=viewthread&tid=17658。

3.3   按分类封装各种变量

示波器的设计需要很多变量进行逻辑管理,从设计之初就需要将变量分类进行结构体封装,方便以后的维护升级。这一步至关重要,实际中差不多要定义上百个变量,如果不进行分类管理,以后的升级维护将非常麻烦。

这种方式还有一个好处是方便我们将F429的CCM RAM空间分配给这些变量使用。使用CCM RAM的好处是速度比通用RAM要快些,缺点是这部分空间不支持DMA操作。初次使用的用户比较容易在这个地方犯错误。所以在使用局部变量时,切勿将局部变量用于DMA传输。

3.4  选择编译器最高等级优化

为了发挥STM32F429的最高性能,需要大家开启最高等级优化和时间优化,即下面两个选项:

Optimization选择Level 3最高优先等级,并且开启Optimize forTime时间优化。

知识点拓展

关于如何使用MDK实现代码最小优化和性能最佳优化可以看这个帖子中KEIL做的专题教程:

http://forum.armfly.com/forum.php?mod=viewthread&tid=1794。

3.5  制作工程模板

关于工程模板推荐如下三个例子:

1、V6-1016_STemWin提高篇实验_WAV,MP3软解播放器,带类似千千静听频谱(uCOS-III)

这个例子包含了uCOS-III + STemWin +FatFS。

2、V6-1017_STemWin提高篇实验_WAV,MP3软解播放器,带类似千千静听频谱(FreeRTOS)

这个例子包含了FreeRTOS + STemWin +FatFS。

3、V6-1018_STemWin提高篇实验_视频播放器(RTX版本,仅支持MDK4.74)

这个例子包含了RTX + emWin +RL-FlashFS。

当然,这三个只是推荐的,大家实际制作不必限制。也可以自己新建一个工程,但要包含RTOS,GUI和FS。另外这三个例程中原有的功能删掉即可,仅留下程序模板。整理好模板后,开启MDK的最高等级优化3和时间优化,测试系统是否正常运行。测试正常后就可以作为模板了。

知识点拓展

工程模板推荐例子的下载地址:

http://forum.armfly.com/forum.php?mod=viewthread&tid=23687 。

3.6  总结

工程设计初期的任务划分,任务优先级安排以及变量的统一管理还是比较重要的,这样各个任务可以在一个合理的框架下工作。不过设计的不好也没有关系,随着各个任务功能的实现,逐步修改完善即可。

【二代示波器教程】第3章 示波器设计—功能划分和准备工作相关推荐

  1. mySQL教程 第1章 数据库设计

    E-R设计 很多同学在学SQL语句时,觉得非常困难,那是因为你在学一个你根本不了解的数据库,数据库中的表不是你设计的,表与表之间的关系你不明白.因此在学SQL语句之前,先介绍一下数据库设计. 下面举例 ...

  2. 【二代示波器教程】第12章 示波器设计—DAC信号发生器的实现

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第12章      示波器设计-DAC信号发生器的实现 ...

  3. 【二代示波器教程】第10章 示波器设计—数字信号处理

    完整教程下载地址:https://www.armbbs.cn/forum.php?mod=viewthread&tid=45785 第10章      示波器设计-数字信号处理 本章节为大家讲 ...

  4. 【二代示波器教程】第5章 示波器设计—波形快速刷新方案

    完整教程下载地址: https://www.armbbs.cn/forum.php?mod=viewthread&tid=45785 第5章        示波器设计-波形快速刷新方案 本章节 ...

  5. 【安富莱二代示波器教程】第8章 示波器设计—测量功能

    第8章        示波器设计-测量功能 二代示波器测量功能实现比较简单,使用2D函数绘制即可.不过也专门开辟一个章节,为大家做一个简单的说明,方便理解. 8.1    水平测量功能 8.2    ...

  6. 【二代示波器教程】第1章 示波器基础知识

    教程完整下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=45785 第1章 示波器基础知识 本章的内容整理自网络,主要讲解示 ...

  7. BeagleBone Black快速入门教程第1章嵌入式Linux之于Maker们

    BeagleBone Black快速入门教程第1章嵌入式Linux之于Maker们 Maker的中文含义类似"创客".创客是指一群酷爱科技.热衷实践的人群,他们以分享技术.交流思想 ...

  8. ArduinoYun快速入门教程第1章ArduinoYun概览

    ArduinoYun快速入门教程第1章ArduinoYun概览 本章是全书的开篇,在本章笔者将把Arduino以及Yun的方方面面介绍给大家.其中包括Arduino这个术语的解释.Yun相对其他开发板 ...

  9. 基于Android设备的Kali Linux渗透测试教程第1章渗透测试

    基于Android设备的Kali Linux渗透测试教程第1章渗透测试 渗透测试(Penetration Testing)是一种通过模拟攻击者所采用的技术与方法,攻击目标系统的安全控制措施,并取得访问 ...

最新文章

  1. 标题1100: 简略计算器
  2. js 算法排序总结
  3. php两段音频合成一个,两段音乐合并 如何将两段音乐合并成一个音乐文件
  4. vue 导入excel解析_【Vue 笔记】Vue 读取excel数据并生成数组
  5. 7个管理和优化网站资源的 Python 工具
  6. POJ - 1011 Sticks(dfs+剪枝)(好题!!)
  7. All in Linux:一个算法工程师的IDE断奶之路
  8. 王者体验服服务器注册人数已满,王者官方大厅奖励有多难获得?服务器直接崩溃,玩家:别发红包了...
  9. linux检查哪些进程消耗io,Linux 不同方法查看进程消耗CPU IO 等
  10. [na]思科产品选型pdf
  11. Ds918 ds3615 ds3617区别_苹果12手机用什么卡 大卡和小卡的区别介绍
  12. 金融科技大数据产品推荐:金蜂巢大数据集成与脱敏系统
  13. HighCharts柱状图显示百分比
  14. Unbuntu22.04安装教程以及Unbuntu下C++环境的配置
  15. android imageview topcrop,android照相选择图库后将照片剪裁压缩显示到imageview上
  16. c语言中百分号lf是什么意思,digit_C语言 digit是什么意思
  17. 小程序入口传参:关于带参数的小程序扫码进入的方法
  18. java 异常提示_Java显示异常信息与异常分类
  19. 【MobileNet V2】《MobileNetV2:Inverted Residuals and Linear Bottlenecks》
  20. win7总是显示加载计算机,win7系统打开“此电脑”很慢总是在加载不显示的具体办法...

热门文章

  1. 3.4 网页开发工具
  2. 2020计算机科学第五轮评估,第五轮学科评估启动,这些非“双一流”建设高校可能获得A+学科...
  3. SASAdvance认证考试要点
  4. 多台网络分析仪自动化测试软件NSAT-1000
  5. 小米8手机相册中的图片怎么识别文字?
  6. 网站域名过户查询_域名知识问答之域名过户
  7. 黑马程序员--一个初中没毕业的苦逼,到8.5k的程序人生,感谢黑马
  8. leetcode (Longest Harmonious Subsequence)
  9. 服务器下多网站设置,网站配置多个服务器
  10. 写 Python 爬虫的助手