打印
[经验分享]

嵌入式C语言和C语言的区别

[复制链接]
1733|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
primojones|  楼主 | 2024-2-19 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

最广泛使用的系统编程语言是C语言,它是使用自由格式源代码的简单编程语言;它曾用于以前用汇编语言构建的应用程序中。嵌入式C是C语言的扩展,它在嵌入式系统中应用于编写嵌入式软件。

一、启动过程

1)通用c语言程序的启动过程

普通c语言启动程序搭载了windows或linux等通用操作系统的PC机,编译器会自动完成启动程序,对微处理器和外围设备进行初始化,然后再调用main函数,用户没有必要制作自己的启动程序。



2)嵌入式c语言程序的启动过程

嵌入式c语言搭载微处理器,用于嵌入式系统的启动程序要能够对目标系统的硬件和数据进行初始化,因此,用户必须做特定的启动程序。一般情况下,在支持微处理器的编译器中会捆绑相应的启动程序,如下图:



二、存储空间的分配

存储器ROM和RAM

RAM:随机存取存储器(random access memory)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。
RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。
ROM:只读存储器。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变。1. 对于普通c程序,操作系统将程序和数据从外部存储设备载入RAM中运行。代码、数据、堆栈都在RAM中。2. 对于嵌入式c程序,因没有通用的操作系统,嵌入式系统必须先将代码设置到ROM中,将数据、堆栈设置到RAM中才可以运行。

三、对于硬件的访问



对于普通c语言而言,操作系统对计算机硬件设备进行操作,如控制声卡发出声音,控制显卡绘制图形等。
应用程序可以通知操作系统执行某个具体的动作,以便使应用程序间接的通过操作系统对硬件进行操作。
对于操作系统是怎样控制硬件设备的只需大致了解即可,此过程为应用程序对API调用的过程,这一过程称为系统调用,通过系统提供的接口函数就可以指挥操作系统来工作了。


嵌入式系统在访问硬件时,必须编写直接操作硬件的应用程序。


四、资源的限制

1.由于在嵌入式系统中使用小而耗电的组件,嵌入式系统具有有限的ROM和RAM以及较少的处理能力,因此在嵌入式C中编写程序时应该注意有限的资源。2.在C语言中,台式计算机可以访问系统操作系统,存储器等,可以利用所有计算机资源。


五、应用方向

1、C语言主要用于操作系统开发,以及系统底层开发。2、嵌入式C主要用于家电产品、消费电子有关的单片机开发。

使用特权

评论回复
沙发
mollylawrence| | 2024-3-4 12:43 | 只看该作者
标准C语言程序通常运行在通用的操作系统上,如Windows、Linux、macOS等,这类环境提供了丰富的API和系统服务。
嵌入式C语言程序运行在嵌入式系统环境中,这类系统可能没有操作系统,或者只有实时操作系统(RTOS),甚至可能是轻量级的操作系统内核。嵌入式系统通常直接控制底层硬件。

使用特权

评论回复
板凳
zerorobert| | 2024-3-4 12:55 | 只看该作者
嵌入式C语言通常内置了对特定硬件外设的支持,如定时器、中断、串口通信等,这些在标准C语言中可能需要通过外部库或驱动程序来实现。

使用特权

评论回复
地板
macpherson| | 2024-3-4 13:40 | 只看该作者
嵌入式C语言和C语言使用不同的编译器。嵌入式C语言的编译器通常针对特定的嵌入式处理器和硬件平台,而C语言的编译器通常针对通用的桌面或服务器处理器。

使用特权

评论回复
5
yeates333| | 2024-3-4 16:04 | 只看该作者
尽管嵌入式C语言和标准C语言在语法和核心特性上是相同的,但由于运行环境和目标平台的不同,嵌入式C语言编程更加关注资源约束、硬件交互和实时性问题。

使用特权

评论回复
6
tifmill| | 2024-3-5 14:27 | 只看该作者
嵌入式C语言通常使用专门为嵌入式系统设计的库和API,这些库和API通常针对特定的硬件平台和应用场景进行了优化。标准C语言则使用标准库,如C标准库(ANSI C库)和C++标准库。

使用特权

评论回复
7
modesty3jonah| | 2024-3-5 15:50 | 只看该作者
在嵌入式系统中,启动程序需要能够对目标系统的硬件和数据进行初始化,因此,用户必须编写特定的启动代码,而这在标准C语言中通常是由编译器自动完成的。

使用特权

评论回复
8
dspmana| | 2024-3-7 14:04 | 只看该作者
嵌入式C语言通常只包含有限的库函数,这些函数专门针对嵌入式系统中的特定硬件外设和功能。而C语言具有更丰富的库函数,提供了更多的通用功能和数据类型。

使用特权

评论回复
9
51xlf| | 2024-3-10 11:16 | 只看该作者
标准C语言的编译器面向的是PC架构的处理器,生成的代码可在对应的x86、x64等架构上运行。
嵌入式C语言的编译器则针对特定的嵌入式处理器架构,如ARM、MIPS、AVR等,生成的目标代码需能在这些架构上运行。

使用特权

评论回复
10
pixhw| | 2024-3-10 16:37 | 只看该作者
在嵌入式C语言中,内存管理和优化是非常重要的。嵌入式C语言通常使用静态内存分配和内存池等技术来管理内存。标准C语言则使用动态内存分配(如malloc和free)进行内存管理。

使用特权

评论回复
11
sesefadou| | 2024-3-10 22:51 | 只看该作者
嵌入式系统通常有更高的实时性要求,因此嵌入式C语言程序在设计时需要考虑如何满足严格的响应时间和任务调度需求。

使用特权

评论回复
12
dspmana| | 2024-3-11 20:53 | 只看该作者
系统通常需要对实时事件做出快速响应。因此,嵌入式C语言编程通常需要关注实时性问题,例如中断处理和实时任务调度。相比之下,C语言编程在实时性方面的要求较低。

使用特权

评论回复
13
plsbackup| | 2024-3-12 15:34 | 只看该作者
嵌入式C语言开发者通常需要直接操控硬件,如通过寄存器直接读写来控制外设、管理内存、进行中断处理等。

使用特权

评论回复
14
cashrwood| | 2024-3-15 14:56 | 只看该作者
C语言编程涉及到操作硬件,因此底层没有库函数调用,需要程序员自己编写操作硬件的函数。

使用特权

评论回复
15
pl202| | 2024-3-15 18:51 | 只看该作者
在编写嵌入式C语言程序时,开发者需要更加关注代码的效率和资源的使用。

使用特权

评论回复
16
maqianqu| | 2024-3-15 21:16 | 只看该作者
标准C语言程序通常不需要关心系统的启动过程,这部分工作由操作系统完成。
嵌入式C语言程序通常需要自行编写Bootloader或启动代码来初始化CPU、内存、外设,设置堆栈和全局变量,并加载主程序到内存中执行

使用特权

评论回复
17
yangxiaor520| | 2024-3-15 21:26 | 只看该作者
不存在嵌入式C语言这一语言,这个是讲应用场景。

使用特权

评论回复
18
primojones|  楼主 | 2024-3-15 22:10 | 只看该作者
标准C语言是一种通用编程语言,可以用于开发操作系统、数据库、桌面应用软件、Web应用程序等多种类型的基于桌面的应用程序。而嵌入式C语言主要用于嵌入式系统的开发,如汽车电子系统、智能家居设备、医疗器械等,这些系统通常对资源消耗、功耗和实时性有更高的要求。

使用特权

评论回复
19
eefas| | 2024-3-16 10:41 | 只看该作者
嵌入式C语言搭载微处理器,要求嵌入式系统的启动程序能对搭载微处理器的硬件平台和所需数据进行初始化操作。因此,进行嵌入式开发的程序员必须制作特定的启动程序。相比之下,PC机上的普通C语言编译器会自动完成启动过程,自动初始化CPU和外设,然后调用main函数,程序员无需制作自己的启动程序。

使用特权

评论回复
20
dspmana| | 2024-3-16 13:26 | 只看该作者
嵌入式C语言编程更注重程序的优化和效率,因为嵌入式系统的资源(如ROM和RAM)有限。而普通C语言编程通常是在操作系统之上进行,可以利用很多标准库函数,且分配的内存和处理器都是PC机的资源。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

1086

帖子

0

粉丝