其实。。也不完全是直接操控外设(bios级别编程除外)。越往底层看越发现系统参杂的东西越多,POSIX之类的。
不同的单片机都不一样的
比方说输出就不是1和0那么简单
还有开放集电极 悬浮 上拉 复用等变化
那些高速的i2c i2s HSPI PWM ow
也不能前靠c自己模拟电平变化的
虽然都是c语言
但是一般不能靠通用开发平台
都有自己独特性
甚至有些开发平台c语言本身也有变化
其次开发都靠库
那更不同
不一定有什么stdlib
printf更不见得有
而且单片机大多都RAM小ROM小flash小
连复杂点运算都未必够地方放
同样保存数据吧
普通c你爱写几位就写几位
单片机最好凑够扇区再写
读也一样
得不同的思考模式
你一个位一个位写也不是不行
甚至也有函数给你用
但是你这么干flash的寿命很快到头
总之
挺头疼的
抽象程度不同,如果你自己编写操作系统就会发现了,一切都是从0开始,你得自己控制外设,然后把这些控制代码封装好提供给上一层接口。不过在PC机上,就算自己编写OS,也接触不到太多寄存器,基本上BIOS内部的硬件控制代码包办了好多,你只需要调用函数就行。
同样,MCU也是如此,没有OS的话,没有库的话,你自己首先要写好外设驱动函数,比如配置IO口,寄存器啥的,然后把这些硬件级操作封装,随后开始写外设的软件协议层,怎么建立通信,怎么开始通信,具体就是通过配置好的IO口收发特定序列,然后封装。最后可能还有一层,实现调用一个函数就可以传输或者接受指定数据。就是由下到上,层层封装,层层抽象,最后展现在编程者的眼中可能就是调用了一个上层函数就干完了一件事,实际上,由上到下的过程极其复杂,对于PC机来说更是如此。
你可以下载STM32的HAL库源码,一级一级向下分析就知道了,代码的分层结构很神奇。
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。