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-Q1–vTaskStartScheduler () 之前和无 BLE Stack 的 OSAL 使用情况。

Guru**** 2835765 points

Other Parts Discussed in Thread: CC2745R10-Q1

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1622409/cc2745r10-q1-cc2745r10-q1-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 = osal_SNV_read (e_jump_from_APPLN_FLAG_FOR_BOOT_ID、e_jump_from_APPLN_FLAG_FOR_BOOT_LEN、MAIN_EEPROM_READ);
   

        
        
        
        if (MAIN_EEPROM_READ[0]== 0xA5)/*(如果从应用程序跳转)//
        {   
          OSAL_ret_val = osal_SNV_write (e_JUMP_FROM_APPLN_FLAG_FOR_BOOT_ID、e_JUMP_FROM_APPLN_FLAG_FOR_BOOT_LEN、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;
 }

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

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

    您好:  

    首先、您能否提供所使用的 SDK 版本?  

    1.我相信这是一个是的。 您可以 在此处看到一个示例、其中在执行 vTaskStartScheduler() 函数后调用了 osal 函数。  

    我很抱歉耽误你的时间、但我将在下周回复你并回答其他问题。 请期待收到回复星期二 (03/10)。  

    谢谢、
    Isaac

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

    您好、

    SDK 版本: —  simplelink_lowpower_f3_SDK_9_12_00_19。

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

    您好:

    之前不能使用 OSAL API 的预期行为是不是 vTaskStartScheduler()

    是的。 OSAL 表示操作系统抽象层、充当底层 RTOS 的抽象层。 在本例中、由于您使用的是 FreeRTOS、因此需要在使用这些 API 之前启动调度器。

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

    是的。 即使您要使用 POSIX 线程(围绕 FreeRTOS 编写的包装程序)等器件、它仍将使用 FreeRTOS。

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

    只要 FreeRTOS 在系统上运行、就应该可以使用。  

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

    NVS 驱动程序。  NVS.h 文件参考

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

    编号 我不确定为什么您需要在引导加载程序中使用 iCall 或 OSAL、因为这些操作会消耗大量闪存。 引导加载程序通常是轻量级的、没有 RTOS。  

    您能不能详细介绍一下您尝试使用引导加载程序实现的目标? 我可以提供一些更好的支持。

    此致、

    Nima Behmanesh