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.

[参考译文] CC2745R10-Q1:CC2745R10–在 vTaskStartScheduler () 之前或无 BLE Stack 时的 OSAL 使用情况。

Guru**** 2796425 points

Other Parts Discussed in Thread: CC2745R10-Q1

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1621852/cc2745r10-q1-cc2745r10-osal-usage-before-vtaskstartscheduler-and-without-ble-stack

器件型号: CC2745R10-Q1

TI 团队大家好、

我正在使用 FreeRTOS 和 iCall/OSAL 为 CC2745R10-Q1 器件开发定制的 CAN/UDS 引导加载程序。

我的当前流程为:

  • BOARD_INIT ()

  • iCall_init()

  • iCall_createRemoteTasks ()

  • 引导判定逻辑

  • vTaskStartScheduler()

在引导决策阶段(调用前)vTaskStartScheduler(),我尝试使用 OSAL API ,例如:

用户_osal_read() 
User_osal_Write ()

但是、在调度器启动之前、这些 API 无法正常运行(挂起,无法获得关于终止调试会话的控制权)。  vTaskStartScheduler()调用 API 并且在任务上下文中使用 API 后、它们将按预期工作。


我想澄清以下几点:

  1. 之前不能使用 OSAL API 的预期行为vTaskStartScheduler()是什么?

  2. OSAL 是否严格要求 FreeRTOS 任务上下文才能运行?

  3. OSAL 是否与 BLE 栈紧密耦合、或者是否可以单独使用?

  4. 在不启用或运行 BLE 栈的情况下是否可以使用 OSAL?

  5. 对于引导加载程序用例(无需 BLE 功能)、建议使用什么方法在调度器启动之前访问 NVM 服务?

  6. 使用不带 BLE 的 iCall/OSAL 时、TI 是否为 CC27xx 器件推荐了引导加载程序架构?

我的目标是:

  • 执行引导决策(跳转到应用程序或保持在引导状态)

  • 如果可能、使用基于 OSAL 的 NVM 存储

  • 避免在引导加载程序中启用 BLE 堆栈

请参考 Boot Manager main():

unsigned char osal_ret_val = 0;
内部 main (void)
 {
    pthread_t thread;
    pthread_attr_t attrs;
    结构 sched_param priParam;
    内部视网膜;
    int uds_schedular;
    uint32_t reloadValue =0;
    Watchdog_Handle watchdogHandle;
    unsigned char MAIN_EEPROM_READ[4]={0};
    unsigned char MAIN_EEPROM_CLEAR[2]={0x00,0x00};
    unsigned char MAIN_EEPROM_READ_1[2]={0xA5、0x02};
    unsigned char MAIN_EEPROM_READ_TEST[4]={0};
    unsigned char Security_timer_enable[2]={0};

 

    /*注册应用程序回调到在堆栈中提出的陷阱断言*/
     halAssertBack=AssertHandler;
     RegisterAssertBack(AssertHandler);


     /*初始化系统锁*/
      board_init ();//时钟和外设的初始化。
      /*更新堆栈的用户配置*/
       user0Cfg.appServiceInfo->timerTickPeriod = iCall_getTickPeriod ();
       user0Cfg.appServiceInfo->timerMaxMillisecond = iCall_getMaxMSecs();

       /*初始化所有应用程序任务*/
       ///hzjk();
       /*初始化 iCall 模块*/
       iCall_init();

       /*启动外部映像的任务 — 优先级 5 */
       iCall_createRemoteTasks ();


        CheckAndClearResetCause ();//重置原因。
        /*看门狗初始化*/
        watchdog_initialization();
        OSAL_ret_val = USER_OSAL_READ (e_JUMP_FROM_APPLN_FLAG_FOR_BOOT_ID、       MAIN_EEPROM_READ);
        
        
        
        if (MAIN_EEPROM_READ[0]== 0xA5)/*(如果从应用程序跳转)//
        {   
          USER_OSAL_Write (e_JUMP_FROM_APPLN_FLAG_FOR_BOOT_ID、MAIN_EEPROM_CLEAR);
          init_boot();
        }
        暴露
        {
          To_Appln ();
        }
        Software_Timer_Init ();//软件计时器初始化

       xTaskCreate (Tp_Scheduler_Task、“CAN NULL“、STACK_SIZE、Tp_Scheduler_Task、4、 空);
       xTaskCreate (uds_scheduler_task、“uds_scheduler_task",“,stack_size、stack_size、NULL、3、 空);

       machly_boot_entry();

       /*启动 FreeRTOS 调度程序*/
           vTaskStartScheduler();
  返回 0;
 }

我希望获得关于正确架构方法的指导。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:  

    此主题已再次发布。 我将关闭此线程并使用较新的线程。  

    谢谢、
    Isaac