Tobey_YF 发表于 2016-8-21 09:59:55

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);
        }
}

Tobey_YF 发表于 2016-8-21 10:05:56

采用直接在ADC任务中将AD值转换为电阻值,然后存储至数组中,接着在打印任务里取出的方式,串口调试助手中显示的AD值显示正常~~也就是说不能在打印任务中进行转换,,,why???
页: [1]
查看完整版本: RTX下浮点数类型数值无法正常输出问题