Как я могу устранить это предупреждение?

Код компилируется и запускается, но я хочу обработать предупреждение.

#include <stdio.h>
#include "includes.h"
#include <string.h>

#define DEBUG 1

/* Definition of Task Stacks */
/* Stack grows from HIGH to LOW memory */
#define   TASK_STACKSIZE       2048
OS_STK    task1_stk[TASK_STACKSIZE];
OS_STK    task2_stk[TASK_STACKSIZE];
OS_STK    stat_stk[TASK_STACKSIZE];

/* Definition of Task Priorities */
#define TASK1_PRIORITY      6  // highest priority
#define TASK2_PRIORITY      7
#define TASK_STAT_PRIORITY 12  // lowest priority 

void printStackSize(INT8U prio)
{
    INT8U err;
    OS_STK_DATA stk_data;

    err = OSTaskStkChk(prio, &stk_data);
    if (err == OS_NO_ERR) 
    {
        if (DEBUG == 1)
           printf("Task Priority %d - Used: %d; Free: %d\n", 
                   prio, stk_data.OSFree, stk_data.OSUsed);
    }
    else
    {
        if (DEBUG == 1)
           printf("Stack Check Error!\n");    
    }
}

3 ответа

Решение

Не зная определения INT32U трудно сказать, но вы, вероятно, хотите:

printf("Task Priority %d - Used: %u; Free: %u\n", 
        prio, stk_data.OSFree, stk_data.OSUsed);

или же:

printf("Task Priority %d - Used: %lu; Free: %lu\n", 
        prio, stk_data.OSFree, stk_data.OSUsed);

Вы можете попробовать это с inttypes.h, Этот заголовок определяет весь спецификатор печати и сканирования для фиксированных целых чисел.

Так это

printf("Task Priority %d - Used: %u; Free: %u\n", 
    prio, stk_data.OSFree, stk_data.OSUsed);

становится

printf("Task Priority %d - Used: %" PRIu32 "; Free: %" PRIu32 "\n", 
    prio, stk_data.OSFree, stk_data.OSUsed);

Я полагаю, что компилятор пытается сказать вам, что ваша строка формата printf ожидает целое число со знаком (%d), но вы даете ему целое число без знака. Если это так, вы сможете избавиться от предупреждений, используя либо%u (вместо% d), либо приведя ваши значения к (int) (что может быть проблемой, если значения стали больше, чем со знаком int) удерживайте вашу систему... это приведет к отображению отрицательных значений).

Другие вопросы по тегам