我该如何解决此警告?

时间:2014-04-02 18:39:11

标签: c nios microc

代码编译并运行但我想处理警告。

enter image description here

#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 个答案:

答案 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可能会出现问题)坚持你的系统...这会导致显示负值。