嵌入式开发中C语言编程要点简述!

在嵌入式Linux的C语言开发中,C语言的基本编程依然是最重要的内容。除此之外,与一般的C语言编程相比,嵌入式Linux的C语言编程有以下一些要点:

1、库函数与系统调用

在进行C语言编程的时候,使用库函数是不可避免的。关于使用库函数的最简单的例子就是printf()。

在Linux环境下的C语言编程中,库函数包括两个部分:一种是C语言的标准库函数,例如包含srting.h头文件的字符处理函数、包含stdio.h头文件的标准输入/输出函数、包含math.h头文件的数学函数等;另一种是UNIX和Linux特定的库函数,例如UNIX特定的文件操作函数、权限处理函数以及特定的系统调用等。

类似其它的UNIX系统,Linux的很多库函数是通过系统调用完成的。库函数依然通过包含标准C语言头文件的方式使用,在库函数实现中使用Linux的系统调用完成。在嵌入式Linux中,很多标准的C语言库函数需要考虑系统特定的情况。

例如printf()的功能是将内容打印到标准的输出。在通用的计算机中,标准的输出一般默认是显示器。但是在嵌入式的系统中,标准的输出是不确定的,可能是某种显示设备(比如显示器),也可能是串口等。这些与嵌入式Linux操作系统内核的配置有关。

2、C语言高级应用

目前,计算机技术高速发展,各种编程语言发展迅速。各种高级语言有着各自的优势:C 具有完全面向对象的特点以及非常全面的功能;Java具有与平台无关的特性;C#借助微软的强力支持,前景也非常广阔;各种脚本语言则有着无需编译、简单易懂等特点。

与上诉语言相比,C语言是一种面向过程的语言,介于高级语言与低级语言之间。确切地说,在通用计算机应用层的软件开发部分,C语言与各种高级语言相比没有优势。这是由于各种高级语言不但适合复杂应用逻辑的组织和实现,而且提供了更好的编程环境和应用程序接口。开发者使用高级语言可以快速、高效地开发出各种的应用程序。

C语言的优势在于它有着高效地运行效率,因此虽然在应用程序的开发领域C语言并不占优势,但是在嵌入式Linux的开发中,C语言却占据主导的地位。

事实上,C语言的一些高级技术,在嵌入式Linux的开发中得到很好的发挥和使用。这些技术让C语言这种面向过程、与硬件联系紧密的计算机语言可以完成更复杂的逻辑组织功能。这对于非常重视效率,而又具有特定程序逻辑的嵌入式系统是非常重要的。

3、嵌入式系统开发中C语言特殊语法

在嵌入式的C语言编程中,所使用的语言依然在C语言的范畴内,但是一些用法和传统的C语言编程有一定的差别。

这些特殊的语法包括:使用C语言对目标硬件寄存器的操作问题;不同体系的处理器的大写端问题;内存操作的对齐问题;程序中绝对内存地址的跳转等。

4、嵌入式系统开发中C语言编程的要点

在嵌入式系统中,由于资源非常有限,对程序运行效率的要求比较高。因此,一些在通用计算机系统中不用考虑的性能问题,在嵌入式系统中都需要考虑。在嵌入式开发中,性能是一个核心的问题,也是C语言编程的要点所在。

对于一种程序实现的评价,主要可以从两个方面考虑,一个方面是程序运行的效率,另一个是程序需要的存储器空间。对于前者,主要是指程序运行所需要的处理器空间,与占用系统处理器地时间有关;对于后者,包括程序存储所占用的空间和程序运行所占用的空间,与占用系统ROM和RAM大小有关。由于C语言自身的性质,也使其在嵌入式开发的性能优化以及调试方面具有独特的方法。

声明:

本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/338362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java编译源文件_在java编程中用什么命令来编译java源文件 可以将源文件编译成字节码文件,求答案 。...

展开全部答案如下:1 、javac 选 A2、 int 选 D int 为关键字3、 4 选 B4、 15 选C5 、界面类型 选D6 、age[0] 选B7、 class 选A8 、java B9、 abstract 选B10 、false 选D1、 错,区分大小写2、 对3 、错e68a843231313335323631343130323136353331333365…

jdk8分组统计字段和_JDK 8流和分组

jdk8分组统计字段和我在JDK 8中的Stream-Powered Collections Functionality中介绍了将JDK 8的Streams与Java集合一起使用的强大功能。 我没有在那篇文章中讨论groupingBy Collector 减少操作的使用,因此在这篇文章中解决了分组问题。 本文中的示例将演示如何将集合…

C语言中,break和continue都是跳出循环,有啥区别?

首先说明:continue 只能用于循环语句中,而break可用于循环和 switch 语句,两者都是辅助循环;尽管如此,如果 switch 语句在一个循环中,continue便可作为 switch 语句的一部分;这种情况下&#xf…

java隐藏与覆盖_java中方法的隐藏和覆盖问题?

ok()方法在继承时候发生覆盖(重写)了吗?发生了。在子类B中的ok()方法拥有父类方法相同的方法名和参数列表(signature),所以在这里发生了重写。调用B类对象的ok()方法会print "b",父类方法被覆盖。如果是重写了,那定义一…

junit junit_使用junit做其他事情

junit junitjunit!单元测试 Junit是Java单元测试框架。 通常,我们将它用于单元测试,但是很多时候我们也使用它来执行集成测试。 主要区别在于,单元测试测试单个单元,而集成测试则测试不同类如何协同工作。 这样&#x…

C 的 3种内存顺序,你都知道吗?

1、std::memory_order_relaxed “自由”内存顺序在原子类型上的操作以自由序列执行,没有任何同步关系,仅对此操作要求原子性。例如,在某一线程中,先写入A,再写入B。但是在多核处理器中观测到的顺序可能是先写入B&#…

java面试问题你遇到的难题_在Java面试中常遇到的技术问题汇总

在Java面试中常遇到的技术问题汇总 如果你正准备参加Java开发岗位面试,那么你会遇到很多有关多线程的面试问题。为什么呢?因为多线程和并发问题已经成为Java面试中必不可少的一部分。大多数企业在面试的时候都喜欢用棘手的Java线程面试题来考察面试者,他们希望确保面试者对J…

在邮件标头中找到无效的字符_在实践中重试HTTP标头

在邮件标头中找到无效的字符Retry-After是鲜为人知的HTTP响应标头。 让我引用RFC 2616(HTTP 1.1规范)的相关部分: 14.37重试后 Retry-After响应标头字段可与503 ( 服务不可用 )响应一起使用,以指示请求客…

C 常见的面试知识点(上)

const 作用1,修饰变量,说明该变量不可以被改变2,修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer)3,修饰引用&…

brew下载的mysql卸载_Mac中mongoDB的安装与卸载步骤详解

前言MongoDB 是一个基于分布式文件存储的数据库,旨在为 web 应用提供可扩展的高性能数据存储解决方案。本文主要介绍的是关于在mac中安装卸载mongoDB数据库的方法,更多关于mongoDB的使用大家可以参考这篇文章:https://www.jb51.net/article/7…

java 指令重拍_我发现我的Java重拍了!

java 指令重拍在一月份,我写了一篇文章,介绍了一些我希望在Java语言中看到的变化,这些变化会让我更加喜欢它(并使它变得更现代)。 很多人建议使用许多JVM语言,但我很大程度上不予理会,因为这不是…

java post webservice_[java.webservice] 如何通过HttpPost从服务器上获得一个sessionid

javas Web Service is different from HttpPost, HttpGet and HttpResponse that kind of things. It is more easy to pass anything, any Object you like.如果要利用Web Service返回一个sessionid的话,可以使用从Server返回返回值的形式,也可以在Clie…

C 常见的面试知识点(下)

inline 内联函数的特征相当于把内联函数里面的内容写在调用内联函数处;相当于不用执行进入函数的步骤,直接执行函数体;相当于宏,却比宏多了类型检查,真正具有函数特性;编译器一般不内联包含循环、递归、swi…

php cdi_集成CDI和WebSockets

php cdi考虑尝试一个简单的Java EE 7原型应用程序,该应用程序涉及JAX-RS(REST),WebSockets和CDI。 注意 :不想让它成为破坏者-但本文主要讨论我在尝试使用Web套接字和使用CDI作为“胶水”(在Java EE应用程…

c语言排序方法有哪几种?

c语言排序方法有:1、简单选择排序,基于O(n2)时间复杂度的排序算法;2、冒泡排序;3、简单插入排序;4、希尔排序;5、归并排序,基于归并操作的一种排序算法;6、快…

java 类型不可视_jvm高级特性(5)(1)(原子性,可见性,有序性,volatile,概述)

简介:阿姆达尔定律(Amdahl):该定律通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。摩尔定律(Moore):该定律用于描述处理器晶体管数量与运行效率间的发展关系。当价格不变时,集成电路上可容纳的元器件的数…

工程模式和抽象工厂模式_功能工厂模式

工程模式和抽象工厂模式您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas相当满意,那么您只需阅读标题就可以做到这…

c语言怎么输入3个数输出最大值

方法:首先使用scanf()接收从键盘输入的三个数;然后使用“if else”语句比较三个数的大小,获得最大值;最后使用print()函数将最大值输出即可。c语言输入3个数输出最大值#include int main() { // 输入abc输出最大值 int a; …

java调用ecdh_椭圆曲线ECC ECDH原理 javacard实现

椭圆曲线原理:椭圆曲线的图像并不是椭圆形,椭圆曲线源自于求椭圆弧长的椭圆积分的反函数。定义:椭圆曲线可用下列方程来表示,其中a,b,c,d为系数。E: y2 ax3 bx2 cx d椭圆曲线运算:(相当于交换群)AB&#x…

C 常用新特性(上)

下面是正文:auto类型推导auto可以让编译器在编译器就推导出变量的类型,看代码:利用auto可以通过右边的类型推导出变量的类型。什么时候使用auto呢?简单类型其实没必要使用auto,然而某些复杂类型就有必要使用auto&#…