嵌入式系统c语言编程该怎么学?

2024-08-12

嵌入式系统c语言编程该怎么学?(精选5篇)

1.嵌入式系统c语言编程该怎么学? 篇一

嵌入式系统编程规范

李红志

程序的可读性、可扩展性、可复用性、易维护性、语法是代码的入门,算法是代码的灵魂。

第1章 编程常见错误

1.1、语法错误

1、错用函数数据类型,比如abs(x),x可能为16bit的值,如果为16bit的值,给出32bit的值就会出错。

2、内存越界访问

内存越界访问有两种:一种是读越界,即读了不属于自己的数据,如果所读的内存地址是无效的,程度立刻就崩溃了。如果所读内存地址是有效的,在读的时 候不会出问题,但由于读到的数据是随机的,它会产生不可预料的后果。另外一种是写越界,又叫缓冲区溢出,所写入的数据对别人来说是随机的,它也会产生不可 预料的后果。

3、结构的成员顺序变化引发的错误

在初始化一个结构时,老手可能很少像新手那样老老实实的,一个成员一个成员的为结构初始化,而是采用快捷方式,如:

Struct s { int l;char* p;};int main(int argc, char* argv[]){ struct s s1 = {4, “abcd”};return 0;} 以上这种方式是非常危险的,原因在于你对结构的内存布局作了假设。如果这个结构是第三方提供的,他很可能调整结构中成员的相对位置。而这样的调整往 往不会在文档中说明,你自然很少去关注。如果调整的两个成员具有相同数据类型,编译时不会有任何警告,而程序的逻辑可能相距十万八千里了。

4、栈溢出。

我们在前面关于堆栈的一节讲过,在PC上,普通线程的栈空间也有十几M,通常够用了,定义大一点的临时变量不会有什么问题。

而在一些嵌入式中,线程的栈空间可能只5K大小,甚至小到只有256个字节。在这样的平台中,栈溢出是最常用的错误之一。

1.2、编译错误 1.3、链接错误

第2章 编程知识

关键字valotile的作用是告诉编译器,不要把变量优化到寄存器里。

第3章 编程规范

1.1 整体结构

1、必须包含的两个文件:

“#include “std_inc.h”” “#include “std_defs.h””

2、一个完整的project需要有程序说明文档

3、需要有变量宏定义函数说明文档,包含变量规则命名。

4、需要有程序流程图

5、需要有硬件测试报告

6、需要有程序修改记录

7、要有软件时间控制分析

1.2 编程规范

1、定义宏定义按照功能模块来区分;

2、枚举型定义当宏定义来处理;

3、程序和数据要分开;

4、格式上要对齐;

5、空行要规范;

6、中断中调用的变量,一定要分析在计算过程中别的地方赋值是不是有非本身意义的赋值;

7、变量的意义要清晰;

8、程序要分层设计; 9、1.3 注释规范

1、变量和宏定义都要在定义的时候注释一下,作用是什么,单位,放大倍数。

2、用“#”标记需要问别人、需要改进的地方。

3、用“$”标记如果硬件改变需要进行变化的地方。

4、用“// XX”。

5、每个函数上面都要写注释;

6、程序段内不要太多的注释,多的话影响程序的可读性;

1.4 变量命名

1、变量名用小写

2、宏定义用大写

1.5 不建议使用全局变量的原因:

(1)全局变量在程序的全部执行过程中都占用存储单元,而不是仅在需要时才开辟单元;

(2)它使函数的通用性降低了,因为函数在执行时依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件 中的变量同名时,就会出现问题,降低了程序的可靠性和通用性。在程序设计中,在划分模块时就要求模块的“内聚性”强、与其他模块的“耦合性”弱。即模块的功能要单一(不要把许多互不相干的功能放到一个模块中),与其他模块的相互影响要尽量少,而使用全局变量是不符合这个原则的。一般要求把C程序中的函数做成一个封闭体,除了可以通过“实参——形参”的渠道与外界发生联系外,没有其他渠道。这样的程序移植性好,可读性强。

(3)使用全局变量过多,会降低程序的清晰性,人们往往难以清楚地判断出每个瞬时各个外部变量的值。在各个函数执行时都可能改变外部变量的值,程序容易出错。因此要限制使用全局变量。

(4)如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。

说明:使用全局变量的作用是增加了函数间的数据联系的渠道。由于函数的调用只能带回一个返回值,因此有时可以利用全局变量增加与函数联系的渠道,从而到到一个以上的返回值。

第4章 2011-4-22:程序的矩阵化设计思想

适用于嵌入式软件设计,无操作系统,软件结构较复杂的情况。

1.6 定义

最小时延原则:软件设计过程中,在不影响其他性能的情况下,应该让数据的产生过程和使用过程之间的时延最小。

需控变量:软件运行过程中,需要控制计算顺序的全局变量。

非需控变量:软件运行过程中,不需要控制计算顺序的全局变量,比如从总线引发的中断中获取的信号。

优化矩阵:在设计函数执行顺序时,用于记录函数和函数输出变量的矩阵。1.7 软件结构的矩阵化

程序上的分层设计。层与层之间有接口。矩阵化设计。全局变量的作用范围要有设定,不能从上到下都是一种变量。分层设计后,才比较容易处理指令冲突的问题,因为指令被执行之前会有对几种指令进行判断的操作。模块化是矩阵化设计的基础,模块作为矩阵的cell,同一个层面的作为一个row,程序执行一次,就是从顶层到底层一次,只不过每次可能走的trace不同。这个trace就是程序真正运行了哪些模块。

程序应该是从模块化、发展到分层、再到矩阵。

环境识别、驾驶意图识别、干预退出预估、1.8 函数执行顺序的矩阵化

适用情况:系统信号较多,全局变量较多,在一个控制周期内,相互之间有计算先后要求。同一层次的函数较多。全局变量只在一个函数中被赋值,在多处被调用。

全局变量分为需控变量和非需控变量。

该方法是对某一层的函数进行执行顺序的设计 1.对每一个函数进行编号;

2.建立需控变量集:将每一个函数的输入全局变量和输出全局变量中的需控变量放进需控变量集。3.对需控变量集中的每个元素编号;

4.建立每个函数的输入需控变量集和输出需控变量集,变量集用需控变量集中元素编号表示;

5.逐个将函数添加至优化矩阵,每添加一个函数,调整优化矩阵,直到所有函数添加完成。得到每个函数的可存放域。

6.根据最小时延原则,调整每个函数到最优位置。7.输出可行的函数序列。第5章 编程经验

1.9 程序设计思想 控制时序的设计思想: 程序分层的设计思想: 程序的矩阵式设计思想; 变量的集中处理思想; 变量自衰减的处理思想;

估算变量的自衰减。估算变量时,由于只有满足估算条件才能进行估算,而估算条件不是持续成立的,所以只能在某些点进行估算。没有进行计算的地方,该变量就要随时间衰减,并且要给出一个health指标,表明这个被估算值的可信度。

干预退出预估的处理思想;

1.10 【2010-12-5】

1、能从CAN上获取的信号要从CAN上获取,比如发动机转速、发动机输出转矩、加速踏板位置(不知道还有用没了)、节气门开度(不知道还有用没了)、传动比(或者说档位)。

2、我觉得用115200,10ms传出100个byte没什么问题。这样的话,B+S的采集主要作用就在于同步一下压力,方向盘、横摆等信号用更高的频率采集,确认一下单片机的处理是否达到精度。

3、变量命名的规范化。全局变量中的temp,写成s32temp1,局部变量的temp,写成temp1s32.感觉不怎么好,但是总要区别一下的。

4、abs(x);的函数原型是int abs(int x)

5、尽量避免一个变量在不同程序段被幅值;

6、中断中用到的量,要小心在程序外会不会有非本身含义的短时间赋值;

7、一段代码尽量不要超过100行;

8、全局附着比局部复杂要复杂;

9、任何一段代码,要做到能用1句话描述;

10、【2011-7-4】

代码变成各种意义明确的节的优点:

1、高可靠性:每段很小,就更容易做到确认代码不会出问题,更能确认该段指令是千锤百炼的,绝对可靠的;

2、可维护性强:由于每段很小,很容易看懂,调试及修改都更方便;

3、可扩展性强:如果某一种计算有问题了,只用替换或修改某一小段,而不用到处找需要改哪些地方;

4、可复用性强:对某些小段,可能多个地方都可以用到,不用在不同的地方写很多次;

5、结构清晰:每一小段意义明确,程序结构、层次、调用关系、数据流等都更清晰;

6、可读性强:由于结构清晰,增加了可读性,另外结构清晰了,就容易写清楚注释,也增加了可读性;

7、函数无条件执行的优点:

1、结构更清晰:不用考虑是否执行了;

2、数据流更清晰:一个新的计算量由哪些变量得到,传递关系更清晰;

3、函数的模块化更好:能让函数无条件执行,表示该函数具有更高的独立性,也就是模块更完整,与其他代码的耦合程度更低,迁移更方便;

4、程序清晰之后,程序结构简单,从而增加可靠性;

5、集中处理的优点:(集中处理是只,如果一个变量的计算,在不同条件下,算法不同,那么把条件汇总到一起,在一段代码处处理这个变量)

1、结构清晰:一个变量的计算只出现在一个位置;

2、分散处理会造成同一个值在一次运算周期重复计算,后面的计算结果覆盖前面的计算结果,从而难以控制数据流;

3、【2011-7-5】

1、ESP方式的减压和泄压:开关控制方式下,两者没什么区别;

2、ABS方式的减压:减压速率和ESP减压方式差别很大;远小于ESP泄压速率,近似1/2关系;

3、Bosch 8.1的HCU,保压时有个大约90Hz的噪声,和王伟玮讨论了一下,基本上可以理解为那就是当时电机转动频率;

【2011-7-6】

1、在举升机上,两前轮确实会有转速差,并且转速差可能越来越大;

2、阀的端口,烧程序时的状态确认;没有高电平的;

3、粗略来讲,泄压速率正比于轮缸压力?

4、轮缸制动液净进入量和轮缸压力什么关系?在常用的范围内,大概是正比关系;

5、制动轮缸制动液液量增大了,谁变形了?制动盘、摩擦块、制动钳,还有谁?那个变形大?是不是制动钳>摩擦块>制动盘(最大也就0.1mm),6、主动增压时,进油速率基本恒定。HCU中的柱塞泵效率大概50%,好点儿能到60%;轮缸压力大,效率可能稍微高一点儿;轮缸压力大,电机转速稍微低一点儿。

7、【2011-7-8】

1、大型的复杂的程序,用面向对象编程效率要高得多;单就变量的private和public设定而言,就会减少很多变量赋值的误操作,相当于自动添加了一种自检验机制;其他还有很多优点。

2、应该把每个函数都做一个更新记录。这种更新记录怎么能做到比较容易看到上次的状态呢?难道只能把不同状 态都记录下来看的时候再对比?

3、【2011-7-9】

1、轴距和FMVSS126的A值之间的关系,基本上只轴距减小10%,A值减小3%(尊驰在CarSim中的仿真结果)。2DOF理论上应该成比例改变的,实际上可能悬架、轮胎的柔性有影响。

2、尊驰和C118在CarSim中仿真的A值大概都是31deg。

3、.c中的函数,必须在.h中声明,不是为了能被调用,还是为了比较直观地看到在这个.c文件中定义了哪些函数;

4、单片机上,除0,会怎样?

经测试,初步结论:正值/0 = 0xF*F,负值/0 = 1

5、坡道TCS之所以困难,就在于压力估算的偏差影响对坡度的识别,压力的持续控制也比较困难;

6、坡道对前轴载荷几乎没影响。cos(15deg)= 0.985

【2011-7-13】

1、任何一个条件执行的函数,都涉及到不满足条件时不执行了,它计算的变量清零,还是怎么处理。条件选择,都是选取一种处理方法,那么必须对任何一种处理都有对应的方法。

2、条件运算的函数改变的变量,函数不运行时也需要对变量进行赋值;函数在程序中的作用,就是为了给那几个变量赋值,不运行了,就要用其他方式赋值;

3、先分好层次,定义清楚变量和函数,画好框图再写程序;

4、定义文件之间的接口,函数之间的接口;

【2011-7-29】

1、数据后处理中用数据组合成控制信号,是不靠谱的。组合生成一些信号比较靠谱。

【2011-8-12】

1、程序要写到什么样才算好?多一个字则太多,少一个字则太少,天衣无缝,完美无暇,千锤百炼,炉火纯青。

2、一群人,怎么才能做好一个程序?首先定义清晰,规则明确,不能越俎代庖,每个人有不同的权限去维护不同的代码。每个人都要遵守其中的规则,不守规则的那个人就是系统的bug。

3、虽然说程序是调出来的,但是还是应该尽量写的时候就写完善,不能写得一塌糊涂而等调试去解决问题。写的时候,关注的只是那么几十行,而找bug的时候,关注的可是几千行,这效率能一样么?

4、大程序设计首要原则,降低各部分耦合度。

5、如果每个人负责几个文件的话,就不要轻易定义全局变量了,要尽量使用静态全局变量(作用域为本文件)。定义全局变量要先看全局变量库,并建立并进行登记。

6、以前程序很大的一个问题就是层次没分清,从而耦合度高,混乱。

7、格式上,所有的一块儿逻辑前面要有空行,比如if之类的。

8、定义一个新变量前,先检查一下是否已存在这个变量名。

9、函数中间尽量不用return,结构混乱。

10、减少调用层次;

11、程序的本质是什么?数据流;

12、函数的作用是什么?计算数据;

13、写程序的本质是什么?用矩阵化方式决定数据流的运行;

14、为什么要分层?降低耦合度;

【2012-2-5】

1、把OBJ中的一段,ID中的一段儿留给调试。也是分层的概念。

2、

2.嵌入式系统c语言编程该怎么学? 篇二

关键词:MYMY关键词:嵌入式系统,编程语言,C语言,Android,Python

您在下一项目编程时所使用的最佳语言是什么?如果您是一名嵌入式系统设计人员,可能认为这一问题实在可笑。您会使用C语言,如果希望加强管理,则会使用C衍生的C++。可能会有一些关键代码片段是以汇编语言编写的,但是,据Barr集团最近的一项研究表明,目前95%的嵌入式系统代码是采用C或者C++编写的。

然而,世界是在变化的。新的程序员、新挑战以及新体系结构让C松开了在嵌入式软件上的“抓手”。据最近的一项研究表明,嵌入式计算语言发展最快的是Python,当然还有很多其他参与竞争的语言,只是这些语言仍然占少数。但是逐渐地,一直坚持使用C/C++的程序员像20年前汇编语言专家那样开始冒险——采用更快、更紧凑和更可靠的程序。图1提出了新语言能够提高嵌入式计算机领域的效能。

C语言在嵌入式领域中的地位受到冲击

嵌入式算法变革的一个主要推动力量是其他工作环境的程序员进入了嵌入式领域。这方面最明显的是刚毕业的学生进入职场。以前,刚毕业的学生在C课程中学会了编程,会用C或者C++完成他们的大部分项目。而现在,已经不再如此了。Intel软件工程经理David Stewart注意到,“现在,大部分计算机科学课程使用Python作为他们的入门语言。”计算机科学专业毕业的学生很有可能在Python、Ruby以及几种脚本语言上有丰富的经验,但是他们可能从未认真地使用过C语言。同时,其他影响也越来越多。使用Android作为平台进行相关的或者用户友好的嵌入式设计,为Android的自然语言——Java,带来了机会。在这一复杂景象的另一端,机器人、无人机或者相似的小项目业余爱好开发人员通常都有Arduino或者Raspberry-Pi背景。他们的经验会体现在非常紧凑和简单的程序发生器或者B#等小型语言环境里。

这一现象对物联网(Io T)的广泛研究也产生了影响,网络开发人员也参与到讨论中。他们认为,如果嵌入式系统的外部接口是RESTful Web,编程语言应该是Java Script或者其服务器侧相关的Node.js。热衷于使用C语言进行开发的人员应该观察一下node.js——贝宝和沃尔玛等公司在企业规模的开发中大量使用了这一可扩展平台,据跟踪调查网站modulecounts.com,在任何编程语言中,该平台的辅助支持系统增长是最快的。

选择Node.js的动机部分是源自文化,但是也有体系结构方面的因素。Io T会在客户侧、互联网以及服务器侧之间分配其嵌入式系统任务。其中,客户侧连接实际环境,通常要求尽可能少地采用硬件。客户侧很自然地采用硬件专用库支持的Web应用程序,而服务器侧则是服务器应用程序。这样,对于Web程序员,在Io T系统编程中很显然会使用Java Script和Node.js。

日益复杂的嵌入式算法是变革的另一推动力量。简单的控制环路被卡尔曼滤波器、神经网络以及基于模型的控制功能所替代,高性能计算语言——Python,开放计算语言(例如Open CL™)以及MATLAB等基于模型的环境逐渐发展起来。

强烈的动机

那么这些新人们为什么不静下心来学习C语言呢?Stewart说:“真正的原因在于开发人员的效能。”反对C语言的人一直认为这种语言编写慢,容易出错,会带来意想不到的硬件相关问题,并且除了最初的程序员,其他人很难读懂它。这些因素会对提高设计效能产生不利影响。而很多最近出现的语言逐步转向快速学习和高效的代码重用。虽然目前几乎所有语言都受益于C语言高度简洁的语法,但现在的重点已经转回可读性,而不是最少字符数。不但在现代语言中鼓励实现协调一致的文档,而且结构化约定也通常会这样定义文档。C程序员一直把这类文档看成是自由表述的例子,因为作者自己不会牵连其中。例如,这些约定使得实用工具程序能够从Python组件的结构化注释中生成用户手册。

现代语言还采用了高级数据结构,可以在C++环境中建立任何对象,并重用它。基于指针,Python还提供自然List和Dictionary数据类型。而Ruby等其他语言,基本上是面向对象的,支持结构和重用,这使其可以融入到程序员的习惯中。

影响了现代语言是否易于重用的另外两个重要因素是动态输入和模块化。动态输入是一个很有争议的因素。当程序员在使用变量时,解释程序确定程序员传送给表达式的数值的当前数据类型——几乎所有这些服务器侧语言都是解释性的,而不是编译的。然后,解释程序会选择相应的操作,评估含有该数据类型的表达式。这样,程序员不用太过担心他要调用的函数需要的是整数变量还是实数变量。但是,嵌入式程序和代码可靠性专家很快指出,动态输入在运行时实际上效率不高。另一个因素是部分程序员对模块化的偏见。有时候会有人说,Python编程实际上不是编程,而是脚本,是把别人用C语言编写的函数调用或串起来。

可读性、协调一致的文档、动态输入以及函数大量的重用等,催化了开源领域中辅助支持系统的爆发。程序员本能地会在巨大的开源库中找到他们能够使用的函数,例如,npm(用于Node.js)、Py PI(用于Python)或者Rubygems.org(用于Ruby)。如果他们不用修改组件或者编写新的组件,他们会回到库中工作。结果,库会越来越大(npm目前大概有25万个组件)。这些大规模的辅助支持系统也相应地大幅度提高了程序员的效能。

嵌入式的新编程语言的不足之处及解决方法

这些编程语言尽管有这么多的优点,但也有缺点。要想在嵌入式计算领域占据一席之地还有很多不足。

大部分这些语言最明显的问题是,它们是解释性的,而不是编译的。这意味着它们需要可观的运行时程序包,包括解释程序本身、工作存储、动态输入开销和运行时库等,都要适配到嵌入式系统中。基本上,所有这些会非常紧凑,某些Java虚拟机可以装入到几十K字节中,但是Node.js、Python以及来自服务器侧相似的语言需要自己的空间。一个兼容性还可以的Python虚拟机在加入程序员自己的代码之前可能已经占用了几兆字节。

在性能问题方面,解释程序读取每一行代码(源程序或者预处理过的中间级代码)需要解析它、进行运行时检查以及调用执行所需操作的例程。在C语言中,这会导致一行代码有很多操作,编译成很多机器语言指令。执行时间和能耗的成本都会增加。

在运行时效率方面,可以使用即时(Ji T)编译器进行改进。一个Ji T编译器可以与解释程序并行工作,为循环中的代码生成编译后的机器指令,因此,后续的代码能够更快地执行。Stewart说:“Ji T技术非常有趣,Py Py Ji T编译器把Python执行速度提高了两倍。”对于效率方面,还研究了其他方法。例如,如果函数是无阻塞的,或者使用了信令机制,有很多函数调用的程序即使是在采用循环展开等方法来建立更多的线程之前,也可以含有很多线程。因此,可以在一个组件上应用很多多线程内核——这是高性能计算已经研究应用的方向。更进一步,Ruby语言本身支持多线程,因此,即使底层操作系统不支持线程,它也能够产生线程代码。某些团队则寻求在硬件加速器中实现库或者组件,例如,图形处理单元(GPU)、Xeon Phi和FPGA。实际上,解释程序本身就会有适合加速的任务。

服务器侧语言遇到的其他困难是缺少处理实际环境的结构。在服务器环境中,除了网络和存储,没有实时限制,也没有I/O。可以通过几种方式来解决这一问题。

最简单的是,Android环境以硬件几乎无关的抽象方式包封Java代码:具有图形、触摸屏、音频、视频、多个网络以及物理传感器的虚拟机。对于更强调物理I/O,甚至能够在微控制器上运行的轻型平台,提供嵌入式Java。

Python等语言需要不同的方法。由于CPython解释程序运行在Linux上,因此,原理上能够运行在有足够速度和物理存储器的任何嵌入式Linux系统中。在这方面已经有了工作基础,通过减小装入时间开销,为物理I/O访问提供功能,使用硬件加速器,进一步适应CPython,运行时系统适应实时约束。最新的一个实例是STM32微控制器的裸金属Micro Python环境。虽然这看起来几乎不可能,但是已经在Node.js下面的Java Script引擎上有了类似的工作。

安全呈现出更多的问题。很多安全和可靠性标准不鼓励甚至禁止使用未经正式认证或者全面测试的开源代码。这些限制使得不可能重用组件,或者重用组件过于复杂,对效能的提高不大。同样等级的详细检查也延伸到虚拟机等开源环境中。在可靠和安全大环境下,CPython等开源平台很容易受到攻击。

未来的编程语言发展方向

最后,考虑到有众多的推动力量促使新语言进入嵌入式世界中,可以预见到会有多语系统,这种系统含有的组件来自多种源语言,每一种选择要使用的关键库,或者方便某类开发人员使用。当然,您可以在不同的CPU内核上放置几种虚拟机,在一个内核管理程序下相统一,然后,通过函数调用,为任务间消息的传送提供约定。但是,这样的系统最终会非常大。

另一种可能是一组语言相关解释程序,为Ji T编译器生成公共中间代码(图2)。当然,还能列出其他问题,例如,不同的任务间具有不同的通信模型、存储器模型和调试环境,但这些问题总是能够解决的。

小结

3.为什么嵌入式要用c语言编写 篇三

嵌入式软件一般需着重考虑三个方面:性能、安全性和开发效率(包括代码可移植性等)。性能(运行效率)方面,汇编明显是最高的。但汇编在安全性和开发效率方面明显是最低的(不考虑机器语言--)。所以除非是要求极端高性能的嵌入式平台(或者是系统实在是太简单而没办法支持高级语言,orz--),使用汇编语言的不多。

相对于C,其它高级语言的运行效率一般比较低(C程序运行效率可达汇编的80%,而其它程序可能只有C程序的80%),源代码和目标代码也可能会比较长。对于嵌入式系统,性能的瓶颈是非常致命的,很可能某种用C编写的程序可以达到预期目标,而用其它语言使用同样算法编写的程序就不行。(不过也正因为这个原因,在嵌入式系统上实现的可用编程语言并不多。)

基于系统的用途,安全性设计嵌入式系统也是必须考虑的一个部分(比如说用于医疗卫生设施),必须尽可能在开发期间减少潜在的错误。这方面C不占优势,但如果保证代码严格遵守安全规范,也可以接受(相对而言,汇编就郁闷了--)。

开发效率和安全性类似,也在可接受范围之内。

也可以用汇编编写c语言也好 汇编也好 或者更高级的语言都是跟人看和些的让人的思维能够描述出来

然后通过编译环境编译成计算机能看的懂的东西 不同的语言 编译完以后 逻辑上其实都是一样的然后交给芯片去运行要说效率c没有汇编效率高

举个例子

一个韩国工人(计算机)只会懂韩语(机器语言)领导有一个中国人(程序员)只会说汉语(C语言)另一个日本人(程序员)只会说日语(汇编)还有一个西班牙人(程序员)只会说西班牙语(另一种高级语言比如java)想让韩国人做同样一个事情中国人用汉语说完经过翻译(编译系统)变成韩国语韩国工人明白了要干什么日本人用日语通过翻译 变成韩国语韩国工人也知道要干什么了另一个西班牙人 用西班牙语 翻译成韩国语让韩国人干的是同一个活翻译完的结果是一样的 只是不同语言表达罢了c语言更方便 移植性更强(比汇编)

我目前接触的一般的嵌入式上层软件 c语言就可以搞定

如果遇到比较严格的或者军工的甲方

c语言搭钩框架,然后剩下的全部用汇编语言实现

之所以用c 是因为c比汇编操作简单

调试方便 开发效率较高

但是代码运行效率可能没那么

而且汇编可以精确定时,代码运行时间是可以计算出来的因为C效率高~相对其他高级语言代码所占用的空间少~通用性也不错

所以要用C喽

4.大学怎么学好c语言有哪些方法 篇四

若有老师授课,则在课堂上一定要认真听讲,注意老师强调的每一个细节,在适当的时候可做笔记,避免自己实际操作时犯错。若是自己看书学习,则需要注重书上每一个细节,不能泛泛而读,C语言编程的关键往往在于细节问题。

培养编程思维

在学习C语言编程的过程中要逐渐培养一种编程思维,即在遇到一个问题时不要盲目下手写代码,而是应该现在脑海中找到一种解决该问题的办法,至少要有一个大概的框架或方向,比如说解决这个问题用什么样的循环最好,是用for循环还是do…while…更好,解决这个问题时是否会用到嵌套循环,又会用到哪些函数,在有具体思路后再进行编程,而不要写一步想一步,这样效率会大大提高。

多看书

在初学阶段,由于对编程还不够熟悉,也未能形成一种编程思维,因此在遇到问题时常常不知道该如何下手,这时应该多看书,去体会书上的程序。而且C语言有很多典型错误,为了避免自己出现这种错误,自己就应该多看书,搞懂每一种错误出现的原因,但自己写代码时就会着重注意这些问题,避免犯错。

理解程序

在学习C语言时有一种有效的提高方法,即多看别人正确的程序,一步一步理解别人的程序,体会程序这样写的目的与意义,思考在某些部分换一种表达是否还能达到程序的初始目的。一定要学会阅读程序,自己才能写出程序。只有在能看懂每一行代码的基础上,自己才能模仿着写出类似程序。

注重细节

C语言是十分注重细节的,写代码的人应该深有体会。在编程过程中,一个“;”位置的错误将会导致程序无法运行或无法达到预期效果,多一个等号或少一个等号,就可能导致运行结果完全错误。因此在编写程序的时候一定要注意细节问题,处理好每一个细节,争取让程序一次就运行成功,这是一个优秀编程人员应该做到的。

培养耐心

在学习C语言的过程中,耐心是极其重要的,无论是在写代码的过程中还是在检查的过程中。在学习的后期,为了解决一个复杂的问题,一个程序的代码往往有几百行甚至上千行,在编写过程中需要足够的耐心才能完成这个任务,而且一旦不能通过编译,便需要仔细阅读错误部分,哪怕是一个符号也不能放过,因此在学习C语言时一定要培养足够耐心。

大量练习

为了学好C语言,做大量练习是必不可少的。大量练习会让你逐渐熟悉C语言,写代码时能更加流畅。刚开始肯定会犯一些错误,但逐渐的犯错的概率就越来越小,正确率越来越高,也逐渐向一个优秀的程序员靠近。

总结

5.嵌入式系统c语言编程该怎么学? 篇五

一、与系统有关的设置安装问题

1.不要以为只要主板有USB接口就可以使用移动硬盘,还要看系统是否支持。Windows2000、WindowsXP及以上版本的系统是可以直接支持移动硬盘的,无须安装驱动程序即可使用,而在Windows98下使用移动硬盘用就必须装驱动程序,否则系统就会将移动硬盘识别为未知的USB设备。

2.对于一些Windows98用户来说,在安装好移动硬盘的驱动程序之后,可以从设备管理器中查看到移动硬盘图标,但是在资源管理器中却没有相应的盘符标志,这就是系统设置不当所致。在设备管理器中双击移动硬盘图标,并且点击弹出窗口中的属性按钮,此时可以看见断开、可删除、同步数据传输和INT13单元四个选项,其中可删除一项前系统默认是没有打钩的,勾选这个选项之后重新启动计算机,就可以在资源管理器中看见新增的移动硬盘盘符了,

二、主板的USB接口问题

由于主板的USB接口有问题引发移动硬盘不能正常使用,主要从以下方面着手解决:

1.USB接口未开启:在一些老机器上(包括一些品牌机)虽然有外置的USB接口,但在BIOS中却是默认关闭的,这样即使系统支持也不行,因此应检查一下BIOS设置中USB接口选项是否开启:在启动电脑时按住Del键,进入BIOS设置,在ChipsetFeaturesSetup或IntegratedPeripherals中将OnChipUSB设置为Enabled,保存并重启电脑即可。

2.系统不支持USB接口:这种情况也主要出现在一些老电脑上。如一台兼容机,主板是旗舰的VISTA710V2,主板芯片组用的是VIAApolloMVP3,外接USB接口卡后系统竟然不认(装的是WindowsMe和Windows2000双系统),在设备管理器中找不到通用串行总线控制器。上网一查,原来是主板芯片组有问题,赶紧从网上下载最新的主板BIOS进行刷新,又下载了VIA专为该芯片组提供的USB驱动补丁,终于在我的电脑上认出了移动存储设备。

上一篇:大二自我鉴定300字下一篇:三严三实学习研讨会发言稿

热搜文章

    相关推荐