使用GCC C11时使用FreeRTOS有什么好处?例如,在C11中我有线程和队列等,因此我不需要FreeRTOS?
答案 0 :(得分:3)
线程支持在C11标准中是可选的,它们的实现将是C库的一部分,而不是GCC本身(参见here)。我不知道在嵌入式设备上运行C11线程的任何C库(至少newlib没有),所以目前C11线程不是一个选项,除非你打算自己实现它们。
C11线程也没有针对嵌入式系统进行优化,因此您无法指定其堆栈大小。
我不知道C11中是否有任何队列支持,也许你在想C ++ 11队列。因此,如果不使用FreeRTOS,您必须实现自己的队列。
答案 1 :(得分:1)
RTOS提供的不仅仅是线程支持,它们提供了一种调度机制。查找有关“时间和空间划分”的信息,以便更好地了解RTOS将为您的项目提供什么。搜索的其他一些内容将是“循环调度”和“优先级抢占式调度”。
事实上,FreeRTOS的书写得很好,涵盖了这些概念。我认为这是35美元。
答案 2 :(得分:0)
C11
和FreeRTOS
之间的比较实际上不是苹果与苹果的比较。 C11
是一种语言(标准),而FreeRTOS
是内核+操作系统。
C11可能可以在RTOS
或更传统的内核+操作系统Linux
之上运行。
您应该比较的是RTOS
与传统的内核+操作系统。 RTOS
专门用于内核的实时响应。这是通过使内核以非常精细的粒度进行抢占来实现的,这允许更高优先级的计算在它准备好运行时立即运行。在传统内核中并不总是这样,因为内核的某些部分并不是先发制人的。
RTOS也经过优化,可以最大限度地减少内核中的任意延迟,如文件系统同步,垃圾回收等。用户空间到内核空间上下文切换效率更高,因为整个系统确实在单个地址空间中运行和安全环。通常没有虚拟内存,这可以消除处理上下文切换过程中涉及的大量开销,因为虚拟内存页表不需要在每个上下文切换时从头开始交换和构建。后者显然是以计算线程之间的隔离为代价的。中断处理也经过优化,可以实现最小的开销。
答案 3 :(得分:-1)
非常感谢你的信息。它非常有帮助。我使用NPX LPCXpresso用于ARM Cortex M3。那个人应该支持(部分)C11。至少我看到了libs互斥和线程,例如。
工具\臂-NONE-EABI \包括\ C ++ \ 4.8.3 \螺纹
但是现在它没有用。对我而言,如果对newlib或redlib的支持以及它使用的库有所不同,那么我并不完全清楚。哪个工具链最好用。 (这个ARM对我来说很新)。
从
的角度来看,我是否理解你 效率速度, 稳定性, 效率记忆 支持,使用FreeRTOS会更好吗?
我的第一印象是FreeRTOS会产生比标准C lib更多的开销(如果它们会在那里),但它正好相反(即使有一个newlib的线程库)?