jyl518-283289 发表于 2019-8-26 15:22:32

HAL+Freertos+USART疑惑?

Freertos初学,请大神指点一二!

在mai()前,执行了如下开中断接收,并把接收到的数据保存在u4_rx_buf中
/* USER CODE BEGIN 2 */
        HAL_UART_Receive_IT(&huart4, u4_rx_buf, 1);//开接收中断
/* USER CODE END 2 */

这个u4_rx_buf,必须定议为全局变量吗?如定议为全局变量会存有有问题吗?
这个u4_rx_buf,能定议在某个任务中吗?

另外,在Freertos中,全局变量能随便定议使用吗,有没有什么说法或什么规则?

发表于 2019-8-27 13:30:36

HAL_UART_Receive_IT需要传入全局变量,这个是中断接收缓冲区用于存放的地址。如果是局部变量会导致指针错误,不能把正确的数据放入到接收缓冲区中。

andeyqi 发表于 2019-8-27 13:21:23

本人对Freertos 不算了解,不过上述的HAL_UART_Receive_IT(&huart4, u4_rx_buf, 1);函数我理解的是必须传个全局的或者静态的空间,或者malloc的空间,如果传个局部变量栈空间,在uart接收中断中使用该变量的话,上述栈空间有可能已经失去了生命周期或者被分配给了别的变量,这样显然不是期待的结果。

mikecai 发表于 2019-8-27 14:08:43

个人认为,Freertos malloc的固定空间 也是可以作接收缓冲区中的,关建是管理好 接收 和Free关系:释放Free该空间意味着接收要关闭。

jyl518-283289 发表于 2019-8-28 08:08:36

非常感谢各位,谢谢!

tanic 发表于 2019-8-28 09:59:19

这么谦虚干嘛,只要没开MPU支持,全局变量随便用,没啥限制:lol
页: [1]
查看完整版本: HAL+Freertos+USART疑惑?