510
个编辑
更改
→los_led_entry.c
此文件为本实验的重点内容,也就是我们使用LiteOS创建的独立LED控制任务。
1.使用TSK_INIT_PARAM_S结构体定义一个创建task任务的参数结构
5.给当前任务取一个名称,此任务我们取名“LED-Demo”
6.分配优先级,任务一共有32个优先级(0-31),最高优先级为0,最低优先级为31 7.锁任务调度,防止高优先级任务调度,影响任务正常创建 8.利用刚刚的任务参数创建新的任务,创建一个LED任务 9.解锁任务,让任务按照优先级进行调度<syntaxhighlight lang="c++" line="1" start="43">
void LOS_BoardLedEntry(void)
{
// 定义用于创建任务的参数的结构
TSK_INIT_PARAM_S stTaskInitParam;
// 锁任务调度
LOS_TaskLock();
(VOID)memset((void *)(&stTaskInitParam), 0, sizeof(TSK_INIT_PARAM_S)); // 任务参数清空
stTaskInitParam.usTaskPrio = 10; // 任务优先级
// 创建此任务,由于任务锁,不会马上执行 uwRet = LOS_TaskCreate(&g_uwLedTaskID, &stTaskInitParam); // 创建此任务
if (uwRet != LOS_OK)
{
}
// 解锁任务调度,此时会发生任务调度,执行就绪列表中最高优先级任务
LOS_TaskUnlock();
GUI_DispStringAtCL("led task create success",10,32,GUI_Context.colorInfo.bkColor); // 打印创建lcd task成功
return;
}
</syntaxhighlight>led任务的功能入口函数,在这个函数中,我们利用任务延时函数LOS_TaskDelay(),让LED灯周期点亮和熄灭。<syntaxhighlight lang="c++" line="1" start="7282">
static LITE_OS_SEC_TEXT VOID LOS_BoardLedTskfunc(VOID)
{
while (1)
{
// 点亮LED,LCD打印"LED=ON",延时500ms,任务延时500ms
BSP_EvbLedControl(LED_ON);
GUI_DispStringAtCL("LED=ON",10,3264,GUI_Context.colorInfo.bkColor);
(void)LOS_TaskDelay(500);
// 熄灭LED,LCD打印"LED=OFF",延时500ms,任务延时500ms
BSP_EvbLedControl(LED_OFF);
GUI_DispStringAtCL("LED=OFF",10,3264,GUI_Context.colorInfo.bkColor);
(void)LOS_TaskDelay(500);
}
}
</syntaxhighlight>