This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何使用CCS的TI-RTOS profiling tools查看task stack 最高使用率?

Other Parts Discussed in Thread: CC2640, LAUNCHXL-CC2640R2

目前使用simple_peripheral工程,添加PTM之后,再添加一个自定义的task。由于CC2640 RAM空间不足,导致iphone与CC2640配对失败。因此,目前需要利用CCS查看task stack 最高使用率,以便于调节 task stack size。请问如何使用TI-RTOS profiling tools这个工具查看task stack 最高使用率?


1、根据SDK中的官方文档《TI-RTOS Overview》,可知CCS中的 TI-RTOS profiling tools可以查看peak task stack usage,如图1所示。该工具在CCS中的位置如图2所示。请问如何使用这个工具查看task stack 最 高使用率? SDK中的官方文档《TI-RTOS Overview》的链接见附件4。

图1

图2

2、我的代码配置步骤如下:
(1)在simple_peripheral工程中添加PTM,具体的添加方法,参见帖子1和帖子2,其链接见附件4。

(2)继续在simple_peripheral工程中添加自定义的task。代码如下所示:

/************************ main.c 文件 ***************************************/
#define COM_TASK_STACK_SIZE    512
#define COM_TASK_PRIORITY      2

uint8_t comTaskStack[COM_TASK_STACK_SIZE];
Task_Struct comTaskStruct;

int main()
{
  Task_Params comTaskParams;
  Task_Params_init(&comTaskParams);
  comTaskParams.stack = comTaskStack;
  comTaskParams.stackSize = COM_TASK_STACK_SIZE;
  comTaskParams.priority = COM_TASK_PRIORITY;

  RegisterAssertCback(AssertHandler);

  PIN_init(BoardGpioInitTable);

  #ifdef ICALL_JT
    user0Cfg.appServiceInfo->timerTickPeriod      = Clock_tickPeriod;
    user0Cfg.appServiceInfo->timerMaxMillisecond  = ICall_getMaxMSecs();
  #endif

  ICall_init();
  ICall_createRemoteTasks(); /* Start tasks of external images - Priority 5 */

  Task_construct(&comTaskStruct, COM_Task_Fxn, &comTaskParams, NULL);

  /* Start task for NPI task */  
  if(PIN_getInputValue(CC2640R2_LAUNCHXL_SPI0_SRDY))
  {
      NPITask_createTask(ICALL_SERVICE_CLASS_BLE);
  } 

  GAPRole_createTask();                            /* Kick off profile - Priority 3        */

  SimpleBLEPeripheral_createTask();                /* Priority 1                           */

  BIOS_start();                                    /* enable interrupts and start SYS/BIOS */

  return 0;
}


/************************ com_task.c 文件 ***************************************/

void COM_Task_Fxn(UArg a0, UArg a1)
{
    uint32_t COMTask_events;

    uint8_t read_test_length = 0;
    uint8_t read_test_buf[SPI_FRAME_DATA_LEN_MAX]={0x00,};

    COM_Task_inititializeTask();

    for (;;)
    {.
      ............
    }
}


static void COM_Task_inititializeTask(void)
{
    Event_Params evParams;
    Event_Params_init(&evParams);

    Event_construct(&spiEvent, &evParams);
    SPISyncEvent = Event_handle(&spiEvent);

    COM_TL_initTL();

}

(3)添加自定的task的步骤,参照SDK中的官方文档《Initializing a Task》,如图3所示。关键是 task stack size 不可小于 512 bytes,且task priority不可高于GapRole task。SDK中的官方文档 《Initializing a Task》的链接见附件4。

图3

3、我的代码调试结果如下:
(1)使用CCS的ROV功能,可以看到新建的任务初始化成功,如图4所示:

图4

(2)从图4中可知,任务初始化成功,而且可以看到stack Base。目前CC2640的SRAM为20kB,如图5所示。

图5

4、附件
(1)SDK中的官方文档《TI-RTOS Overview》的链接
file:///C:/ti/simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/cc2640/rtos-overview.html#

(2)SDK中的官方文档《Initializing a Task》的链接
file:///C:/ti/simplelink_cc2640r2_sdk_1_40_00_45/docs/blestack/ble_user_guide/html/cc2640/rtos-overview.html#initializing-a-task


(3)帖子1


(4)帖子2


(5)PTM测试教学视频链接

(6)simplelink_cc2640r2_sdk_1_40_00_45 可从如下路径下载:

(7)CC2640R2 launchpad 可从这里购买:


5、开发环境
CCS:Code Composer Studio 7.2.0
SDK:simplelink_cc2640r2_sdk_1_40_00_45
hardware:CC26640R2 launchpad develop kit
系统:win7 64 位