我尝试使用 Sky mote (MSP430 F1611 + CC2420) 以 100Hz 采样频率从 I2C 传感器读取数据并将数据写入串行端口 (USB)。我尝试了几次测试,发现总输出数据的采样频率为 78Hz。我使用 rtimer 来分析我的采样和打印代码,发现打印功能减慢了整个过程。以下是一些分析输出:
start 50628
15490,f074,20,3b8c,ffab,49,ffcf,fb70
end 51189
start 51293
15491,f0a8,fff4,3ba4,ffc6,24,ffd8,fb90
end 51880
start 51984
15492,f094,20,3b30,ffa7,5b,fff3,fb70
end 52544
start 52647
15493,f118,bc,3ce0,ffab,70,fffc,fb90
end 53207
start 53311
15494,f030,1b0,3b44,ffa9,1f7,1f,fb80
end 53871
rtimer 一秒钟有 4098*8 个滴答声。在这里我们可以清楚地看到打印大约需要 560 个滴答声(17 毫秒)。如果采样频率为 100Hz,则打印功能应在 10ms(327 个滴答声)内完成。
我使用的嵌入式系统是Contiki OS,波特率为115200(最大波特率)。传感器样本包含 112 字节的有符号整数。
这是我的代码:
mpu_data_union samples;
int m=mpu_sample_all(&samples);
printf("start %u\n",RTIMER_NOW());
printf("%lu,%x,%x,%x,%x,%x,%x,%x\n",
counterxx,samples.data.accel_x,samples.data.accel_y,
samples.data.accel_z,samples.data.gyro_x,
samples.data.gyro_y,samples.data.gyro_z,
samples.data.temperature);
printf("end %u\n",RTIMER_NOW());
我希望一些在优化 printf 或 UART 方面有经验的人可以提供一些建议。
谢谢!