ошибка: недопустимый аргумент типа унарного '*' (имеет 'int') - PullRequest
0 голосов
/ 14 июля 2020
#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

}

}

1 Ответ

1 голос
/ 14 июля 2020
#define NVIC_IPR_BASEADDR          (volatile)((uint32_t *)0XE000E400)

Это не приводит к типу указателя. Внешний (volatile) не имеет явного типа и, таким образом, приведет к типу по умолчанию int. Например, с g cc должно появиться предупреждение, подобное следующему:

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

Правильное определение должно быть:

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