STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题

printf的重定向代码是 如下。

STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题

本程序实现的功能是DMA传输3路ADC,同时将ADC采样的数据在UCOSII的其中一个任务中实现。

三种情况:1、将打印放在UCOS的任务中打印浮点数格式

                2、将打印放在UCOS的任务中打印十六进制格式

                3、将打印放在主循环中(即未启动USOS等的初始化,相当于裸跑)

(一)异常现象:当在UCOS的某一个任务中用printf打印数据 打印浮点数格式时 ,串口打印出现如下现象:

STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题


STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题


(二)程序不变,只改变printf的打印格式,如下图红框所示,打印的十六进制数据如下。

STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题


STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题

(三)

将打印放在主循环 即裸跑,打印浮点数格式,数据完全正常

STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题


STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题


以上为发现的问题BUG。

参照网上资料,将堆栈8字节对其即可 。我将__align(8)写在了 main.c文件开头,已生效,打印浮点数正常

STM32平台下DMA传输ADC数据 采用UCOSII 在任务中用printf打印float浮点数出现打印0和乱码问题