WCH沁恒单片机
直播中

李桂英

8年用户 1454经验值
私信 关注
[问答]

求助大佬,有没有TMOS系统最小的调度示例分享

#define DEBUG 1
#include "CH57x_common.h"
#include "HAL.h"
#include "CH57xBLE_LIB.h"

static tmosTaskID MyTaskID = INVALID_TASK_ID;

__attribute__((section(".highcode")))
void Main_Circulation()
{
while(1){
TMOS_SystemProcess( );
}
}

tmosEvents MyTask_ProcessEvent(tmosTaskID task_id, tmosEvents events) {
PRINT("MyTask_ProcessEvent invoked n");
return 0;
}

int main() {
bStatus_t s;

SetSysClock( CLK_SOURCE_PLL_60MHz );

GPIOA_SetBits( GPIO_Pin_9 );
GPIOA_ModeCfg( GPIO_Pin_8, GPIO_ModeIN_PU );
GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );
UART1_DefInit();
PRINT( "Start @ChipID=%02Xn", R8_CHIP_ID );

HAL_Init();
MyTaskID = TMOS_ProcessEventRegister(MyTask_ProcessEvent);

// s = tmos_set_event(MyTaskID, 0U);
s = tmos_start_task(MyTaskID, 0U, 1U);
PRINT("s=%xn", s);
Main_Circulation();
}
这是我参考蓝牙部分的代码 写的 TMOS 最小的例子, 这里面有几个问题

1. 如果我用

s = tmos_set_event(MyTaskID, 0U);
则 tmos_set_event 返回是 3, 按头文件的说法应该是不成功,这里不知道为什么, 用 tmos_start_task 返回是 0

2.

串口中没有打印

Start @ChipID=73
s=0
MyTask_ProcessEvent invoked
串口仅打印



Start @ChipID=73

s=0



这和预期不符, 说明对应的处理函数没有被调度到



我这样写代码是正确的吗? 如果不正确应该怎么写?

回帖(2)

张文婷

2022-9-6 09:30:13
写错了。
第一步是要注册任务ID

这样返回的是任务ID,每个ID下可以设16个子任务,2字节的变量,每个位可以建立一个独立的子任务,定义见下图

任务ID和任务标号分配后,就可以启动任务了,下面是立即启动任务,还有延时启动的,具体看LIB.H里面,代码跟踪下,函数有注释。

任务触发后就可以到指定的函数里面运行了,如下
举报

杨兢兢

2022-9-6 09:30:45
你看下,这个函数声明,参数的意思,你的函数参数确认下是不是有问题。

举例如下
举报

更多回帖

发帖
×
20
完善资料,
赚取积分