对单片机的一点理解

前言

大一时学过一段时间的51单片机,后面就一直研究STM32和算法,最近工作搞51单片机有半年了,有一些自己的想法,跟公司的工程师也探讨了一些,结合聊天记录,写了这篇博客,希望对读者有帮助。

有纰漏请指出,转载请说明。

学习交流请发邮件 1280253714@qq.com

对单片机的一点理解

问:单片机怎么选型

消费电子类的低端产品,公司对单片机的选型一般有两个原则,一是这款单片机用得熟不熟,这是最重要的,很多51单片机软件工程师都不会用32位机。还有一个是成本,一般都是秉承着能用就行,够用就好的原则,能用三毛钱的单片机绝对不会去用五毛钱的。低端产品对单片机的成本是很敏感的,因为硬件成本就是从这里抠出来的。

有些产品卖几千块钱用的单片机是几十块钱的,更高级的用海思、高通的芯片,那个是很贵的。在这个角度上看其实就没有太过意去扣这个成本,反倒是后续产品的拓展性可维护性,还有单片机的性能够不够强悍,后续开发过程中会不会出现说性能不够用的情况。还有这个单片机配套的开发工具也很重要,如果单片机是OTP的或者是不支持仿真的,在一些大型项目上开发起来就很吃力。

如果特别注重考虑功耗,那么在那种可穿戴设备用的会比较多。像是手环啊,心率监测仪啊,人工心脏。

问:为什么很多51单片机没法做大型项目呢?

其实在我看来,写代码并不是说为了完成一个功能就OK了。

还要考虑代码的规范性,可读性,后续的拓展性。

越是底层的代码,对硬件的操作就越为简单。就比如说51单片机,想要点个灯,那么只需要设置那个IO口为输出,同时输出高电平就可以了。

但是如果你有机会看到rtos或者linux的代码,它的点灯操作是非常复杂的,因为它要考虑可移植性和兼容性。高级的计算机语言,一般是学C++或Java时,会学到一种面向对象的编程思想,编程思想一般科班软件或者计算机才会去学,所以其实很多单片机软件工程师都是面向硬件编程,面向开发板编程,这就导致了一个问题,如果要上大型项目的话,会非常困难。

而且在消费级电子产品用的51单片机,他搞不了浮点运算,这个是一个跟32位单片机很重要的区别,因为很多算法都是需要硬件浮点运算来支持的,做不了浮点运算,意味着很多算法就没有实现的可能,那么写的程序也只能是那种比较简单的。

今天我搞了一个线性插值算法,用我自己的32单片机,很快就搞定了,但是我在公司用51单片机折腾了两个小时,后面还是没法实现,只能妥协,自己在excel里边把数值算出来。本来这个算的过程是可以交给单片机来实现的,在51这边就只能是手算,这个是一个很蠢的做法,但是没办法,硬件被限制住了。

你可以看到,很多51单片机工程师工作了那么多年,也只能做这些消费电子产品。大型项目,多个设备协同工作的情况就很难了。

问:高性能单片机能实现51单片机无法实现的什么功能

很多51单片机,外设无非就是定时器、外部中断、PWM、ADC、串口,这些都只能完成一些比较简单的功能。一般时钟也就是8M,外设的时钟也都是由这个高速时钟分频而来,顶多再加一个低速时钟用来计时。特别是中断往往只有一个入口,且没法定义中断优先级,那么实时性就无法保证。而且RAM顶多1K、FLASH顶多32K,这种情况下根本没法跑操作系统,最简单的操作系统最小内核可能都要16K了。

32位单片机的时钟树比较复杂,外设也多了很多,例如常用的I2C、I2S、SPI、DMA、SAI、SDIO、CAN、ETH等等,用上这些单片机外设的产品都是相对复杂的。

现在比较好的单片机其实已经能媲美数字信号处理器了,它硬件内置了DSP,不知道你有没有了解过快速傅里叶变换?频谱分析仪就是用这个来实现的,如果要用51单片机,那简直是天方夜谭 。

要是你了解过直流无刷电机的话,它的软件还是相对挺难的,因为他用到了PID,一般是串级PID,内环是速度环,外环是位置环,这个是要实时大量的浮点运算的,51单片机根本就做不来。51单片机基本上也就搞那些直流有刷电机了,就是给电就能转的那种,这种很明显的缺点是效率不高,而且完全没有控制精度可言。现在还有大量低端产品用的就是这种直流有刷电机,给电就转,转到哪个位置完全不清楚。

问:为什么51单片机工程师很难有长远的发展空间

51单片机没法做浮点运算,也不能做数字信号处理,所以很多大学相关知识都不需要用到。

如果是电子专业出身的话,通信原理,信号与系统、数字信号处理,经典控制论,学的这些知识通通都用不上。

哦,对了,还有一个很重要的,51单片机是没法搞无线通信的,通信原理的知识也可以还给老师了。

硬件层面上,做不了高速电路,很多消费电子产品的工程师应该都没接触过高速电路,电阻电容电感在高速电路的情况下,他不是那种纯粹的电阻电容电感,所以那些什么ESR、ESL应该也没什么人会去考虑,单片机的那一块,好像没有去考虑到通信串扰的问题。

用到51单片机的项目开发简单,并且往往并行项目很多,大量的时间精力都花费在重复性的产品中,做到后面都是体力活了,没有什么人去想过要把这些功能做到极致,去做好优化。

并且因为项目简单且重复,很多时候,有些程序都不怎么需要改,直接换一些参数就用到相近的产品中去了。很多单片机工程师都没有去考虑过程序的可移植性,是因为他们没有接触过大型项目,没有接触过需要整个团队来完成一个项目的情况,简单产品的软件通常都只需要一个工程师来完成,所以函数的接口也没去考虑过,规范性就更难说了。而且因为产品功能比较简单,定义的变量也比较少,不会去用到C语言中的高级用法,像是结构体、枚举、指针等等。甚至于有些单片机是不带C语言的,标准库的,memcpy、memset都不支持。所以即使是51单片机也是很简单的功能实现。

所以,51单片机软件工程师往往比较封闭,没什么机会去接触高级的单片机、工具链,也没什么机会去研究算法,所以其实很可怕,这种做个五年十年水平都不会差太多。

相关推荐
蓝斯49714 小时前
从.到实现一个Windows上的虚拟hid键盘设备
windows·单片机·计算机外设
熙芯XiChip14 小时前
硬实时与软实时RTOS核心区别
嵌入式硬件
伟大的前程15 小时前
unsigned int 定义的变量 在 电脑的 64 位系统中 和 32 位 cortex-m0 和 8 位的 51 单片机
单片机·嵌入式硬件
小渔村的拉线工15 小时前
1.HPM6E80 解析芯片整体工作原理和存储架构
单片机·嵌入式硬件·mcu·架构·hpm6e80
熙芯XiChip16 小时前
CAN与CANopen的本质区别
单片机
lilihewo16 小时前
Altium Designer 封装库的创建(分享pcb 3D封装库)
嵌入式硬件·51单片机
神罚天下ET17 小时前
典型arm位单片机启动流程(从上电到main.c)
c语言·arm开发·单片机
碧海银沙音频科技研究院18 小时前
蓝牙耳机使用WSDF5361锂保芯片进入船运模式实现方法
嵌入式硬件·算法
Zevalin爱灰灰19 小时前
模拟信号链电路——基于TL431的电压基准电路
单片机·嵌入式硬件
csdn杰哥19 小时前
瑞萨单片机开发教程[二十七] DTC 外部中断触发传输实验
单片机·嵌入式硬件·mongodb·瑞萨·ra6m5