RTX下浮点数类型数值无法正常输出问题
在裸奔程序中,循环获取7个通道的AD值并将转换为电阻后逐个打印,串口助手中显示正常,代码如下;
i=0;
while (1)
{
Change_Channel(i);
ADS1248_Start(ADC_MODE_SINGLECOV);
ADS1248_WaitBusy();
Data=ADS1248_Read();
R = (Data/8388607.0/8)*2*820+180;
printf("%5.2f, ",R);
i++;
if(i==7)
{
i=0;
printf("\n");
};
}
现将其移植到RTX系统中,启用单任务时运行正常:
__task void adcTask (void) {
ADS1248_Init(ADC_GAIN_8|ADC_SPS_20);
int8_t chanel = 0;
float R;
for (;;) {
int32_t Data;
Data = ADS1248_Channel_Data(chanel);
R = (Data/8388607.0/8)*2*820+180;
printf("%5.2f, ", R);
chanel++;
if(chanel==7)
{
printf("\n");
chanel=0;
};
os_dly_wait(10);
}
}
接着将AD转换与打印数据分离实现,启用一个新的任务用于打印AD数据,因此在AD任务中将7个通道的AD值逐个存入float类型数组R中,并在打印任务中打印AD值。结果AD值无法正常显示,数据显示如下图所示,,
请问有人遇到过类似的情况吗?是什么原因造成的?
(补充:测试时发现将SPI的时钟配置修改为70KHz后,AD值将正常显示,,原始SPI时钟频率为140KHz,根据AD数据手册时序要求得到SPI时钟频率的上限为2MHz,所以应该不是SPI的问题,应该只是有所牵连,具体问题出自于哪还望大神们解惑!!)
__task void printfTask (void) {
for (;;) {
int i;
for(i=0; i<7; i++)
{
printf("%5.2f, ", (chanelDataArray/8388607.0/8)*2*820+180);
}
printf("\n");
os_dly_wait(100);
}
}
采用直接在ADC任务中将AD值转换为电阻值,然后存储至数组中,接着在打印任务里取出的方式,串口调试助手中显示的AD值显示正常~~也就是说不能在打印任务中进行转换,,,why???
页:
[1]