DjiCore_ApplicationStart和DjiTest_FcSubscriptionStartService的位置前后关系
我看到下列文档https://developer.dji.com/doc/payload-sdk-api-reference/cn/core/dji-core.html#6中说的是:
- function DjiCore_ApplicationStart
- 说明: 该接口的调用位置需要特别注意,需要在所有模块初始化和注册接口后完成调用。
T_DjiReturnCode DjiCore_ApplicationStart(void);
同时示例代码中DjiCore_ApplicationStart()也是在
DjiTest_FcSubscriptionStartService()之后
订阅的操作建议放在DjiCore_ApplicationStart之后,避免PSDK未初始化完导致无法成功拿到正确的数据。
DjiCore_ApplicationStart和DjiTest_FcSubscriptionStartService正确的位置前后关系是什么?
-
您好,不好意思,这个是我们文档没有说明清楚, 先DjiTest_FcSubscriptionStartService(),后DjiCore_ApplicationStart() DjiTest_FcSubscriptionStartService函数主要是初始化订阅模块,以及订阅一些TOPIC(这些TOPIC开发者可以自行去掉),实际上我们需要的是这个函数中的DjiFcSubscription_Init(),初始化订阅模块以后,您才能使用订阅功能。而知识库中的文档想表明的意思是,您必须要先等DjiFcSubscription_Init()调用完,才能开始订阅,而DjiFcSubscription_Init包含在DjiTest_FcSubscriptionStartService中,DjiTest_FcSubscriptionStartService在DjiCore_ApplicationStart()函数之前,因此您只要在DjiCore_ApplicationStart()之后才开始订阅,可以确保流程和拿到的数据是正确的。 -
意思是:
在main函数中
DjiTest_FcSubscriptionStartService要在DjiCore_ApplicationStart()之前,是因为DjiTest_FcSubscriptionStartService中的DjiFcSubscription_Init()初始化操作要在DjiCore_ApplicationStart()之前完成,与此同时,DjiFcSubscription_SubscribeTopic
和osalHandler->TaskCreate("user_subscription_task", UserFcSubscription_Task,
FC_SUBSCRIPTION_TASK_STACK_SIZE, NULL, &s_userFcSubscriptionThread)不能在DjiTest_FcSubscriptionStartService中,而是要放在main.c的DjiCore_ApplicationStart()之后吗?如果上述成立的话,为什么不能在DjiTest_FcSubscriptionStartService之后(只包含DjiFcSubscription_Init())和DjiCore_ApplicationStart之前去执行订阅操作?在这个时候执行订阅操作时,订阅的初始化DjiFcSubscription_Init也已经完成了。 -
您好,您如果订阅话题和DjiTest_FcSubscriptionStartService中有重复,保持只出现一个DjiFcSubscription_SubscribeTopic,否则会有重复订阅的问题。也就是说,假如您要订阅GPS位置,这个在DjiTest_FcSubscriptionStartService中已经有DjiFcSubscription_SubscribeTopic(DJI_FC_SUBSCRIPTION_TOPIC_GPS_POSITION, DJI_DATA_SUBSCRIPTION_TOPIC_1_HZ, NULL); 那您直接调用DjiFcSubscription_GetLatestValueOfTopic取值即可,不需要再次调用DjiFcSubscription_SubscribeTopic来订阅和设置频率。
请先登录再写评论。
评论
3 条评论