Part Number:CC2640R2F
你好,我想问一下多任务的创建中遇到了一些问题
在APP程序ble5_simple_peripheral_cc2640r2lp_app_FlashROM_StackLibrary.opt设置的ICALL_MAX_NUM_ENTITIES=6 ICALL_MAX_NUM_TASKS=3,
1.ICALL_MAX_NUM_TASKS=3是stack任务,gap任务和用户自定义的任务,一共是三个,但ICALL_MAX_NUM_ENTITIES为什么是6?(3个任务客户端 和 1个icall服务端不应该是4吗?)
2.必须满足 OSAL_MAX_NUM_PROXY_TASKS +1 =ICALL_MAX_NUM_TASKS 吗?其中+1代表的是什么?我设定OSAL_MAX_NUM_PROXY_TASKS 为2,ICALL_MAX_NUM_TASKS 是4,程序还能运行,所以 请问OSAL_MAX_NUM_PROXY_TASKS +1 是<=ICALL_MAX_NUM_TASKS 的关系吗?
3.但是我在ble5_simple_peripheral_cc2640r2lp_app这个例子中,并没有看到向simple_peripheral_cc2640r2lp_app这样的3个任务的初始化,他只显式的给出了两个,请问这是为什么?
4.创建多任务时ICALL_MAX_NUM_ENTITIES、ICALL_MAX_NUM_TASKS、和OSAL_MAX_NUM_PROXY_TASKS都应该修改+1,但是如果我创建的任务的任务函数没有执行Event_pend,没有用到ICall_SyncHandle,或者调用SimplePeripheral_enqueueMsg,使用的是已经存在的ICall_SyncHandle,是不是不用+1?
Yolande Wang:
您好,
您先参照这个用户指南:https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_2_40_00_32/docs/blestack/ble_user_guide/html/ble-stack-3.x/creating-a-custom-bluetooth-low-energy-application.html#creating-additional-icall-enabled-tasks
您的问题比较复杂,我将升级到E2E咨询一下更了解这个协议栈的工程师,请等候一下。
,
Yolande Wang:
我们将调查此事并尽快回复您。为了帮助我们更好地支持,请您帮我回答以下的问题:
您使用的是哪个版本的 SDK?
另外,您使用的完整部件号以及这是否是汽车级设备?
,
jiang chuanli:
您好 使用的是 simplelink_cc2640r2_sdk_4_20_00_04,不是汽车设备
,
Yolande Wang:
好的,已经跟进您的问题,有进展立即回复您。
,
Yolande Wang:
您好,
jiang chuanli 说:1.ICALL_MAX_NUM_TASKS=3是stack任务,gap任务和用户自定义的任务,一共是三个,但ICALL_MAX_NUM_ENTITIES为什么是6?(3个任务客户端 和 1个icall服务端不应该是4吗?)
ICALL_MAX_NUM_ENTITIES 保存使用 ICall 的最大实体数,包括服务实体和应用程序实体。您可能需要查看有关堆栈配置的文档以获取更多详细信息。https://software-dl.ti.com/simplelink/esd/simplelink_cc2640r2_sdk/5.30.00.03/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/stack-configuration-cc2640.html#stack-配置
jiang chuanli 说:2.必须满足 OSAL_MAX_NUM_PROXY_TASKS +1 =ICALL_MAX_NUM_TASKS 吗?其中+1代表的是什么?我设定OSAL_MAX_NUM_PROXY_TASKS 为2,ICALL_MAX_NUM_TASKS 是4,程序还能运行,所以 请问OSAL_MAX_NUM_PROXY_TASKS +1 是<=ICALL_MAX_NUM_TASKS 的关系吗?
主要要求是确保访问 ICall 的任务和实体的数量保持正确(即访问 ICall 的任务数量不超过预定义槽的数量)。
将 ICALL_MAX_NUM_TASKS 设置为 4,您基本上定义了不会使用的其他插槽。因此该程序预计可以运行,但会浪费一些 RAM 内存。
jiang chuanli 说:3.但是我在ble5_simple_peripheral_cc2640r2lp_app这个例子中,并没有看到向simple_peripheral_cc2640r2lp_app这样的3个任务的初始化,他只显式的给出了两个,请问这是为什么?
我想这一点之前已经得到了回答 – 并非所有 ICall 实体都是任务。
jiang chuanli 说:4.创建多任务时ICALL_MAX_NUM_ENTITIES、ICALL_MAX_NUM_TASKS、和OSAL_MAX_NUM_PROXY_TASKS都应该修改+1,但是如果我创建的任务的任务函数没有执行Event_pend,没有用到ICall_SyncHandle,或者调用SimplePeripheral_enqueueMsg,使用的是已经存在的ICall_SyncHandle,是不是不用+1?
换句话说,如果任务访问 ICall 结构,则它应该启用 ICall,这意味着应该调用 ICall_registerApp(),并且 ICALL_MAX_NUM_ENTITIES、ICAALL_MAX_NUM_TASKS 和 OSAL_MAX_NUM_PROXY_TASKS 的值递增。正如您所指出的,某些 ICall API 可能“隐藏”在 SimplePeripheral API 中。
另外,可以点击此链接查看 E2E 的回复:https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1311681/cc2640r2f-some-issues-with-multitasking-creation/4987442#4987442
希望能够帮助到您。