警告:传递“Proc_Start”的参数 3 中的指针目标在符号上有所不同

warning: pointer targets in passing argument 3 of 'Proc_Start' differ in signedness

提问人:Snorny 提问时间:11/5/2021 最后编辑:Snorny 更新时间:11/5/2021 访问量:345

问:

我的 stm32 目标的 C 代码有问题。

我收到此错误:

警告:传递“Proc_Start”的参数 3 中的指针目标在符号上有所不同

我真的不知道为什么,我在网上搜索了类似的主题,但这些主题中提出的解决方案都没有帮助我。

我给你它在哪里破坏问题的代码以及注册错误的宏的定义

编译生成错误的位置

void AppGestRelay_Init(u8 u8lvoie)
{

//Init Dac value for alim
u16 u16lDacValue = (((41435.4-Param.vcoil[u8lvoie])/16376.2)/2.48)*1024;
DrDac_SetValueChip(u8lvoie+1, u16lDacValue);

//Init discharge mode
mProcStartParam(AppGestRelay_DischargeMode, &u8lvoie);

//test
TrackAlt[TRACK1] = ALTER_POS;

TrackRunning[u8lvoie] = TRACK_NOT;
}

宏的定义

#define     mProcStart(fonct)               Proc_Start(fonct, NULL, (const s8*)#fonct)
#define     mProcStartParam(fonct,param)    Proc_Start(fonct, (TProcParam)(param), #fonct)

使用宏调用的函数

P_PROC(AppGestRelay_DischargeMode)
{

static u8 u8lvoie;

P_BEGIN;

u8lvoie = *(u8*)P_PARAM;

if(TRUE == Param.zener[u8lvoie])
{
    PcfDataW.pin7[u8lvoie] = PIN_OFF;
    printf("on\r");
    P_DELAY(mTICK_MS(10));
    PcfDataW.pin7[u8lvoie] = PIN_ON;
    printf("off\r");
}
else
{
    PcfDataW.pin6[u8lvoie] = PIN_OFF;
    printf("on\r");
    P_DELAY(mTICK_MS(10));
    PcfDataW.pin6[u8lvoie] = PIN_ON;
    printf("off\r");
}

P_EXIT();

P_CLEANUP;

P_END;
}

非常感谢您未来的帮助

编辑:

我已经尝试过了,但是添加第三个参数不会发出警告,但会错误地指出宏仅需要 2 个参数

宏“mProcStartParam”传递了 3 个参数,但只需要 2 个参数

该代码通过稍微修改 AppGestRelay_Init() 函数来工作,但仍然有警告,我想知道它来自哪里

谢谢:)

void AppGestRelay_Init(u8 u8lvoie)
{
static u8 u8lTrack;

//Init Dac value for alim
u16 u16lDacValue = (((41435.4-Param.vcoil[u8lvoie])/16376.2)/2.48)*1024;
DrDac_SetValueChip(u8lvoie+1, u16lDacValue);

//Init discharge mode
u8lTrack = u8lvoie;
mProcStartParam(AppGestRelay_DischargeMode, &u8lTrack);

//wait discharge mode is set
while(Proc_IsActif(AppGestRelay_DischargeMode))
{
P_SCHEDULE();
}

TrackRunning[u8lvoie] = TRACK_NOT;
}

解决:

在 mProcStartParam 的定义中,通过在 #fonct 前面添加 (const s8*) 来消除警告,就像在 mProcStart 的定义中一样

#define     mProcStartParam(fonct,param)    Proc_Start(fonct, (TProcParam)(param), (const s8*) #fonct)

谢谢

C 指针 警告 STM32 签名

评论


答:

0赞 Tom V 11/5/2021 #1

据推测,该函数的第三个参数需要 a。Proc_Start(signed char*)

#fonct计算结果为类型为 的字符串。(char*)

你已经在一个宏中写过了,为什么不在另一个宏中尝试呢?(const s8*)#fonct

评论

0赞 Snorny 11/5/2021
嗨,我已经尝试过了,但是添加第 3 个参数不会发出警告,但会出错,说宏只接受 2 个参数,>宏“mProcStartParam”传递了 3 个参数,但只需要 2 个参数
0赞 Tom V 11/5/2021
不要更改宏的调用,请将宏 mProcStartParam 的定义更改为与 mProcStart 相同。
0赞 Snorny 11/5/2021
哦,我的上帝,你是对的,通过在 mProcStartParam 的定义中 #fonct 之前添加 (const s8*),警告消失了。多谢
0赞 Tom V 11/5/2021
如果这样可以解决问题,请您接受左侧带有勾号的答案,谢谢!