代码编译并运行但我想处理警告。
#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");
}
}
答案 0 :(得分:2)
不知道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);
答案 1 :(得分:1)
您可以使用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);
答案 2 :(得分:1)
我相信编译器试图告诉你printf格式字符串期望有符号整数(%d),但是你给它一个无符号整数。如果是这样,您应该能够通过使用%u(而不是%d)或将值转换为(int)来消除警告(如果值大于signed int可能会出现问题)坚持你的系统...这会导致显示负值。