你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

RTX下浮点数类型数值无法正常输出问题

[复制链接]
Tobey_YF 提问时间:2016-8-21 09:59 /


在裸奔程序中,循环获取7个通道的AD值并将转换为电阻后逐个打印,串口助手中显示正常,代码如下;
  1. i=0;
  2. while (1)
  3. {
  4.     Change_Channel(i);        
  5.         ADS1248_Start(ADC_MODE_SINGLECOV);
  6.         ADS1248_WaitBusy();
  7.         Data=ADS1248_Read();
  8.         R = (Data/8388607.0/8)*2*820+180;
  9.         printf("%5.2f,   ",R);
  10.        
  11.         i++;
  12.         if(i==7)
  13.         {
  14.                         i=0;
  15.           printf("\n");
  16.         };        
  17.                
  18. }
复制代码


现将其移植到RTX系统中,启用单任务时运行正常:
  1. __task void adcTask (void) {
  2.         ADS1248_Init(ADC_GAIN_8|ADC_SPS_20);
  3.         int8_t chanel = 0;
  4.         float R;
  5.         for (;;) {
  6.                 int32_t Data;

  7.                 Data = ADS1248_Channel_Data(chanel);
  8.                 R = (Data/8388607.0/8)*2*820+180;
  9.                 printf("%5.2f,   ", R);
  10.                 chanel++;
  11.                 if(chanel==7)
  12.                 {
  13.                                 printf("\n");
  14.                                 chanel=0;
  15.                 };        
  16.                 os_dly_wait(10);
  17.         }
  18. }
复制代码
单任务.png

接着将AD转换与打印数据分离实现,启用一个新的任务用于打印AD数据,因此在AD任务中将7个通道的AD值逐个存入float类型数组R中,并在打印任务中打印AD值。结果AD值无法正常显示,数据显示如下图所示,,
请问有人遇到过类似的情况吗?是什么原因造成的?
(补充:测试时发现将SPI的时钟配置修改为70KHz后,AD值将正常显示,,原始SPI时钟频率为140KHz,根据AD数据手册时序要求得到SPI时钟频率的上限为2MHz,所以应该不是SPI的问题,应该只是有所牵连,具体问题出自于哪还望大神们解惑!!)

  1. __task void printfTask (void) {
  2.         
  3.         for (;;) {
  4.                
  5.                 int i;
  6.                 for(i=0; i<7; i++)
  7.                 {
  8.                                 printf("%5.2f,   ", (chanelDataArray[i]/8388607.0/8)*2*820+180);
  9.                 }
  10.                 printf("\n");
  11.                 os_dly_wait(100);
  12.         }
  13. }
复制代码
2.png
收藏 评论1 发布时间:2016-8-21 09:59

举报

1个回答
Tobey_YF 回答时间:2016-8-21 10:05:56
采用直接在ADC任务中将AD值转换为电阻值,然后存储至数组中,接着在打印任务里取出的方式,串口调试助手中显示的AD值显示正常~~也就是说不能在打印任务中进行转换,,,why???

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版