【问题标题】:What are the limits of C on microcontrollers without operating systems?C 在没有操作系统的微控制器上的限制是什么?
【发布时间】:2013-10-09 01:08:08
【问题描述】:

我从未编写过微控制器。我一直在玩 Arduino,发现编程语言只是 C,由 IDE 动态生成的样板代码。那么:与 Linux/Windows 上的 C 相比,没有操作系统的 Arduino/微控制器上的 C/C++ 不能做什么?任何只使用标准库的程序都应该工作吗?还是对 malloc/free 和 setjmp/longjmp 等特殊功能有限制?

我问是因为我想编译和使用像 openssl 或 crypto++ 和 Arduino Due(带有 32 位 arm 处理器)这样的加密库。

【问题讨论】:

    标签: c arduino microcontroller


    【解决方案1】:

    没有限制,除了那些由你的编译器强加的限制。显然,当您没有“操作系统”时,您无法进行“操作系统调用”,但只要有人编写了一个提供您需要的功能的库,就确实“没有限制”。加密 - 完成。 Malloc - 简单。 TCP/IP - 明白了。很多 Arduino 库。很有趣。去吧。

    http://www.nongnu.org/avr-libc/user-manual/malloc.html 上的一些有用信息

    【讨论】:

    • 虽然您通常避免在嵌入式平台上使用动态内存(malloc/free),因为您的目标是避免运行时错误。
    • @MartinBeckett - 是的!而且由于您“拥有”内存,因此您不必共享,而且内存很宝贵,您通常希望小心翼翼地保护它,并且您可以对大多数分配进行硬编码。但这并不意味着它不能完成。 “没有限制”不等于“这是个好主意”……
    • 我必须检查一下,我很惊讶 AVR 有一个 malloc,它是哈佛架构 (IIRC) 并且没有 mmu
    • 关于 malloc,您最终可能会像这里 learn.adafruit.com/memories-of-an-arduino/optimizing-sram 所示那样对堆进行分段,因为没有 MMU
    • @ticapix - 你是否最终将堆碎片化很大程度上取决于你使用的库,但总的来说你必须注意这一点,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2023-04-01
    • 2023-03-04
    相关资源
    最近更新 更多