<p> </p><p> </p><p>int main(){</p><p> BSP_Init();</p><p> LED_ON;//点灯</p><p> while(1);</p><p>}</p><p> </p><p>static void BSP_Init(void){</p><p> NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);</p><p> LED_GPIO_Config();//LED初始化</p><p>}</p>
举报
LITE_OS_SEC_TEXT VOID *LOS_MemAllocAlign(VOID *pPool, UINT32 uwSize, UINT32 uwBoundary) { VOID *pRet = NULL; UINT32 uwUseSize; UINT32 uwGapSize; VOID *pAlignedPtr; do { if ((NULL == pPool) || (0 == uwSize) || (0 == uwBoundary) || !IS_ALIGNED(uwBoundary, sizeof(VOID *))) { break; } uwUseSize = uwSize + uwBoundary + 4; pRet = osHeapAlloc(pPool, uwUseSize); if (pRet) { pAlignedPtr = (VOID *)OS_MEM_ALIGN(pRet, uwBoundary); if (pRet == pAlignedPtr) { break; } uwGapSize = (UINT32)pAlignedPtr - (UINT32)pRet; OS_MEM_SET_ALIGN_FLAG(uwGapSize); *((UINT32 *)((UINT32)pAlignedPtr - 4)) = uwGapSize; pRet = pAlignedPtr; } } while (0); return pRet; }
static void Test1_Task(void){ while(1){ //死循环 LED2_TOGGLE; //点灯测试,翻转LED灯,现在还没介绍 LOS_TaskDelay(1000);//延时1000个Tick } }
/*定义任务ID变量*/ UINT32 Test1_Task_Handle;
/*以下内容在los_tack.ph文件中*/ /*任务控制块清单*/ typedef struct tagTaskCB { VOID *pStackPointer; /**< 任务栈指针 */ UINT16 usTaskStatus; /**< 任务状态 */ UINT16 usPriority; /**< 任务优先级 */ UINT32 uwStackSize; /**< 任务栈大小 */ UINT32 uwTopOfStack; /**< 任务栈顶 */ UINT32 uwTaskID; /**< 任务ID */ TSK_ENTRY_FUNC pfnTaskEntry; /**< 任务入口函数 */ VOID *pTaskSem; /**< 任务阻塞在哪个信号量 */ VOID *pTaskMux; /**< 任务阻塞在哪个互斥锁 */ UINT32 uwArg; /**< 参数 */ CHAR *pcTaskName; /**< 任务名称 */ LOS_DL_LIST stPendList; /**< 挂起列表 */ LOS_DL_LIST stTimerList; /**< 时间相关列表 */ UINT32 uwIdxRollNum; EVENT_CB_S uwEvent; /**< 事件 */ UINT32 uwEventMask; /**< 事件掩码 */ UINT32 uwEventMode; /**< 事件模式 */ VOID *puwMsg; /**< 内存分配给队列 */ } LOS_TASK_CB;
/*LOS_TaskCreate函数清单*/ static UINT32 Creat_Test1_Task() { //定义一个创建任务的返回类型,初始化为创建成功的返回值 UINT32 uwRet = LOS_OK; //定义一个用于创建任务的参数结构体 TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio = 3; /* 任务优先级,数值越小,优先级越高 */ task_init_param.pcName = "Test1_Task";/* 任务名 */ task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Test1_Task;/* 任务函数入口 */ task_init_param.uwStackSize = 1024; /* 堆栈大小 */ uwRet = LOS_TaskCreate(&Test1_Task_Handle, &task_init_param);/* 创建任务 */ return uwRet; }
/* LiteOS 头文件 */ #include "los_sys.h" #include "los_task.ph" /* 板级外设头文件 */ #include "bsp_usart.h" #include "bsp_led.h" /* 定义任务句柄 */ UINT32 Test1_Task_Handle; /* 函数声明 */ static UINT32 AppTaskCreate(void); static UINT32 Creat_Test1_Task(void); static void Test1_Task(void); static void BSP_Init(void); /*************************************************************** * [url=home.php?mod=space&uid=247401]@brief[/url] 主函数 * @param 无 * @retval 无 * [url=home.php?mod=space&uid=536309]@NOTE[/url] 第一步:开发板硬件初始化 第二步:创建APP应用任务 第三步:启动LiteOS,开始多任务调度,启动失败则输出错误信息 **************************************************************/ int main(void) { UINT32 uwRet = LOS_OK; //定义一个任务创建的返回值,默认为创建成功 /* 板载相关初始化 */ BSP_Init(); printf("这是一个[野火]-STM32全系列开发板-LiteOS-SDRAM动态创建单任务实验!\n\n"); /* LiteOS 内核初始化 */ uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { printf("LiteOS 核心初始化失败!失败代码0x%X\n",uwRet); return LOS_NOK; } uwRet = AppTaskCreate(); if (uwRet != LOS_OK) { printf("AppTaskCreate创建任务失败!失败代码0x%X\n",uwRet); return LOS_NOK; } /* 开启LiteOS任务调度 */ LOS_Start(); //正常情况下不会执行到这里 while(1); } /******************************************************************* * [url=home.php?mod=space&uid=72445]@[/url] 函数名 : AppTaskCreate * @ 功能说明: 任务创建,为了方便管理,所有的任务创建函数都可以放在这个函数里面 * @ 参数 : 无 * @ 返回值 : 无 *************************************************************/ static UINT32 AppTaskCreate(void) { /* 定义一个返回类型变量,初始化为LOS_OK */ UINT32 uwRet = LOS_OK; uwRet = Creat_Test1_Task(); if (uwRet != LOS_OK) { printf("Test1_Task任务创建失败!失败代码0x%X\n",uwRet); return uwRet; } return LOS_OK; } /****************************************************************** * @ 函数名 : Creat_Test1_Task * @ 功能说明: 创建Test1_Task任务 * @ 参数 : * @ 返回值 : 无 ******************************************************************/ static UINT32 Creat_Test1_Task() { //定义一个创建任务的返回类型,初始化为创建成功的返回值 UINT32 uwRet = LOS_OK; //定义一个用于创建任务的参数结构体 TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio = 3; /* 任务优先级,数值越小,优先级越高 */ task_init_param.pcName = "Test1_Task";/* 任务名 */ task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Test1_Task;/* 任务函数入口 */ task_init_param.uwStackSize = 1024; /* 堆栈大小 */ uwRet = LOS_TaskCreate(&Test1_Task_Handle, &task_init_param);/* 创建任务 */ return uwRet; } /****************************************************************** * @ 函数名 : Test1_Task * @ 功能说明: Test1_Task任务实现 * @ 参数 : NULL * @ 返回值 : NULL *****************************************************************/ static void Test1_Task(void) { /* 任务都是一个无限循环,不能返回 */ while(1) { LED2_TOGGLE; printf("任务1运行中,每1000ms打印一次信息\r\n"); LOS_TaskDelay(1000); } } /******************************************************************* * @ 函数名 : BSP_Init * @ 功能说明: 板级外设初始化,所有板子上的初始化均可放在这个函数里面 * @ 参数 : * @ 返回值 : 无 ******************************************************************/ static void BSP_Init(void) { /* * STM32中断优先级分组为4,即4bit都用来表示抢占优先级,范围为:0~15 * 优先级分组只需要分组一次即可,以后如果有其他的任务需要用到中断, * 都统一用这个优先级分组,千万不要再分组,切忌。 */ NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 ); /* LED 初始化 */ LED_GPIO_Config(); /* 串口初始化 */ USART_Config(); } /*********************************************END OF FILE**********************/
/* LiteOS 头文件 */ #include "los_sys.h" #include "los_task.ph" /* 板级外设头文件 */ #include "bsp_usart.h" #include "bsp_led.h" /* 定义任务句柄 */ UINT32 Test1_Task_Handle; UINT32 Test2_Task_Handle; /* 函数声明 */ static UINT32 AppTaskCreate(void); static UINT32 Creat_Test1_Task(void); static UINT32 Creat_Test2_Task(void); static void Test1_Task(void); static void Test2_Task(void); static void BSP_Init(void); /*************************************************************** * @brief 主函数 * @param 无 * @retval 无 * @note 第一步:开发板硬件初始化 第二步:创建APP应用任务 第三步:启动LiteOS,开始多任务调度,启动失败则输出错误信息 **************************************************************/ int main(void) { UINT32 uwRet = LOS_OK; //定义一个任务创建的返回值,默认为创建成功 /* 板载相关初始化 */ BSP_Init(); printf("这是[野火]-STM32全系列开发板-LiteOS-SDRAM动态创建多任务!\n\n"); /* LiteOS 内核初始化 */ uwRet = LOS_KernelInit(); if (uwRet != LOS_OK) { printf("LiteOS 核心初始化失败!失败代码0x%X\n",uwRet); return LOS_NOK; } uwRet = AppTaskCreate(); if (uwRet != LOS_OK) { printf("AppTaskCreate创建任务失败!失败代码0x%X\n",uwRet); return LOS_NOK; } /* 开启LiteOS任务调度 */ LOS_Start(); //正常情况下不会执行到这里 while(1); } /*********************************************************************** * @ 函数名 : AppTaskCreate * @ 功能说明: 任务创建,为了方便管理,所有的任务创建函数都可以放在这个函数里面 * @ 参数 : 无 * @ 返回值 : 无 *****************************************************************/ static UINT32 AppTaskCreate(void) { /* 定义一个返回类型变量,初始化为LOS_OK */ UINT32 uwRet = LOS_OK; uwRet = Creat_Test1_Task(); if (uwRet != LOS_OK) { printf("Test1_Task任务创建失败!失败代码0x%X\n",uwRet); return uwRet; } uwRet = Creat_Test2_Task(); if (uwRet != LOS_OK) { printf("Test2_Task任务创建失败!失败代码0x%X\n",uwRet); return uwRet; } return LOS_OK; } /****************************************************************** * @ 函数名 : Creat_Test1_Task * @ 功能说明: 创建Test1_Task任务 * @ 参数 : * @ 返回值 : 无 ******************************************************************/ static UINT32 Creat_Test1_Task() { //定义一个创建任务的返回类型,初始化为创建成功的返回值 UINT32 uwRet = LOS_OK; //定义一个用于创建任务的参数结构体 TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio = 3; /* 任务优先级,数值越小,优先级越高 */ task_init_param.pcName = "Test1_Task";/* 任务名 */ task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Test1_Task;/* 任务函数入口 */ task_init_param.uwStackSize = 1024; /* 堆栈大小 */ uwRet = LOS_TaskCreate(&Test1_Task_Handle, &task_init_param);/* 创建任务 */ return uwRet; } /******************************************************************* * @ 函数名 : Creat_Test2_Task * @ 功能说明: 创建Test2_Task任务 * @ 参数 : * @ 返回值 : 无 ******************************************************************/ static UINT32 Creat_Test2_Task() { // 定义一个创建任务的返回类型,初始化为创建成功的返回值 UINT32 uwRet = LOS_OK; TSK_INIT_PARAM_S task_init_param; task_init_param.usTaskPrio = 4; /* 任务优先级,数值越小,优先级越高 */ task_init_param.pcName = "Test2_Task"; /* 任务名*/ task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)Test2_Task;/* 任务函数入口 */ task_init_param.uwStackSize = 1024; /* 堆栈大小 */ uwRet = LOS_TaskCreate(&Test2_Task_Handle, &task_init_param);/* 创建任务 */ return uwRet; } /****************************************************************** * @ 函数名 : Test1_Task * @ 功能说明: Test1_Task任务实现 * @ 参数 : NULL * @ 返回值 : NULL *****************************************************************/ static void Test1_Task(void) { /* 任务都是一个无限循环,不能返回 */ while(1) { LED2_TOGGLE; printf("任务1进行中,每1000ms打印一次信息\r\n"); LOS_TaskDelay(1000); } } /****************************************************************** * @ 函数名 : Test2_Task * @ 功能说明: Test2_Task任务实现 * @ 参数 : NULL * @ 返回值 : NULL *****************************************************************/ static void Test2_Task(void) { /* 任务都是一个无限循环,不能返回 */ while(1) { LED3_TOGGLE; printf("任务2运行中,每500ms打印一次信息\n"); LOS_TaskDelay(500); } } /******************************************************************* * @ 函数名 : BSP_Init * @ 功能说明: 板级外设初始化,所有板子上的初始化均可放在这个函数里面 * @ 参数 : * @ 返回值 : 无 ******************************************************************/ static void BSP_Init(void) { /* * STM32中断优先级分组为4,即4bit都用来表示抢占优先级,范围为:0~15 * 优先级分组只需要分组一次即可,以后如果有其他的任务需要用到中断, * 都统一用这个优先级分组,千万不要再分组,切忌。 */ NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 ); /* LED 初始化 */ LED_GPIO_Config(); /* 串口初始化 */ USART_Config(); }
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
86
1249
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号