https://zh.wikipedia.org/zh-cn/%E9%96%8B%E6%BA%90%E7%A1%AC%E4%BB%B6
微程序是直接控制硬件的,而其硬件的并行性日益增强。因此,微指令的构成一般远比机器指令复杂,微操作的并行性甚至可能比多处理机的并行性还复杂,而且不同机器的并行状况又差别较大,这就使得微指令码的生成比高级语言程序的代码生成复杂得多。
微程序汇编语言 微程序设计语言迄今主要仍使用微程序汇编语言。当然,所用的都是交叉汇编而且汇编系统几乎都用高级语言编写。为了采用微程序汇编语言,微程序设计者必须按复杂且并行性强的微程序硬件的具体细节来设计,生产率很低。因此,为扩大微程序应用领域和提高微程序设计效率必须发展微程序高级语言。
与微程序硬件有关的信息应使用与机器无关的微程序高级语言来说明和描述。如何识别并在编译过程的哪一个阶段把微程序高级语言程序中的操作,或一串操作映射到相应微程序硬件资源中,是设计微程序设计语言及其编译系统的关键。
微程序高级语言尚处于初步探索阶段,按某一种机器设计的微程序高级语言程序还很难运用于另一种机器。因此,研究微程序设计语言的最主要目的是提高微程序设计的效率和生产率。
用户对问题“编写固件:汇编还是高级?”的回答 - 问答 - 云+社区 - 腾讯云
大多数微控制器制造商提供了某种类型的交叉编译器,您可以在PC上编译代码,然后将其传输到微控制器。
为什么选择C?
C的一个优点是,将来你的代码将更容易移植到其他微控制器上。计算的历史表明,代码通常比硬件实现更持久。
第二个优点是控制结构(if、for、while),它使代码更具可读性和可维护性。
为什么选择汇编语言?
你可以手工优化。
Verdict
就像这类问题的常见情况一样,权衡很大程度上取决于特定的用途。
请注意,通常可以通过在C代码中进行汇编调用来混合这两者,这样您就可以找到适合您的项目的平衡点。
特定于PIC硬件的
它的seems,你没有选择的选择与大多数的太平洋投资公司的硬件。另一方面,正如一位评论者所指出的那样,针对16位PIC24和dsPIC33的Microchip C30编译器是gcc。
SDCC也还不支持PIC。
新信息:根据一条评论,SDCC对PIC.有可行的支持
还有其他一些开源options,但我没有使用它们的经验。
固件加固是通过对ELF二进制文件进行多个维度的加固处理,提升物联网设备固件的安全水位,以对抗逆向工程与漏洞利用。固件加固主要是由C、C++等高级语言编译出的Linux平台下的ELF程序,如静态库、动态库、可执行文件(.o
,.so
,.bin
等)。
背景信息
固件加固不依赖于开发环境和源代码,在黑盒场景下,以无agent、无SDK、无引入、零成本的方式,以少量性能损失及代码膨胀为代价,为核心代码和敏感数据提供保护。
适用范围
不管我们使用什么操作系统,无论是 Windows、macOS 还是 Linux ,里面都安装了许多软件、驱动程序和固件。但是,这三者概念有区别呢?
我在朋友圈做了个小调查,发现居然很多人不清楚他们的关系,因此写下此文来给大家做个简单的科普。
文字描述太抽象了,我们直接来看漫画吧。
好了,看完漫画,我们再来看正规的解释是怎样的。
简单来讲,固件、驱动程序和软件之间的根本区别在于它们的设计目的。
- 固件是赋予设备硬件生命的程序
- 驱动程序是操作系统和硬件组件之间的中间人
- 软件可以间接操作硬件
1. 固件
固件(Firmware)就是写入 ROM (只读存储器)中的程序,固件担任着一个系统最基础最底层工作,直接控制硬件,比如计算机上电后第一个启动的程序 BIOS ,它可以与硬件交互,并检查它是否有任何错误。
BIOS 调用另一个称为引导加载程序的程序,该程序执行唤醒在硬盘驱动器内休眠的操作系统并将其放入随机存取存储器 (RAM) 的工作。
我们可以在许多设备上看到固件,包括计算机、手机、遥控器、游戏机、智能手表、USB 驱动器和各种嵌入式系统。即使是电视遥控器也有一个预装的固件,可以实现你按下按钮的时候电视换台操作。
2. 驱动
驱动(Drive):驱动程序即添加到操作系统中的一小块代码,其中包含有关硬件设备的信息。当计算机程序请求与某个硬件设备交互时,设备驱动程序充当硬件设备与使用它的程序之间指令的转换器。
操作系统并不支持机器上的所有硬件,所以一般来讲硬件厂商都要为自己的硬件编写驱动程序。
每个驱动程序都旨在为特定或一组设备工作。在计算机上,驱动程序使用各种总线接口来联系设备。此外,驱动程序一般不直接与用户交互,所以很多用户完全不知道它们的存在。
驱动程序的开发需要非常小心,因为它直接与硬件打交道,同时也与操作系统打交道。如果设备驱动程序出现问题,可能会导致系统崩溃,这就是为什么需要专业人员或团队来为设备编写驱动程序的原因。
但是为什么不把 Firmware 做的很完美,做的不需要驱动支持呢?因为有不同的操作系统,而这些操作系统对于操作硬件的方式完全不同。所以不同操作系统的驱动是不能兼容的,原因就是驱动是为操作系统服务的。
3. 软件
与硬件不同,软件是运行在电脑里,看不见摸不着。
操作系统也是一个软件,并且为安装在操作系统上的其他软件提供了工作空间。前面提到的设备驱动程序其实也是一种软件,不过它有个更细分的种类,称为系统软件。
如果用户编写了一个软件,想要操作硬件(比如光驱、U盘等),他必须通过操作系统提供的接口来实现,而无法直接与硬件交互。
值得注意的一点是,软件是一个广义的术语。我们在日常使用中所说的「软件」一般是指应用软件,比如:微信,QQ,浏览器等等。
还有什么不明白的,欢迎评论区交流哦~