繁体   English   中英

如何解决此警告?

[英]How can I resolve this warning?

代码可以编译并运行,但是我想处理警告。

在此处输入图片说明

#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");    
    }
}

不知道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可以的话,可能会成为问题。保持系统...这将导致显示负值)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM