小编osc*_*ezf的帖子

freertos vTaskDelete(NULL)没有空闲内存

我开始学习FreeRTOS.刚才我正在尝试用这段代码创建一个打印任务函数:

static void vTaskPrint(void *pvParameters) {
    taskENTER_CRITICAL();
    printf("%s", (char *)pvParameters);
    printf("xPortGetFreeHeapSize: %d\r\n", xPortGetFreeHeapSize());
    taskEXIT_CRITICAL();
    vTaskDelete(NULL);
}
Run Code Online (Sandbox Code Playgroud)

但在14次致电之后:

xTaskCreate(vTaskPrint, (char *)"vTaskPrint", configMINIMAL_STACK_SIZE, (void *)buffer, 3, (xTaskHandle *)NULL);
Run Code Online (Sandbox Code Playgroud)

皮质M3内存不足:

************** TEST GPIO & LEDS FREERTOS OPEN103Z EVB **************
vTaskLeds
xPortGetFreeHeapSize: 7832
vTaskReadKeys
xPortGetFreeHeapSize: 7232
[INFO] vTaskPrint created successful
Key pressed RIGHT
xPortGetFreeHeapSize: 6632
[INFO] vTaskPrint created successful
Key pressed CENTER KEY
xPortGetFreeHeapSize: 6032
[INFO] vTaskPrint created successful
Key pressed RIGHT
xPortGetFreeHeapSize: 5432
[INFO] vTaskPrint created successful
Key pressed LEFT
xPortGetFreeHeapSize: 4832
[INFO] …
Run Code Online (Sandbox Code Playgroud)

cortex-m3 freertos

6
推荐指数
1
解决办法
2194
查看次数

在c程序中使用宏

我用宏来搞定这个愚蠢的程序,但我不知道失败是什么:

#include <stdio.h>
#include <stdlib.h>

#define READ_RX  (1 << 1)
#define WRITE_RX (1 << 2)
#define READ_TX  (1 << 3)
#define WRITE_TX (1 << 4)

#define READ_COMMAND(num) (num == 0) ? (READ_RX) : (READ_TX)
#define WRITE_COMMAND(num) (num == 0) ? (WRITE_RX) : (WRITE_TX)

int main(int argc, char **argv)
{

    printf("[DEBUG] 0x%04X\n", (READ_COMMAND(0)) | (WRITE_COMMAND(0))); //works fine
    printf("[DEBUG] 0x%04X\n", READ_COMMAND(0) | WRITE_COMMAND(0)); //doesn't work

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果:

$ ./test
[DEBUG] 0x0006 -> works fine
[DEBUG] 0x0002 -> doesn't work
Run Code Online (Sandbox Code Playgroud)

有谁知道这是什么问题? …

c macros

2
推荐指数
1
解决办法
36
查看次数

标签 统计

c ×1

cortex-m3 ×1

freertos ×1

macros ×1