Как я могу устранить это предупреждение?
Код компилируется и запускается, но я хочу обработать предупреждение.
#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) удерживайте вашу систему... это приведет к отображению отрицательных значений).