文号
870626
阅读
10629
回复
4
收藏
4
原来电脑C和单片机C也差不多!
2020/02/05
IP:海南

又研究了一下电脑C语言,发现和单片机C语言差异不大,单片机控制IO口,电脑控制键盘输入和显示器输出,两者核心程序思维基本一样,不同点就是输入输出,单片机直接控制IO口高低电平,电脑控制系统包装好的函数,从而控制键盘和显示器等外设!

193214str6hr1yy9y88l0n.png

193251i6llfw25jd08l206.png


[ 修改于6年9个月前 - 2020/02/05 14:55:19 ]
6年9个月前IP:江苏
870627
1楼

其实。。也不完全是直接操控外设(bios级别编程除外)。越往底层看越发现系统参杂的东西越多,POSIX之类的。

引用
评论
6年9个月前IP:上海
870630
2楼

不同的单片机都不一样的

比方说输出就不是1和0那么简单

还有开放集电极 悬浮 上拉 复用等变化

那些高速的i2c i2s HSPI PWM ow

也不能前靠c自己模拟电平变化的

虽然都是c语言

但是一般不能靠通用开发平台

都有自己独特性

甚至有些开发平台c语言本身也有变化

其次开发都靠库

那更不同

不一定有什么stdlib

printf更不见得有

而且单片机大多都RAM小ROM小flash小

连复杂点运算都未必够地方放

同样保存数据吧

普通c你爱写几位就写几位

单片机最好凑够扇区再写

读也一样

得不同的思考模式

你一个位一个位写也不是不行

甚至也有函数给你用

但是你这么干flash的寿命很快到头

总之

挺头疼的



引用
评论
6年9个月前IP:海南
870662
3楼

抽象程度不同,如果你自己编写操作系统就会发现了,一切都是从0开始,你得自己控制外设,然后把这些控制代码封装好提供给上一层接口。不过在PC机上,就算自己编写OS,也接触不到太多寄存器,基本上BIOS内部的硬件控制代码包办了好多,你只需要调用函数就行。

同样,MCU也是如此,没有OS的话,没有库的话,你自己首先要写好外设驱动函数,比如配置IO口,寄存器啥的,然后把这些硬件级操作封装,随后开始写外设的软件协议层,怎么建立通信,怎么开始通信,具体就是通过配置好的IO口收发特定序列,然后封装。最后可能还有一层,实现调用一个函数就可以传输或者接受指定数据。就是由下到上,层层封装,层层抽象,最后展现在编程者的眼中可能就是调用了一个上层函数就干完了一件事,实际上,由上到下的过程极其复杂,对于PC机来说更是如此。

你可以下载STM32的HAL库源码,一级一级向下分析就知道了,代码的分层结构很神奇。

引用
评论
1
6年9个月前IP:广东
870673
4楼

主要的区别是MCU很多没有操作系统,内存管理要自己来,另外就是外设也要自己去驱动

引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的