keil5 编译错误

[复制链接]
1451|5
 楼主| Peter3th 发表于 2017-7-24 22:47 | 显示全部楼层 |阅读模式
#include"stm32f10x.h"
#define GPIOA_ODR_A (GPIOA_BASE+0X0C)
#define GPIOA_IDR_A (GPIOA_BASE+0X08)
#define BitBand(Addr,BitNum)  *((volatile unsigned long*)((Addr&0xF000 0000)+0x2000000 + (Addr&0xfffff)*32+BitNum*4))
#define PAO(N) BitBand(GPIOA_ODR_A,N)
int main ()
{
  GPIOA->CRL=0X33333333;
  GPIOA->CRH=0X44444444;
while(1)
{
      PAO(3);  //expected a ')'
}
}

编译的时候在上面对应行出现错误:expected a ‘)’。已尝试却无效的解决办法:1)把宏定义中后的分号;去掉     2)删除options for target中 c/c++中define框内的 STM32F10X_HD
请大家帮忙指点一下该怎么解决?谢谢!
xyz549040622 发表于 2017-7-25 09:00 | 显示全部楼层
本帖最后由 xyz549040622 于 2017-7-25 09:02 编辑

本质上是
  1. *((volatile unsigned long*)((Addr&0xF000 0000)+0x2000000 + (Addr&0xfffff)*32+BitNum*4))
这句出了问题,应该是哪里多了一个括号,你仔细查查。
活雷锋yh 发表于 2017-7-25 09:44 | 显示全部楼层
前后大括号或者小括号多了或者少了一个
 楼主| Peter3th 发表于 2017-7-25 14:42 | 显示全部楼层
问题已经解决了
是#define BitBand(Addr,BitNum)  *((volatile unsigned long*)((Addr&0xF000 0000)+0x2000000 + (Addr&0xfffff)*32+BitNum*4))
0xF000 0000中间多了一个空格。
谢谢大家!
dirtwillfly 发表于 2017-7-25 16:25 | 显示全部楼层
Peter3th 发表于 2017-7-25 14:42
问题已经解决了
是#define BitBand(Addr,BitNum)  *((volatile unsigned long*)((Addr&0xF000 0000)+0x2 ...

junpeng324 发表于 2017-7-28 20:54 | 显示全部楼层
一个空格的问题,要仔细点,这种问题多写就会有感觉,一看错误就知道哪错了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

4

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部