5 posts / 0 new
Last post
jamesleo-konka
Offline
Last seen:3 years 10 months ago
Joined:2017-01-22 02:42
system_init某些指令被阻塞?

Hi Dialog,
在 hrp_sensor 工程中, 初始化在 system_init 中执行。
//----------------------------------------
static void system_init( void *pvParameters )
{
OS_TASK handle;
unsigned char d;
i2c_device dev;

#if defined CONFIG_RETARGET //<--- CONFIG_RETARGET 已经定义,为了使用 printf
extern void retarget_init(void);
#endif
....
....

printf("BLE hrp demo" NEWLINE);

dev = ad_i2c_open(MAX30100); //----初始化 I2C 设备----------------------

MAX30100_reset(dev);
d = MAX30100_read(dev,MAX30100_PART_ID);
printf(NEWLINE "PART ID=%02x",d); //<- 这里就是奇怪的地方了,运行程序,这一句的内容可以正确打印出来, 但是下一句就没有打印出来
d = MAX30100_read(dev,MAX30100_REVISION_ID);
printf(NEWLINE "Revision ID=%02x",d); //<- 这里没有打印出来。。。直到用手机 peer 了设备,这一句才开始打印出来

// Set LED current
MAX30100_setLEDs(dev,i11, i8);
....
....
//----------------------------------------------------------------

说明: 所有的 printf 语句、 I2C 设备的操作程序,都是OK的 --- 除了开始被阻塞的现象以外。
后台是如何阻塞的?
有什么解决办法? I2C 要改为 同步模式? (目前采用的是 ad_i2c_read, ad_i2c_write 函数,貌似是异步的。。。)

谢谢

Device:
Qinjiny_Dialog
Offline
Last seen:5 hours 40 min ago
Staff
Joined:2016-11-01 05:47
有尝试debug模式下一行行跟一下代码跑到这边的具体情况吗

有尝试debug模式下一行行跟一下代码跑到这边的具体情况吗?

jamesleo-konka
Offline
Last seen:3 years 10 months ago
Joined:2017-01-22 02:42
Hi Qinjiny_Dialog,

Hi Qinjiny_Dialog,
没有去跟踪代码debug,没搞清楚什么时候系统会 sleep。。。
整个程序的架构是,在peer后,对 heart rate 服务enable Notify 之后,hrp_sensor_task 里面 for 循环的几个具体的执行代码就被激活了。
开始这个地方 为啥 printf 只打印了一句,真是没想通。 难道 system_init 没有执行完,就sleep啦? 不太对。。。

Qinjiny_Dialog
Offline
Last seen:5 hours 40 min ago
Staff
Joined:2016-11-01 05:47
询问了一下同事,可以尝试一下在每一行打印之后加一行

询问了一下同事,可以尝试一下在每一行打印之后加一行

。fflush(stdout);

来尝试强制把输出缓冲区里的信息刷出来

kingwheat
Offline
Last seen:9 months 3 weeks ago
Joined:2016-12-08 09:21
hi,

hi,
尝试下,每次答应结束的时候,加上结束符 \n