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

Posted

技术标签:

【中文标题】警告:传递“Proc_Start”参数 3 的指针目标在符号上不同【英文标题】:warning: pointer targets in passing argument 3 of 'Proc_Start' differ in signedness 【发布时间】:2021-12-18 20:37:02 【问题描述】:

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

我收到此错误:

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

我给你代码,它打破了问题和注册错误的宏的定义

编译产生错误的地方

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)

谢谢

【问题讨论】:

【参考方案1】:

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

#fonct 计算为一个字符串,其类型为(char*)

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

【讨论】:

嗨,我已经尝试过了,但是添加第三个参数并没有给出警告,而是一个错误,指出宏只需要 2 个参数 > 宏“mProcStartParam”传递了 3 个参数,但只需要 2 个跨度> 不要更改宏的调用 更改宏mProcStartParam的定义与mProcStart相同。 天哪,你是对的,通过在 mProcStartParam 的定义中的 #fonct 之前添加 (const s8*),警告消失了。非常感谢 如果这能解决问题,请您接受左边打勾的答案,谢谢!

以上是关于警告:传递“Proc_Start”参数 3 的指针目标在符号上不同的主要内容,如果未能解决你的问题,请参考以下文章

得到错误而不是不兼容的指针类型警告

传递参数 1 会丢弃来自指针目标类型的限定符

关于keil编译器下指针指向数组警告的问题?

指针类型不兼容??奇怪的

传递'memcpy'的参数2从指针目标类型中丢弃'volatile'限定符

显式 void 指针作为函数参数