Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

FreeRTOS FAQs

  1. FreeRTOS内核的内存开销是多少?

    FreeRTOS的内核需要大约9kB的RAM。

  2. 如何确定分配给作为任务堆栈的字数?

    任务在FreeRTOS中运行需要编译时知道堆栈要求。大多数其他微控制器上的FreeRTOS应用中,都是创建一个有大量堆栈的任务,并使用FreeRTOS的堆栈调试功能来确定堆栈使用情况,然后调整堆栈内存值。但是这样会存在问题,给定任务的堆栈会因函数调用而巨大变化,导致最佳的任务堆栈使用需要重新确定。这种方法会浪费内存并且堆栈溢出错误难以发现。

    XTC工具使用一个符号来解决堆栈使用问题。该符号表示任何函数在编译时的最大堆栈需求。使用宏RTOS_THREAD_STACK_SIZE(), 创建FreeRTOS任务的堆栈参数能够保证使用最佳的堆栈需求,只要函数不调用函数指针,也不能无限递归。

    xTaskCreate((TaskFunction_t) example_task,
    "example_task",
    RTOS_THREAD_STACK_SIZE(example_task),
    NULL,
    EXAMPLE_TASK_PRIORITY,
    NULL);

    如果在一个线程内使用函数指针,那么应用程序员必须用适当的函数指针组属性来注释代码。对于递归函数,唯一的选择是手动指定堆栈。更多信息请参见XTC工具文档中的附录A - 指导堆栈大小计算

  3. 我可以使用xcore资源,如通道、定时器和hw_locks吗?

    在FreeRTOS应用程序中可以自由使用通道、端口、定时器等。然而,在使用这些资源时需要注意。FreeRTOS内核对基元资源如信号有一定的控制,但是对于特定硬件资源如xcore的资源没有控制,对xcore资源的阻塞调用会阻塞FreeRTOS线程。所以在应用设计时需要仔细考虑处理这些资源的解耦问题。这些可以在各种RTOS驱动中得到最好的体现,它们包裹着实时IO硬件模仿层。