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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版