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.

[参考译文] CC1312R:在 TI-RTOS7中定义任务

Guru**** 2540610 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1130859/cc1312r-define-task-in-ti-rtos7

器件型号:CC1312R
Thread 中讨论的其他器件:SysConfigSYSBIOS

您好,

我致力于迁移到 TIRTS7。

我运行在 TI RTOS 上运行的代码、并在调试模式期间收到此错误

此错误在函数中跳转:  

Task_handle Task_con构(Task_Object *任务、Task_Functr fxn、const Task_Params *参数、Error_Block * EB)

调用 Task_instance_init (task、fxn、params、EB)时;

函数输入参数的值:  

1.当我转到 TI-RTOS7时、我需要更改任务定义/int 中的内容

2.您是否有示例项目展示如何在 TI-RTOS7中定义任务

请提供建议  

提前感谢  

照烧  

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

    你好,Yaki

    不幸的是、我不是这方面的专家、所以我要求 SW 研发部门提供帮助、但他们今天都在忙。

    TI-RTOS7中的所有新示例都使用 POSIX、这意味着它们将使用 POSIX 线程而不是任务。

    请参阅  

    POSIX Project Zero (TI.com)

    在这里、您将看到如何 使用 POSIX API 创建使用 TI-RTOS 内核 API 创建的任务。

    请告诉我、如果您认为这很有用、或者当软件团队回来时、我需要咨询其他人来帮助解决这个问题。

    BR

    Siri

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

    您好,Siri,

    感谢您的帮助。

    目前、我尝试在没有太多更改的情况下移动到 RTOS7。 因此、我更喜欢使用旧任务定义来解决这个问题。

    谢谢  

    照烧  

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

    你好、Yaki、

    创建导致设备错误的任务(根据 原始帖子中的信息推断)不是通过使用任务模块的方式来创建的、因为此任务(idleTask、 因为它可以从参数中的名称推断)是内核生成的内部任务。  

    我怀疑这可能来自从较旧版本的 RTOS 迁移时的 tirtos7配置。  

    首先、您是否已经遵循在线提供的移植指南"TI-RTOS 至 TI_RTOS7迁移"?

    您能否提供有关如何执行迁移的更多详细信息? 这样做的最佳方法是从 simplelink SDK 中的空项目开始、并且几乎不移植项目的模块、检查新引入的功能是否不会中断项目。

    您是否还可以共享为您的新 TIRTOS7项目创建的 SysConfig 文件?

    此致、

    高斯图

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

    您好!

    是的,我阅读了迁移说明,找不到与此问题相关的内容。

    我的迁移过程基于 TI 空示例代码,但我不是将文件添加到空项目,而是复制项目配置和 SysConfig 文件,可能我错过了一些内容。

    我添加了我的 syscfg 文件  

    /**
     * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
     * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
     * @cliArgs --device "CC1312R1F3RGZ" --package "RGZ" --part "Default" --rtos "tirtos7" --product "simplelink_cc13xx_cc26xx_sdk@6.20.00.29"
     * @versions {"tool":"1.13.0+2554"}
     */
    
    /**
     * Import the modules used in this configuration.
     */
    const AESECB       = scripting.addModule("/ti/drivers/AESECB", {}, false);
    const AESECB1      = AESECB.addInstance();
    const AESECB2      = AESECB.addInstance();
    const Board        = scripting.addModule("/ti/drivers/Board");
    const ECDH         = scripting.addModule("/ti/drivers/ECDH", {}, false);
    const ECDH1        = ECDH.addInstance();
    const GPIO         = scripting.addModule("/ti/drivers/GPIO");
    const Power        = scripting.addModule("/ti/drivers/Power");
    const RF           = scripting.addModule("/ti/drivers/RF");
    const SHA2         = scripting.addModule("/ti/drivers/SHA2", {}, false);
    const SHA21        = SHA2.addInstance();
    const SPI          = scripting.addModule("/ti/drivers/SPI", {}, false);
    const SPI1         = SPI.addInstance();
    const TRNG         = scripting.addModule("/ti/drivers/TRNG", {}, false);
    const TRNG1        = TRNG.addInstance();
    const Temperature  = scripting.addModule("/ti/drivers/Temperature");
    const UART         = scripting.addModule("/ti/drivers/UART", {}, false);
    const UART1        = UART.addInstance();
    const Watchdog     = scripting.addModule("/ti/drivers/Watchdog", {}, false);
    const Watchdog1    = Watchdog.addInstance();
    const Settings     = scripting.addModule("/ti/posix/tirtos/Settings");
    const BIOS         = scripting.addModule("/ti/sysbios/BIOS");
    const GateHwi      = scripting.addModule("/ti/sysbios/gates/GateHwi");
    const GateMutexPri = scripting.addModule("/ti/sysbios/gates/GateMutexPri");
    const GateSwi      = scripting.addModule("/ti/sysbios/gates/GateSwi");
    const GateTask     = scripting.addModule("/ti/sysbios/gates/GateTask");
    const Event        = scripting.addModule("/ti/sysbios/knl/Event");
    const Idle         = scripting.addModule("/ti/sysbios/knl/Idle", {}, false);
    const Idle2        = Idle.addInstance();
    const Mailbox      = scripting.addModule("/ti/sysbios/knl/Mailbox");
    const Error        = scripting.addModule("/ti/sysbios/runtime/Error");
    const SysCallback  = scripting.addModule("/ti/sysbios/runtime/SysCallback");
    const Timestamp    = scripting.addModule("/ti/sysbios/runtime/Timestamp");
    const Load         = scripting.addModule("/ti/sysbios/utils/Load");
    
    /**
     * Write custom configuration values to the imported modules.
     */
    AESECB1.$name = "CONFIG_AESECB_0";
    
    AESECB2.$name = "CONFIG_AESECB_1";
    
    Board.generateInitializationFunctions = false;
    
    ECDH1.$name = "CONFIG_ECDH_0";
    
    const CCFG              = scripting.addModule("/ti/devices/CCFG", {}, false);
    CCFG.ccfgTemplate.$name = "ti_devices_CCFG_CCFGCC26XXTemplate0";
    
    SHA21.$name = "CONFIG_SHA2_0";
    
    SPI1.$name                    = "Board_SPI0";
    SPI1.spi.$assign              = "SSI1";
    SPI1.spi.sclkPin.$assign      = "ball.27";
    SPI1.spi.misoPin.$assign      = "ball.26";
    SPI1.spi.mosiPin.$assign      = "ball.21";
    SPI1.spi.dmaRxChannel.$assign = "DMA_CH16";
    SPI1.spi.dmaTxChannel.$assign = "DMA_CH17";
    
    TRNG1.$name = "CONFIG_TRNG_0";
    
    UART1.$name               = "Board_UART0";
    UART1.uart.$assign        = "UART0";
    UART1.uart.txPin.$assign  = "ball.18";
    UART1.uart.rxPin.$assign  = "ball.6";
    UART1.txPinInstance.$name = "CONFIG_GPIO_0";
    UART1.rxPinInstance.$name = "CONFIG_GPIO_1";
    
    Watchdog1.$name            = "CONFIG_WATCHDOG_0";
    Watchdog1.watchdog.$assign = "WDT0";
    
    BIOS.assertsEnabled = false;
    BIOS.heapBaseAddr   = "__primary_heap_start__";
    BIOS.heapEndAddr    = "__primary_heap_end__";
    
    const Hwi           = scripting.addModule("/ti/sysbios/family/arm/m3/Hwi", {}, false);
    Hwi.enableException = false;
    
    const Clock      = scripting.addModule("/ti/sysbios/knl/Clock", {}, false);
    Clock.tickPeriod = 10;
    
    const Timer       = scripting.addModule("/ti/sysbios/family/arm/cc26xx/Timer", {}, false);
    Timer.rtc.$assign = "RTC0";
    
    Idle2.$name   = "powerIdle";
    Idle2.idleFxn = "Power_idleFunc";
    
    const Semaphore            = scripting.addModule("/ti/sysbios/knl/Semaphore", {}, false);
    Semaphore.supportsPriority = false;
    
    const Swi         = scripting.addModule("/ti/sysbios/knl/Swi", {}, false);
    Swi.numPriorities = 6;
    
    const Task             = scripting.addModule("/ti/sysbios/knl/Task", {}, false);
    Task.defaultStackSize  = 512;
    Task.idleTaskStackSize = 512;
    Task.numPriorities     = 6;
    
    Error.policy       = "Error_SPIN";
    Error.printDetails = false;
    
    const System           = scripting.addModule("/ti/sysbios/runtime/System", {}, false);
    System.abortFxn        = "System_abortSpin";
    System.exitFxn         = "System_exitSpin";
    System.extendedFormats = "%f";
    System.supportModule   = "SysCallback";
    

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

    您好,

    这是我运行的代码

    静态 uint8_t g_detectorStack[detecter_task_stack_size];
    静态 Task_Params g_detectorTaskParams;
    静态 Task_Structg_detetetectorTaskStruct;
    静态 Task_handle g_detectorTaskHandle;
    ERROR_Block EB;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    //! 初始化探测器任务
    void deter_initTask( void )

    //为任务设置事件对象
    event_construct(&eventStruct, NULL );
    eventandler = Event_Handle (&eventStructt);

    //初始化任务处理程序
    Task_Params_init (&g_detectorTaskParams);
    G_detectorTaskParams.STACKSIZE = detector_task_stack_size;
    G_detectorTaskParams.priority = detector_task_priority;
    G_detectorTaskParams.stack =&g_detectorStack[0];

    ERROR_INIT (&EB);//初始化错误块变量
    /*
    静态 Task_Structg_detetetectorTaskStruct;
    typedef void (* Task_FuncPtr)(uintptr_t arg1、uintptr_t arg2);

    Task_handle Task_construct( Task_Object *任务、Task_Functr fxn、const Task_Params *参数、Error_Block * EB)
    *
    // Task_construct(&g_detectorTaskStruct,detecter_taskHandler,&g_detectorTaskParams,&EB );
    // g_detectorTaskHandle = Task_handle (&g_detectorTaskStruct);

    G_detectorTaskHandle = Task_create (detecter_taskHandler、&g_detectorTaskParams、&EB);
    if (g_detectorTaskHandle == NULL)

    logger(“设备任务创建失败”);
    ERR( deter_task_create_error );

    //init 任务 Q
    eventQ_init();
    eventQ_setDataBuffer (EVENTQ_Detector、g_eventQBuffer、size_for_EVENTQ_buffer);

    错误跳转打开:  

    G_detectorTaskHandle = Task_create (detecter_taskHandler、&g_detectorTaskParams、&EB);

    任务参数为:  

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

    您好!

    我将此代码添加 到 rfUARTBridge_CC1312R1_LAUNCHXL_tirtos7_IAR。 示例:

    #include

    /******** /
    静态 uint8_t g_detectorStack[THREADSTACKSIZ];
    静态 Task_Params g_detectorTaskParams;
    静态 Task_Structg_detetetectorTaskStruct;
    静态 Task_handle g_detectorTaskHandle;
    ERROR_Block EB;

    void deter_taskHandler (uintptr_t arg1、uintptr_t arg2)

    while (1);

    /******** /

    int main (空)

    pthread_t 线程;
    pthread_attr_t atttrs;
    struct sched_param primParam;
    int retc;
    int detachState;

    /*调用驱动程序初始化函数*/
    Board_initGeneral();
    GPIO_init();

    /******** /
    //初始化任务处理程序
    Task_Params_init (&g_detectorTaskParams);
    G_detectorTaskParams.STACKSIZE = THREADSTACKSIZE;
    G_detectorTaskParams.priority = 2;
    G_detectorTaskParams.stack =&g_detectorStack[0];

    G_detectorTaskHandle = Task_create (detecter_taskHandler、&g_detectorTaskParams、&EB);
    if (g_detectorTaskHandle == NULL)

    while (1);

    /******** /

    /*设置优先级和堆栈大小属性*/

    .

    Task_create 正常工作  

    照烧  

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

    你好、Yaki、

    我尝试复制您在 IAR 中看到的错误。 在我使用 SDK 6.20.00.29进行设置并将代码移植到空示例中时,我可以运行 Task_Create()来创建和运行任务。 我还尝试在我的示例中使用您的 SysConfig 文件、但这不会导致任何问题。 在 TI 提供的"干净"示例中使用 Task_create()也同样成功,因此我认为错误可能出现在 探测器_initTask()之前执行的代码中。

    当你说 Task_create 失败时、你会看到它返回一个 NULL 句柄或者 它是否生成一个故障?

    此致、

    高斯图

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

    您好,Fausto,

    我使用您的建议成功地解决了这个问题,从空项目.syscfg 文件开始,并根据我的项目需求进行更新。

    但现在我遇到了不同的问题(如果您愿意,我将打开新的票证)

    因为我们的系统在没有 syscfg 系统的情况下工作,所以我们在 board.h 文件中定义了所有端口。

    当我与 syscfg 系统一起使用时,它会生成 BoardGpioInitTable 和所有端口定义。

    要绕过此配置,我创建应用程序板初始化函数:

    #define GPIO_Table_size sizeof (BoardGpioInitTable)*31.

     void board_init_application (void)


         uint32_t len = gpio_table_size;
         GPIO_PinConfig * p_temp;
         P_temp = gpioPinConfigs (&G);
         

         //将我的 IO 表复制到 BoardGpioInitTable

         memcpy (p_temp、&BoardGpioInitTable、len);

          Board_init();

    此函数将我的端口定义表复制到 BoardGpioInitTable,并 绕过 syscfg 端口配置。

    此函数在空工程中正常工作、但在运行 Board_init();->GPIO_init()时在工程中正常工作 ;我收到此错误:

    您是否知道发生这种情况的原因以及我如何避免这种情况?

    谢谢  

    照烧  

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

    你好、Yaki、  

    感谢您对该问题的更新。 是的、请打开一个新线程、因为问题与原始线程无关、所以很好。 我将关闭此主题并帮助您完成新创建的主题。

    此致、

    高斯图