错误:一元'*'的无效类型参数(有'int')

Posted

技术标签:

【中文标题】错误:一元\'*\'的无效类型参数(有\'int\')【英文标题】:error: invalid type argument of unary '*' (have 'int')错误:一元'*'的无效类型参数(有'int') 【发布时间】:2020-11-03 09:17:24 【问题描述】:
#define NVIC_IPR_BASEADDR          (volatile)((uint32_t *)0XE000E400)

#define No_PR_Bits_Implemented     4

void GPIO_IRQPriorityConfig(uint8_t IRQNumber, uint8_t IRQPriority); 

int main(void)


void GPIO_IRQPriorityConfig(uint8_t IRQNumber, uint8_t IRQPriority) 



    //1. First lets find out the IPR register.

    uint8_t iprx= IRQNumber/4;
    uint8_t iprx_section= IRQNumber%4;
    uint8_t shift_amount = (8 * iprx_section) + (8- No_PR_Bits_Implemented);

    *(NVIC_IPR_BASEADDR + iprx * 4 ) |= (IRQPriority << shift_amount); //error line




【问题讨论】:

在那之前你有没有看到编译器的警告? (volatile)((uint32_t *)0XE000E400) 不是指针,因为外部 volatile 默认为 int 类型,因为没有给出显式类型。试试((volatile uint32_t *)0XE000E400) @kaylum 我认为这是一个答案。你想创建一个吗? 问题应该包含完整的编译器错误(不仅仅是一些程序代码和部分错误消息作为标题)。 谢谢,是的,我尝试了同样的方法,问题已解决。谢谢... 【参考方案1】:
#define NVIC_IPR_BASEADDR          (volatile)((uint32_t *)0XE000E400)

这不会导致指针类型。外部(volatile) 没有显式类型,因此将导致类型默认为int。以 gcc 为例,应该会收到类似于以下内容的警告:

warning: type defaults to ‘int’ in type name [-Wimplicit-int]

正确的定义应该是:

#define NVIC_IPR_BASEADDR          ((volatile uint32_t *)0XE000E400)

【讨论】:

以上是关于错误:一元'*'的无效类型参数(有'int')的主要内容,如果未能解决你的问题,请参考以下文章

我收到错误错误类型参数一元减号和预期';'在 ':' 标记之前

参数的无效“类型”(字符)

lsmeans 模型中的参数无效?

领域错误:无效值,期望int和接收:0

将指向 int 数组的指针传递给成员函数,错误:数组下标的无效类型“int [int]”

错误消息:“float”和“int”类型的无效操作数到二进制“operator%”