先说一下,学小熊派的心路,开头真的太难了,官方出的文档,案例,我只能说我按照步骤来都是不对的,也下载了官方程序烧下去也不行,最后查了好多资料才搞出来。第一次接触操作系统,真的一头雾水。下面我分享一下我的案例。
首先,先自己在操作系统上面创建一个简单的循环LED灯的任务,这个对于新手来说,你没有找到好的案例,几乎都是瞎摸的,而且还不对。
下面是我亲测有用可以直接烧在板子上面的直接在mian.c里面,你放在其他地方也可以。
void task1(void)
{
while (1)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
LOS_TaskDelay(500);
}
}
UINT32 creat_task1()
{
UINT32 uwRet = LOS_OK;
TSK_INIT_PARAM_S task_init_param;
task_init_param.usTaskPrio = 0;
task_init_param.pcName = "task1";
task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)task1;
task_init_param.uwStackSize = 0x200;
uwRet = LOS_TaskCreate(&g_TskHandle, &task_init_param);
if(LOS_OK != uwRet)
{
return uwRet;
}
return uwRet;
}
然后,在主函数里面这样定义。
int main(void)
{
UINT32 uwRet = LOS_OK;
HardWare_Init();
uwRet = LOS_KernelInit();
if (uwRet != LOS_OK)
{
return LOS_NOK;
}
extern UINT32 create_work_tasks(VOID);
uwRet = create_work_tasks();
if (uwRet != LOS_OK)
{
return LOS_NOK;
}
//把创建的任务放在主函数中
uwRet = creat_task1();
if (uwRet != LOS_OK)
{
return LOS_NOK;
}
(void)LOS_Start();
return 0;
}
这样就可以,完成一个简单任务的创建,学会这个,之后你想怎样创建任务都可以了。虽然看起来很简单,但是你根据官方出的案例走,根本行不通。
有不懂的,或者对你有帮助的可以留言。