TMOS问题请教

在BLE broadcaster基础上测试TMOS调度,发现在ProcessEvent里第一行增加PRINT("LED_Process:%x\n",events);能正常调度,注释掉这行就不行,非常神奇,附件是完整代码包,帮忙看看什么原因,谢谢。

icon_rar.gifEVT.rar

深入测试了一下,发现和这个打印语句中的\n有关系,去掉\n不能调度,加上\n能正常调度。


uint16_t LED_ProcessEvent(uint8_t task_id, uint16_t events)

{


    PRINT("LED_Process:%x\n",events);

        //消息处理

    if ( events & SYS_EVENT_MSG )

    {

        uint8_t *pMsg;

        if ( (pMsg = tmos_msg_receive( task_id )) != NULL )

        {

            //消息处理

          //  demo_task_process_TMOSMsg( (tmos_event_hdr_t *)pMsg );

            //释放消息空间

            tmos_msg_deallocate( pMsg );

        }

        // return unprocessed events

        return (events ^ SYS_EVENT_MSG);

    }


    if(events & LED_4)

    {

        // Start the Device

     //   DelayMs(1000);

        PRINT("LED4");

        GPIOA_InverseBits(bPWM7);//PB4

        tmos_start_task(LedFlashTaskId, LED_4, 1600);

        return (events ^ LED_4);

    }


    if(events & LED_7)

    {

      //  DelayMs(1000);

        PRINT("LED7");

        GPIOA_InverseBits(bPWM7);//PB4

        tmos_start_task(LedFlashTaskId, LED_7, 1600);

        return (events ^ LED_7);

    }




    // Discard unknown events

    return 0;

}


你这边的情况应该不是任务无法调度,而是打印的问题,打印是需要加\n的,也可勾上下图的配置不加\n试试,如果添加io翻转但没有实现翻转则可能是tmos任务设置出了问题。

emobile_2022-02-21_10-23-59.png


您好,按照加\n或者勾选的方式确实可以解决问题,但是我还有个疑问,在CH57X_BLEInit();函数前的打印,我不加\n是可以输出的,所有是不是说这个打印加\n和蓝牙初始化或者tmos的初始化有关?

捕获.PNG

另:任务确实是在调度的。


还有个现象是这样的,没加\n也没勾选那个配置项的,系统跑1分钟左右也会把打印全部输出出来,如下图捕获.PNG


  1. 打印是和我们的CH57x_BLEInit()函数没有关系的,只能打印调用的哪个库有关系,上面你说在初始化之前不加\n可以打印,其实把你那打印放到下面也可以,能不能打印取决于你后面的代码有没有转行,从你贴的打印中看出,后面的代码是有转行的。

  2. 后面没勾我们的wch打印配置,系统在一分钟左右打印全部输出出来的原因可能是打印缓存的空间满了,然后就全部打印出来了。

    这边在使用时建议勾选我们的wchprint。


不对啊,我现在的情况就是放在task内部的打印不能打印,加\n可以打印;放在blelibinit前的可以正常打印,加不加\n都不影响打印。

要不跑一跑我的代码测试一下?


只有登录才能回复,可以选择微信账号登录