有关:

如果你正在写的代码 微控制器 是否有一个真正的区别如果你写在大会或C或其他一些高水平的语言?如果你写C码,你会如何编译它吗?

感谢

有帮助吗?

解决方案

若干评论:

1)绝对 大会除性或优化的约束令。以下指标通过屋顶与会:

  • 时间代码
  • 时间的调试它
  • 时间来检验它
  • 时间到它文件
  • 时间弄清楚(1年以后)什么是你做的时候,你编码
  • 机会犯错误

2)我的偏好将是C++而不是C对于其名字空间的封装和其便利 compile-time 面向对象的做法。C有太多的机会为全球变量和名字空间的冲突。(实时Java将是好的,但从我所了解其需求仍然很高)

或者说一个子集C++:排除例外情况,虚拟的功能,运行时间中的类型标识,还动态存储器的分配在大多数情况下--基本上,任何剩下的未指明在编制时间,因为它将通常需要大量的额外资源,在运行时间。这就是"膨胀"的C++。

我已经使用两TI和IAR的编译器C++、为TMS320系和MSP430微控制器(分别)并与适当的优化设置的,它们做了出色的工作减少开销,你可能期望从C++。(尤其是如果你帮助它通过明智地使用的 inline 关键字)

我甚至已经使用的模板的一些其编制时的利益,促进良好的代码的再利用:例如写一个单一来源码文件,以处理的8位,16位,以及32位的社区康复中心;和 编制时的多 允许指定的通常行为的一类,然后再使用,但是替代它的某些职能。再次,TI编译器有极低的开销用适当的优化设置。

我一直在寻找一个C++编译器,微型芯片照片;唯一的公司我发现,产生一个是IAR.($$$已经一个障碍,但我希望能购买一个复制的某个时候)的微芯片C18/C30编译器都很好但他们是C,不C++。

3)一个特定的警告有关编译器优化:它能够/将会做的调试非常困难;它通常不可能单步骤,通过优化C/C++编码和你看窗户可能显示的变量,没有相关性有什么你认为他们应当包含有未优化码。(A好debugger会警告你的那个特定的变量进行了优化存在或进入一个登记册,而不是一个存储位置。许多调试器不这样做。>:(

也是一个很好的编译器会让你挑选/选择优化在职能一级通过#杂注.我只用于指定的优化在该文件的水平。

4)接C码会:这通常是困难的。最简单的方法是为了使一桩功能,具有签名,你希望如 uint16_t foo(uint16_t a, uint32_t b) {return 0; }, ,哪里 uint16_t =unsigned short,我们通常做的#位的明确。然后编译和编辑将会产生(只是一定要离开开始进/出口部分的代码)和 要小心 不要破坏任何寄存器而没有恢复他们之后你都做了。

联大会通常可以有问题,除非你正在做的事情 非常 简单的像启用/停用中断。

这办法我最喜欢的是编译器内部函数/"扩大个体和小型"法。微型芯片的C编译器是基于GNU C编译器,它已"延长ASM"它可以让你码位的嵌入式组件,但是你可以给它很多的提示告诉它它寄存器/变量引用和它将处理所有的省/恢复登记册,以确保你会代码"发挥好"与C.TI的编译器的TMS320系DSP不支持这些;它的确有一套有限的内部函数的有一些使用。

我已经使用的组件,以最优化的一些控制环代码,有经常执行,或计算sin(),cos(),and atan().但否则我会留下离开大会,并坚持的一个高级别的语言。

其他提示

大多数微控制器制造商提供某种形式的跨编译器在哪里你可以编码的电脑,然后传送过来的微控制器。

为什么C?
一个优点是C,你的代码将更易于港口到其他微控制器的未来。历史的计算显示,通常的代码用处的硬件实现的。
第二个优点是控制结构(如果有,为,同时),让代码更易读和易于维护。

为什么大会的语言?
你可以手工艺优化。

判决
作为通常的情况与此类问题,平衡是非常依赖特定使用。
要知道,它经常可能组合的两个通过使大会呼吁在C码的,所以你可以找到一个平衡,这是适用于项目。

特定的事先知情同意的硬件
它的 似乎 你没有选择的海湾合作委员会与最PIC硬件。另一方面,如一位评论者所指出的,微型芯片C30编译器的16位PIC24和dsPIC33是gcc。
PIC是也还没有支持 SDCC.
新的信息:根据评论,SDCC有可行的支持。
还有一些其他开源 选项, 但是我没有与他们的经验。

最好的选择可能是代码C,然后于极少数情况下,你需要手优化和可以做一个更好的工作于编译器,则应代码组成的c的文件。

大会编码是过去的事情的个人电脑,但是非常相关的,在嵌入。

写大会在嵌入式是不同于编写大会在个人电脑上。电脑编译器"比人类更好"在发生优化的指令。嵌入式系统往往有奇怪的体系结构,并且他们的优化编译器是不成熟,因为一个电脑化编译器。

一个问题,我遇到了与编写组件的微控制器是需要 非常 小心你的代码。具有跳表交存边界,并且导致你的代码跳到非常奇怪的地方是相当令人不安。编码在C编译器,涵盖基于你。

我肯定会去C.它的速度更快,它创造更可靠的软件。会有很少提供和在紧缺的场合。必须记住,在C:

  • 你就可以很容易地港口码从现有的平台,即使从个人电脑。
  • 你可以制定在一个高水平的语言,而不影响执行的速的或码尺寸。提供质量可用的编译器(有很多选择PIC18),这些将是最有可能更好地与C于手工制作组件。
  • 这是很容易调试、测试和维护的代码。C产生更多的可靠的代码。

另一回事,具体做PIC18.你不会有处理非直观PIC的建筑之类的东西存银行。

我已经有很好的经验 IAR C编译器8051的过去。

我最近的做法一直是这样的:-

把它写在C有一个良好的优化编译器,然后才是如果有一个问题与大小或速度,考虑重写某些部分在汇编器。

然而,由于采用这种方法我永远不会 需要 写一个单一的线的汇编...

去!

我曾为一大CE制造商。我最后一次见到大会有围绕1996年在一些小的中断服务的程序为RC5和RC6解码和电视优化算法。在这之后总是用c、C++(仅使用的课程、无限制、例外或rtti)。我有很好的经验与老KEIL编译器8051和与绿compiler(MIP)和VxWorks工具(支持基础)。

作为罗迪说,第一个写在C,并优化会后,(如果需要的话)。

大会可以在许多情况下会更快;当你在桌面上,编译器往往是优化对点的手会很少是必要的,但是在加州大学的世界,这通常是。此外,如果您需要编写中断处理例行程序之类的东西,你常常不能这样做。

作为汇编、谷歌一C编译器的目标。

绝对C,除了当

  • 程序的记忆是非常有限。说之后的艰苦手优化汇编码管理,以适合你的节目在这1024bytes的闪光,用0字的左边。在这种情况下,没有C编译器,将来任何好处。

  • 你想有绝对的时机的控制。如果任何数量的中断等待时间太长你就得依靠汇编器。

的问题,这些天是嵌入可以从任何一个ATTiny6销和几个字节的RAM多核SBC运行一个嵌入式操作系统,把一些人的台式计算机的耻辱。

因此,所选择的语言/开发环境需要考虑如何有效率,你需要vs如何复杂的系统。

先C工作无处不在和规模相当好,你飞得越高你越会呼吁外部图书馆等。要处理的复杂性。

对于非常小的微米(测定闪/ram字节)你是最好的使用ASM,当你到达的kb范围、C或任何其他传统的语言可以被用作你不需要计算每个字节。一旦你兆字节到发挥你的能力和越来越可能要求使用一个实时操作系统采取的一切照顾和减少开发时间。通过你有时间的硬件可以运行一个完全成熟的操作系统上你也许可以抽象自己从硬件和刚刚把一切都写在衬垫的细胞样Java或somesuch,而不必担心太多关于如何可怕的浪费这一切是怎么你不是一个真正的程序了...;)

除上述的是当你需要的所有性能可以拧出的硬件,在这一点上你可能需要向下拉一级或两让事情变得有效。

这就是底线的如果你使用的C可以用手优化后,我不会使用的任何其他C或汇编(C++等)。

关键是微控制器的指示设置的,如果您使用的是一张照片或者甚至8051我会用汇编只。如果它是一个编译器友好isa像臂或avr或msp430然后使用的C节省一些打字但你可能会有一些例行程序汇编,出于各种原因。同样,你可能想避免C库,甚至newlib可以只是太笨重,借码或想法从他们而不只是一个链接。哦,回到这个问题,看看什么是C编译器为目标,再次臂和avr你不会有任何问题。可能msp是好的。只是因为Keil或Iar会卖给你一个编译器并不意味着你应该买下它或者用它,输出的支付以及免费编译器可以是可怕的。你需要深谙asm无论如何,审查的输出(你可能要写一个反汇编这样做).

底线(另一个底线),没有全球性答案(以及避免anyhthing高于C是一个全球性的回答)它总是取决于什么的平台是什么你的资源是什么你的任务是什么样的性能要求什么样的可携带性要求(如果这是真的嵌入式微控制器上的很大一部分是通过定义不便携式)什么的编译器,调试器,jtag等出售,甚至迄今为止为什么主机的操作系统都是你的发展可能是一个很大的因素。

还有另外一个时间当写在大会可能是必要的:如果你需要做一些低级别RAM测试或类似的,这就需要绝对的控制数据存储。

例如,软件,它确认 SIL-2个(安全级别)和上述的可能需要不断检查在RAM,以检测任何可能的数据的腐败。该地区的RAM你检查不可能改变,而它是在被检查,并因此编写的测试汇编可以让你来确保这是真的,例如通过存储的任何地方的变量具体的登记册或在另一个领域。这将是困难的,如果不是不可能的,C。

启动代码的其零RAM和初始化非零静态的变量也可能被写在汇编的同一个书面的,虽然这种代码是正常提供。

如果你正在写的代码是高度依赖设备特有的外围设备和工具的链你使用不提供必要的内部函数,以有效地利用它们(像蹩脚的飞思卡尔DSP563CC compiler),那么使用会。

除此之外,我认为不成文的规则的使用会对一个高级别的语言或多或少相同的桌面软件的发展:保持码清洁、维护和优化热码机语言。

代码汇编语言是真的快速有占地面积小,但是代码编写的汇编语言都是不可重复使用的代码。这reusibility特征,用于代码是最重要的功能,对于软件的设计。例如,如果已经汇编的项目代码x86处理,它可以仅用于x86处理器,不是为臂处理器。但是如果你有项目C/C++码x86处理器,可以使用这个代码臂处理器。因此,最好是避免汇编的软件发展。

它是太糟糕了,没有人提出或方案为止。两者都可以适用于小型环境,并且可以得到令人印象深刻的生产力收益。

纯C或Pascal,Modula2.但是由于编译器可装置C.

额外的C++和个相似是唯一有趣的理由,因为动态的分配和程序的尺寸通常是非常有限。

还有更复杂的运行可能是一个痛苦的,如果你的应用程序获得紧张。

汇编可能是有用的,但是如果你只卖给真正的巨大数量,和一个较小的固件意味着一个更小、更廉价的芯片(小闪光灯)和程序的尺寸是overseeable(阅读:有一些机会,你会得到它bugfree在时间)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top