[讨论] 关于条件定义的问题

zhuzd   2018-10-23 08:55 楼主
#ifndef CONF_SERCOM_0_USART_BAUD
//#define CONF_SERCOM_0_USART_BAUD 9600
   #if (*(__IO uint8_t*)(((uint32_t)0x44000000))==0x01)
        #define CONF_SERCOM_0_USART_BAUD 2400
   #elif (*(__IO uint8_t*)(SEEPROM_ADDR+15)==0x02
        #define CONF_SERCOM_0_USART_BAUD 4800
   #elif (*(__IO uint8_t*)(SEEPROM_ADDR+15)==0x03
        #define CONF_SERCOM_0_USART_BAUD 9600
   #elif (*(__IO uint8_t*)(SEEPROM_ADDR+15)==0x04
        #define CONF_SERCOM_0_USART_BAUD 115200
   #else
        #define CONF_SERCOM_0_USART_BAUD 2400
#endif

#endif
这种定义方式为什么报错啊  “operator '*' has no left operand”这是错误信息

回复评论 (4)

以前STM32 用过这种方式  现在换成atmel studio编译器 换成ATSAM芯片  这种方式就不行了么?
点赞  2018-10-23 08:56
你上面的代码少了一堆右括号,但我觉得这不是重点
你这个要实现的功能,不能用宏定义来实现,宏定义是在编译的预处理时期进行处理的,而你上面写的代码,需要在运行期才能判断的出来。在编译时期是编译器在pc上分析程序,怎么能知道硬件电路存储器里面的内容呢?
点赞  2018-10-23 09:12
引用: lcofjp 发表于 2018-10-23 09:12
你上面的代码少了一堆右括号,但我觉得这不是重点
你这个要实现的功能,不能用宏定义来实现,宏定义是在编 ...

哦  知道啊  谢谢  但是我记得我以前stm32 这样操作过
点赞  2018-10-23 09:40
引用: lcofjp 发表于 2018-10-23 09:12
你上面的代码少了一堆右括号,但我觉得这不是重点
你这个要实现的功能,不能用宏定义来实现,宏定义是在编 ...

确实太作孽了。
这也算是 活久见了。

到底是怎样的作孽,才会想到在编译期间确定 波特率。
强者为尊,弱者,死无葬身之地
点赞  2018-10-25 00:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复