在普通C中,嵌入式C的特定内容是什么/无法完成的

时间:2014-06-11 23:25:24

标签: c embedded pic

我理解,对于嵌入式系统的C,例如用于PIC MCU的C,我们可以使用的标准C集合存在限制,这取决于我们使用的编译器,因为有很多用于不同微控制器的编译器家庭。在这种情况下,在C中还完成了我们通常不会做的事情,例如添加许多汇编指令直接访问寄存器,将函数或变量的位置约束到内存e.t.c中的特定位置。

在哪里可以找到嵌入式C特有的内容列表?它可以是书籍或网站链接。我知道嵌入式系统的程序风格不同,例如对于PIC MCU,我们不能使用递归编程。

1 个答案:

答案 0 :(得分:1)

当您在C中为MCU开发时,通常需要从平台约束开始。现在大多数编译器都是C99投诉(ISO/IEC 9899:1999)。

拿一本像C A reference manual by Harbison and Steele这样的好书并将其用作参考。

正如您所说,对于较小的MCU(在架构和内存大小方面),有一些更好的做法。

  • 避免动态内存总是一个好主意(特别是如果您的系统正常运行时间以年为单位)
  • 选择你的变量类型很重要(32位整数在8位微处理器上很昂贵,但在char上运行循环并不比在某些32位架构上使用整数更好或更差)。
  • 如果调度程序足够,为什么要使用RTOS,为什么调度程序如果事件循环可以完成这项工作呢?
  • 您可以在晚上或周末定期重启系统吗?做到这一点!
  • 如果你有大的静态变量,那么这些静态变量在运行时被bootstrap初始化为零。如果您的引导时间很重要,请避免此行为(某些嵌入式编译器允许禁用全局/静态变量初始化)。
  • 处理来自现实世界的外部输入时,
  • volatile非常有用(至关重要)。

然后你的编译器/链接器中有扩展名。阅读手册并了解它们为什么存在以及它们有什么用处。

  • 了解链接器的使用情况,代码/数据的来源是基本的。
  • 将C变量映射到特定的内存位置可以节省时间。
  • 如果您的架构中有引导加载程序的空间,请使用一个(通常是Silicon供应商提供带有示例代码的应用程序说明)。

总的来说,看看你的编译器生成的汇编程序,理解它为什么以这种方式工作并尝试一些小的变化来查看不同的输出(从charunsigned char等等)。