• [问题求助] 目前的版本如何进行非接管中断方式的配置
    现在的版本是默认接管中断了吗,如果想用stm32自己的中断应该怎么配置成非接管中断的模式呢?
  • [问题求助] 新手求助 为啥函数放入任务中执行不了
    像上面那样 任务执行到IC_TEST()就没反应了 这是为什么 是我函数编写的有错误吗
  • [问题求助] 请问,刚刚学习lite os 怎么学习呢?哪里有视频教程或官方出的教程。有条目的
    请问,刚刚学习lite os  怎么学习呢?哪里有视频教程或官方出的教程。有条目的
  • [问题求助] 移植接近成功,遇到编译错误,undefined reference to `HAL_GPIO_TogglePin'  ,链接错误
    arm-none-eabi-ld: e:/cubextemp/three/out/STM32F407_VET6/lib\libSTM32F407_VET6.a(user_task.o): in function `LedTask': e:\cubextemp\three\targets\STM32F407_VET6/Src/user_task.c:39: undefined reference to `HAL_GPIO_TogglePin' arm-none-eabi-ld: e:\cubextemp\three\targets\STM32F407_VET6/Src/user_task.c:40: undefined reference to `HAL_GPIO_TogglePin' make: *** [Makefile:78: Huawei_LiteOS] Error 1这种基础函数,以及USART里面的几个函数都是类似问题,注释掉能编译,能下载。 相关头文件都确定有。 是include 配置有问题,还是makefile要修改。从STM32F407_ATK_Explorer 移植到STM32F407-VET6.
  • [问题求助] 按教程创建的STM32F407裸机程序,LED灯能闪烁,但串口一直无数据。
    编绎,设置,烧录都正常,就是USART1 一直没有数据上来。 串口有两个可选,都试过。 从设备管理串中选JLINK虚拟出的的那个COM口,应该是这个吧。 波特率,停止位这些参数都和教程一样。这一段也加了。/* USER CODE BEGIN 4 */__attribute__((used)) int _write(int fd, char *ptr, int len){    (void)HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, 0xFFFF);    return len;}/* USER CODE END 4 */
  • [问题求助] liteos推荐的IDE是什么
    如题, 目前看视频和网上的信息,有以下几种。1 用LITEOS STUDIO2 IOT STUDIO 3 VSCODE 加上LITEOS的插件4 KEIL等,添加KERNEL和ARCH两个目录我看在答疑时,华为的员工都是用的VSCODE的LITEOS插件, 请教下,推荐哪个。
  • [问题求助] 关于LiteOS项目很久没有维护了,是烂尾放弃了吗
    看了下代码还是两年前的,后面都没有在维护了,是打算放弃了吗
  • [技术干货] Huawei LiteOS 基础内核【内存】基本概述
    内存管理模块管理系统的内存资源,它是操作系统的核心模块之一。主要包括内存的初始化、分配以及释放。在系统运行过程中,内存管理模块通过对内存的申请/释放操作,来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优,同时最大限度地解决系统的内存碎片问题。Huawei LiteOS的内存管理分为静态内存管理和动态内存管理,提供内存初始化、分配、释放等功能。动态内存: 在动态内存池中分配用户指定大小的内存块。优点:按需分配。缺点:内存池中可能出现碎片。静态内存: 在静态内存池中分配用户初始化时预设(固定)大小的内存块。优点:分配和释放效率高,静态内存池中无碎片。缺点:只能申请到初始化预设大小的内存块,不能按需申请。
  • [技术干货] Huawei LiteOS 基础内核【任务】编程实例
    实例描述下面的示例介绍任务的基本操作方法,包含任务创建、任务延时、任务锁与解锁调度、挂起和恢复、查询当前任务PID、根据PID查询任务信息等操作,阐述任务优先级调度的机制以及各接口的应用。创建了2个任务:TaskHi和TaskLo。TaskHi为高优先级任务。TaskLo为低优先级任务。UINT32 g_taskHiId;UINT32 g_taskLoId;#define TSK_PRIOR_HI 4#define TSK_PRIOR_LO 5UINT32 Example_TaskHi(VOID){ UINT32 ret; printf("Enter TaskHi Handler.\r\n"); /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_taskLoId任务) */ ret = LOS_TaskDelay(2); if (ret != LOS_OK) { printf("Delay Task Failed.\r\n"); return LOS_NOK; } /* 2个Tick时间到了后,该任务恢复,继续执行 */ printf("TaskHi LOS_TaskDelay Done.\r\n"); /* 挂起自身任务 */ ret = LOS_TaskSuspend(g_taskHiId); if (ret != LOS_OK) { printf("Suspend TaskHi Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskResume Success.\r\n"); return ret;}/* 低优先级任务入口函数 */UINT32 Example_TaskLo(VOID){ UINT32 ret; printf("Enter TaskLo Handler.\r\n"); /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(背景任务) */ ret = LOS_TaskDelay(2); if (ret != LOS_OK) { printf("Delay TaskLo Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskSuspend Success.\r\n"); /* 恢复被挂起的任务g_taskHiId */ ret = LOS_TaskResume(g_taskHiId); if (ret != LOS_OK) { printf("Resume TaskHi Failed.\r\n"); return LOS_NOK; } printf("TaskHi LOS_TaskDelete Success.\r\n"); return ret;}/* 任务测试入口函数,创建两个不同优先级的任务 */UINT32 Example_TskCaseEntry(VOID){ UINT32 ret; TSK_INIT_PARAM_S initParam; /* 锁任务调度,防止新创建的任务比本任务高而发生调度 */ LOS_TaskLock(); printf("LOS_TaskLock() Success!\r\n"); initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskHi; initParam.usTaskPrio = TSK_PRIOR_HI; initParam.pcName = "TaskHi"; initParam.uwStackSize = 0x700; initParam.uwResved = LOS_TASK_STATUS_DETACHED; /* 创建高优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskHiId, &initParam); if (ret != LOS_OK) { LOS_TaskUnlock(); printf("Example_TaskHi create Failed!\r\n"); return LOS_NOK; } printf("Example_TaskHi create Success!\r\n"); initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)Example_TaskLo; initParam.usTaskPrio = TSK_PRIOR_LO; initParam.pcName = "TaskLo"; initParam.uwStackSize = 0x700; initParam.uwResved = LOS_TASK_STATUS_DETACHED; /* 创建低优先级任务,由于锁任务调度,任务创建成功后不会马上执行 */ ret = LOS_TaskCreate(&g_taskLoId, &initParam); if (ret != LOS_OK) { LOS_TaskUnlock(); printf("Example_TaskLo create Failed!\r\n"); return LOS_NOK; } printf("Example_TaskLo create Success!\r\n"); /* 解锁任务调度,此时会发生任务调度,执行就绪队列中最高优先级任务 */ LOS_TaskUnlock(); return LOS_OK;}结果验证编译运行得到的结果为:
  • [技术干货] Huawei LiteOS 系统中的TASK错误码
    对任务存在失败可能性的操作,包括创建任务、删除任务、挂起任务、恢复任务、延时任务等等,均需要返回对应的错误码,以便快速定位错误原因。序号定义实际数值描述参考解决方案1LOS_ERRNO_TSK_NO_MEMORY0x03000200内存空间不足分配更大的内存分区2LOS_ERRNO_TSK_PTR_NULL0x02000201任务参数为空检查任务参数3LOS_ERRNO_TSK_STKSZ_NOT_ALIGN0x02000202任务栈大小未对齐对齐任务栈,暂不使用该错误码4LOS_ERRNO_TSK_PRIOR_ERROR0x02000203不正确的任务优先级检查任务优先级5LOS_ERRNO_TSK_ENTRY_NULL0x02000204任务入口函数为空定义任务入口函数6LOS_ERRNO_TSK_NAME_EMPTY0x02000205任务名为空设置任务名7LOS_ERRNO_TSK_STKSZ_TOO_SMALL0x02000206任务栈太小扩大任务栈8LOS_ERRNO_TSK_ID_INVALID0x02000207无效的任务ID检查任务ID9LOS_ERRNO_TSK_ALREADY_SUSPENDED0x02000208任务已经被挂起等待这个任务被恢复后,再去尝试挂起这个任务10LOS_ERRNO_TSK_NOT_SUSPENDED0x02000209任务未被挂起挂起这个任务11LOS_ERRNO_TSK_NOT_CREATED0x0200020a任务未被创建创建这个任务12LOS_ERRNO_TSK_DELETE_LOCKE0x0300020b删除任务时,任务处于被锁状态等待解锁任务之后再进行删除操作13LOS_ERRNO_TSK_MSG_NONZERO0x0200020c任务信息非零暂不使用该错误码14LOS_ERRNO_TSK_DELAY_IN_INT0x0300020d中断期间,进行任务延时等待退出中断后再进行延时操作15LOS_ERRNO_TSK_DELAY_IN_LOCK0x0200020e任务被锁的状态下,进行延时等待解锁任务之后再进行延时操作16LOS_ERRNO_TSK_YIELD_IN_LOCK0x0200020f任务被锁的状态下,进行Yield操作等待任务解锁后进行Yield操作17LOS_ERRNO_TSK_YIELD_NOT_ENOUGH_TASK0x02000210没有或者仅有一个可用任务能进行行程安排增加任务数18LOS_ERRNO_TSK_TCB_UNAVAILABLE0x02000211没有空闲的任务控制块可用增加任务控制块数量19LOS_ERRNO_TSK_HOOK_NOT_MATCH0x02000212任务的钩子函数不匹配暂不使用该错误码20LOS_ERRNO_TSK_HOOK_IS_FULL0x02000213任务的钩子函数数量超过界限暂不使用该错误码21LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK0x02000214这是个系统级别的任务检查任务ID,不要试图操作系统任务22LOS_ERRNO_TSK_SUSPEND_LOCKED0x03000215将被挂起的任务处于被锁状态等待任务解锁后再尝试挂起任务23LOS_ERRNO_TSK_FREE_STACK_FAILED0x02000217任务栈free失败该错误码暂不使用24LOS_ERRNO_TSK_STKAREA_TOO_SMALL0x02000218任务栈区域太小该错误码暂不使用25LOS_ERRNO_TSK_ACTIVE_FAILED0x03000219任务触发失败创建一个IDLE任务后执行任务转换,暂不使用该错误码26LOS_ERRNO_TSK_CONFIG_TOO_MANY0x0200021a过多的任务配置项该错误码暂不使用27LOS_ERRNO_TSK_CP_SAVE_AREA_NOT_ALIGN0x0200021b暂无该错误码暂不使用28LOS_ERRNO_TSK_MSG_Q_TOO_MANY0x0200021d暂无该错误码暂不使用29LOS_ERRNO_TSK_CP_SAVE_AREA_NULL0x0200021e暂无该错误码暂不使用30LOS_ERRNO_TSK_SELF_DELETE_ERR0x0200021f暂无该错误码暂不使用31LOS_ERRNO_TSK_STKSZ_TOO_LARGE0x02000220任务栈大小设置过大减小任务栈大小32LOS_ERRNO_TSK_SUSPEND_SWTMR_NOT_ALLOWED0x02000221不允许挂起软件定时器任务检查任务ID, 不要试图挂起软件定时器任务,暂不使用该错误码33LOS_ERRNO_TSK_DELAY_IN_SWTMR_TSK0x03000222在软件定时器回调中,调用任务延时不要在软件定时器中调用任务延时,暂不使用该错误码34LOS_ERRNO_TSK_CPU_AFFINITY_MASK_ERR0x03000223任务CPU亲和性Mask有误检查传入的亲和性Mask35LOS_ERRNO_TSK_YIELD_IN_INT0x02000224任务在中断中进行Yield操作不要在中断中进行Yield操作
  • [技术干货] Huawei LiteOS 系统中的任务管理模块为用户提供的功能
    功能分类接口名描述任务的创建和删除LOS_TaskCreateOnly创建任务,并使该任务进入suspend状态,并不调度。LOS_TaskCreate创建任务,并使该任务进入ready状态,并调度。LOS_TaskDelete删除指定的任务。任务状态控制LOS_TaskResume恢复挂起的任务。LOS_TaskSuspend挂起指定的任务。LOS_TaskDelay任务延时等待。LOS_TaskYield显式放权,调整指定优先级的任务调度顺序。任务调度的控制LOS_TaskLock锁任务调度。LOS_TaskUnlock解锁任务调度。任务优先级的控制LOS_CurTaskPriSet设置当前任务的优先级。LOS_TaskPriSet设置指定任务的优先级。LOS_TaskPriGet获取指定任务的优先级。任务信息获取LOS_CurTaskIDGet获取当前任务的ID。LOS_TaskInfoGet获取指定任务的信息。LOS_TaskStatusGet获取指定任务的状态。LOS_TaskNameGet获取指定任务的名称。LOS_TaskInfoMonitor监控所有任务,获取所有任务的信息。LOS_NextTaskIDGet获取即将被调度的任务的ID。
  • Huawei LiteOS 基础内核【任务切换】
    任务切换包含获取就绪列表中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。
  • Huawei LiteOS 基础内核【任务上下文】
    任务在运行过程中使用到的一些资源,如寄存器等,我们称为任务上下文。当这个任务挂起时,其他任务继续执行,在任务恢复后,如果没有把任务上下文保存下来,有可能任务切换会修改寄存器中的值,从而导致未知错误。因此,Huawei LiteOS在任务挂起的时候会将本任务的任务上下文信息,保存在自己的任务栈里面,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行被挂起时被打断的代码。
  • [技术干货] Huawei LiteOS 基础内核【任务栈】
    每一个任务都拥有一个独立的栈空间,我们称为任务栈。栈空间里保存的信息包含局部变量、寄存器、函数参数、函数返回地址等。任务在任务切换时会将切出任务的上下文信息保存在自身的任务栈空间里面,以便任务恢复时还原现场,从而在任务恢复后在切出点继续开始执行。
  • [技术干货] Huawei LiteOS 基础内核【任务控制块TCB】
    每一个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、任务状态、任务优先级、任务ID、任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。