stm32cubemx生成驱动程序里面的变量,如何被main函数调用

用stm32cubemx生成了一个串口中断程序,功能实现了对不定长输入字符的统计和输出打印,在主函数写了回调函数void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

想重新排版,把回调函数放到UART.c里面,

考虑到main.c和uart.c有公用的变量。在uart.h定义了extern变量

/* USER CODE BEGIN Private defines */

extern uint8_t rx_flag; //输入结束的标志位
extern uint8_t uart_rxbuf[100]; //输入数据的缓存区
extern uint8_t uart_rx[1];//输入字符
extern uint16_t len;
/* USER CODE END Private 

编译报错。

 L6200E: Symbol rx_flag multiply defined (by usart.o and main.o).

很奇怪,因为目前变量只在uart.h中定义。

后面看了下正点原子的例程,是把extern变量放到uart.h的最下方,

然后我照着把这几个变量挪到相同的位置,编译后,还是报错。

uart-itzhongduan\uart-itzhongduan.axf: Error: L6200E: Symbol HAL_UART_RxCpltCallback multiply defined (by usart.o and main.o).

然后去查看,发现main.c也有中断回调函数,删掉。在编译一次。

还是不行。

最笨的方法没在main.c 也复制一份。

uint8_t rx_flag=0; //输入结束的标志位
uint8_t uart_rxbuf[100]; //输入数据的缓存区
uint8_t uart_rx[1];//输入字符
uint16_t len;
uint16_t uart_state;
再来编译一次。

"uart-itzhongduan\uart-itzhongduan.axf" - 0 Error(s), 0 Warning(s).

补充:

又过了一个月时间。现在有了新的认识。

和大家分享讨论。

对于extern,外部声明的使用。

在某个.c文件中定义一个变量,然后其他.c想使用这个变量。

在.c 或.h中通过添加extern ,都可以正常使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值