-
在使用at.oob_register(featurestr,cmdlen, callback,cmd_match);初始化消息监听函数,没反应。我用串口printf试了一下,没反应,无法打印出eeeeee,也就是说没进入回调函数,是哪里错了吗?
-
这期我想给大家做个LiteOS_Lab仓库中的各个组件的详解,源码级别的详解,这个帖子是汇总帖,我将慢慢的填补。一、简略介绍组件名称作用常见用法OS操作系统组件,其中包括LiteOS、Linux、novaos、macos等常用操作系统,并通过osal文件将各种不同操作系统的任务相关函数、任务同步机制函数、内存相关函数等进行了统一的接口封装,这样有利于我们更换不同的操作系统和移植,而不用更改上层代码,这就是接口抽象封装并将代码模块化编程的体现。如果我们使用os组件中已有的操作系统,只需修改SDK配置;如果使用其他操作系统我们需要自行实现osal_imp.h中tag_os_ops结构体中要求的函数。完成上一步后,调用os_imp_init函数初始化并安装操作系统即可。我们就可以直接在用户代码中使用osal.h中的各种函数。stimer该组件用于让我们添加一些每过一段时间就需要执行一次的定时任务,例如刷新显示屏、采集温湿度等操作。使用之前先在SDK配置中选择该组件,调用stimer_init函数初始化之后即可使用。用stimer_create函数配置需要定时的任务。用stimer_delete函数移除不需要的定时任务。shell该组件能为单片机提供一个类似于Linux下的shell接口,是我们是串口助手就可以实时执行预设好的指令,并提供[TAB]键指令补全操作。使用之前先在SDK配置中选择该组件,并实现好printf函数与scanf函数,调用shell_init函数初始化之后即可使用。调用OSSHELL_EXPORT_CMD宏定义并传入命令名称、命令执行函数、命令帮助即可在shell中执行该预设命令。driver该组件类似于Linux中设备注册,可以理解为使用该组件注册过的设备用户不用关心设备底层读写是如何实现的,举个例子:操作硬盘读写和操作串口读写的操作方法一样,极大的提升了不同设备的可移植性和接口统一化,我们的at指令框架就是采用该种方式实现的。我们一般通过先实现driver.h中的los_driv_op_t结构体中的函数(设备初始化、读操作、写操作等等),然后去调用OSDRIV_EXPORT宏定义的方式去注册驱动,系统会在适当的时候自动加载我们注册的驱动。注册完成后就可以调用los_dev_read函数读取设备中的数据,los_dev_write写数据到设备中等操作。at该组件用于让MCU给支持AT指令的一些外部网络通讯模组发送指令和接收数据。注意:使用driver注册过的串口才能使用at框架。二、连载帖汇总Ubuntu下搭建LiteOS_Lab开发环境0x00 LiteOS_Lab仓库组件详解--OS0x01 LiteOS_Lab仓库组件详解--AT(上)0x02 LiteOS_Lab仓库组件详解--Driver(上)0x03 LiteOS_Lab仓库组件详解--Driver (下)0x04 LiteOS_Lab仓库组件详解--AT(中)0x05 LiteOS_Lab仓库组件详解--AT(下)0x06 LiteOS_Lab仓库组件详解--AT框架总结0x07 LiteOS_Lab仓库组件详解 cJSON(上)0x08 LiteOS_Lab仓库组件详解 cJSON(下)三、杂谈贴汇总LiteOS_Lab仓库组件杂谈---ring_buffer.c
-
摘要:本篇帖子向大家讲述如何添加和修改一些函数到我们自己的main.c文件中,最终使LiteOS及其组件运行起来,也是本连载贴的完结篇吧!一、照葫芦画瓢---详解iot_link/targets/STM32L431_BearPi/Src/main.c文件#include "main.h" #include "sys_init.h" #include "mem.h" #include "los_base.h" #include "los_task.ph" #include "los_typedef.h" #include "los_sys.h" #if defined (__CC_ARM) extern char Image$$RW_IRAM1$$ZI$$Limit []; extern char Image$$ARM_LIB_STACKHEAP$$Base []; #elif defined (__GNUC__) /* 我们使用IoT Studio默认是GNUC编译环境,所以用该预处理项 * 该处引入了两个变量__los_heap_addr_start__和__los_heap_addr_end__,这两个变量定义在os.ld文件中,想知道详细定义的可以移步到 *“0x04使用IoT-Studio移植LiteOS到STM32L476(也可以是其他芯片)---修改链接脚本” */ extern char __los_heap_addr_start__ []; extern char __los_heap_addr_end__ []; #else #error "fix me" #endif /* 以下代码就将一段物理内存开始地址和结束地址映射为一个名为system_phys_mem的结构体数组 * 这段内存将来给LiteOS分配使用 */ const struct phys_mem system_phys_mem [] = { #if defined (__CC_ARM) { Image$$RW_IRAM1$$ZI$$Limit, Image$$ARM_LIB_STACKHEAP$$Base }, #elif defined (__GNUC__) {(unsigned long) __los_heap_addr_start__,(unsigned long) __los_heap_addr_end__ }, #else #error "fix me" #endif { 0, 0 } }; /* 该函数用于初始化开发板特有的外设,例如LCD显示器、温湿度采集器等等,移植时可以将你的开发板的特有外设的初始化函数在此替换 * */ VOID HardWare_Init(VOID) { HAL_Init(); /* Configure the system clock */ SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); MX_SPI2_Init(); dwt_delay_init(SystemCoreClock); LCD_Init(); LCD_Clear(BLACK); POINT_COLOR = GREEN; LCD_ShowString(10, 50, 240, 24, 24, "Welcome to BearPi!"); LCD_ShowString(20, 90, 240, 16, 16, "BearPi-IoT Develop Board"); LCD_ShowString(20, 130, 240, 16, 16, "Powerd by Huawei LiteOS!"); LCD_ShowString(30, 170, 240, 16, 16, "Connecting NET......"); } /* 导入Demo的函数link_main,该函数的定义在iot_link/link_main.c中 * 该函数中根据我们的条件编译宏来选择使能哪些组件(定时器、网络、各类Demo)最终调用standard_app_demo_main();启动特定Demo中的任务 * 大家可以进到Demo文件夹下,每个Demo中都有这个standard_app_demo_main();函数的定义,这就是统一接口接口化编程的实例 */ extern int link_main(void *args); /* 该函数用于初始化我们的第一个任务,也就是link_main,我们需要初始化自己的任务可以照着仿写 * */ static int link_test() { int ret = -1; UINT32 uwRet = LOS_OK; UINT32 handle; TSK_INIT_PARAM_S task_init_param; //定义一个task_init_param结构体变量,用于传递任务参数 memset (&task_init_param, 0, sizeof (TSK_INIT_PARAM_S)); task_init_param.uwArg = (unsigned int)NULL; task_init_param.usTaskPrio = 2; //设置任务优先级 task_init_param.pcName =(char *) "link_main"; //设置任务名称 task_init_param.pfnTaskEntry = (TSK_ENTRY_FUNC)link_main; //设置任务入口函数,这就是上面引入的那个函数 task_init_param.uwStackSize = 0x1000; //设置任务栈大小,这个任务栈将在__los_heap_addr_start__到__los_heap_addr_end__之间的内存中分配 uwRet = LOS_TaskCreate(&handle, &task_init_param); //创建任务 if(LOS_OK == uwRet){ ret = 0; } return ret; } int main(void) { UINT32 uwRet = LOS_OK; HardWare_Init(); uwRet = LOS_KernelInit(); //初始化内核 if (uwRet != LOS_OK) { return LOS_NOK; } extern void shell_uart_init(int baud); //导入和初始化shell,你的开发板以上电就会自动启动shell,你可以用键盘输入一个help试试,别认为是程序坏了 shell_uart_init(115200); //没有打印hello world link_test(); (void)LOS_Start(); //开启操作系统调度 return 0; //正常情况下永远不会运行到return 0 }PS:大家在复制main.c到自己的工程中修改时,记得顺便将main.h也复制过去,然后就可以开始编译了,编译过程中应该会出现一些错误,大部分都是依赖文件导致的,你可以尝试将缺失的依赖文件找到,并复制到特定的文件夹中,知道解决文件,如果遇到无法解决的文件,欢迎大家给我留言和私信,留言尽量留到“汇总帖中”,便于后来的同学参考这些有价值的问题以及解决方案,感谢大家的支持!
-
我在运行LiteOS之后出现错误,串口打印出[ERR] osHwiDefaultHandler irqnum:55这个是什么意思?
-
摘要:假如你需要移植LiteOS_Lab到STM32F103xx或者其他系列的例如M0、M3等上,本篇帖子就是为你写的。首先,我贴一幅图,转自百度百科:https://baike.baidu.com/item/Cortex-M/1363782?fr=aladdin这张图片向大家分别展示M0、M3、M4分别对应的架构版本。这里简单的说一个小知识:STM32和ST公司和ARM公司合作的,ARM公司设计好相应的核提供给ST公司,ST公司再去设计各种外设(ADC、Flash)等等,上图中的V6M、V7M在这些就是ARM公司设计的。一、SDK配置现在转回正题,我们打开IoT Studio为自己的特定芯片开发移植LiteOS_Lab时,要进行的一个操作就是SDK配置,选择我们用到的组件,不知道大家是否注意到,有着这样一个选项:这个选项就是用于配置我们的芯片的架构,按照上图中的来配置即可,armv6-m这里没有显示,但是ubuntu下可以手动填写,大家等后面新版本的IoT Studio出来以后,就可以看到该选项了,这里我给大家贴个Ubuntu上的配置图片,如果大家需要我出一份关于搭建Ubuntu的LiteOS开发环境请留言。这就是Kconfig的功劳,上期说过,配置并保存之后会生成一个.config文件,用于让Makefile引用其中的配置项,用于控制编译,下图是.config的部分内容:看到了吧,这里定义了一个CONFIG_ARCH_CPU_TYPE := "armv7-m",我想你和我一样一定也想知道是哪个Makefile引用了该配置,请你打开这个路径:iot_link/os/liteos/liteos_imp.mk,你可以看到如下图相信你一定能看出来,这三个不同的路径对应了三种架构的芯片的汇编起始文件和一些列芯片相关的文件二.makefile配置首先,我们来看下GCC/Makefile同样的,我们也需要将这里的CPU、FPU等一些列信息修改为芯片的相应信息。再来看下project.mk我们需要将这些引用Hal库的路径也修改为芯片对应的路径。三、其他地方例如你的main.c文件或者其他包含了stm32L4xxxx.h的文件也应该进行相应修改,你也可以直接编译,根据错误信息去修改。PS:这是是我目前发现的问题,大家在将LiteOS_Lab移植到自己的芯片上时,可以选择相近芯片的Demo来入手,这样可以避免发生过多的问题,例如我用的是STM32L476我就选择小熊派的STM32L431这样就方便很多了。
-
我使用的是STM32F103ZET6的开发板。看了los_hwi.c文件的代码,给我的感觉,就是把中断向量表地址改了嘛,用的是这句代码。SCB->VTOR = (UINT32)m_pstHwiForm;使用默认的中断向量表地址,也可以正常使用中断的。那liteos接管中断和不接管中断,对于使用者来说,这两者有什么区别?
-
摘要:本节将对前几节中创建好的工程进行进一步的修改,使其适配我们的STM32L476一、修改GCC/project.mk文件project.mk文件主要用于指示我们的arm-gcc工具链如何对我们的工程文件进行编译操作,有关编译、链接等操作可以参考0x01基础知识中的介绍。首先将文件中所有的STM32L431_BearPi_OS_Func全部替换为STM32L476RG_NB476在HAL_DRIVER_SRC 变量中删除我们没有用到的STM32的库文件,并添加上使用了没有添加的文件,修改好后如下图在HARDWARE_SRC变量中删除我们没有使用的外设驱动文件,添加上使用了的外设驱动文件,修改后如下图,以下用到的驱动代码给大家在附件中放上,解压到Hardware文件夹即可在USER_SRC变量中删除我们没有使用的内部外设初始化,添加上使用了的内部外设初始化文件,也就是也就是前面我们勾选的将初始化代码分别生成到不同文件中的选项,修改后如下图:并将C_DEFS += -D USE_HAL_DRIVER -D STM32L431xx -D NDEBUG中的STM32L431xx替换为STM32L476xx二、再次复制部分文件从targets\STM32L431_BearPi\Src和Inc中复制以下文件到我们的Src和Inc中dwt.c dwt.h 用于延时sys_init.c sys_init.h 用于配置系统时钟、获取随机数、重启系统等ota_port.c 用于OTAflash_adaptor.c 用于读、写Flashuart_debug.c 用于实现fputc和fgetc、处理串口中断、初始化shellat_hal.h 用于发送AT指令board.h OTA相关common.h OTA相关PS:附件中的“资料”是我修改好的project.mk和Hardware中用到的驱动文件,解压后,将project.mk放到GCC目录下即可,将其余文件放到Hardware目录下即可!
-
转载: 课程介绍:本课程为LiteOS实战专题教程,理论+实战引导开发者更加深入了解物联网操作系统,物联网的各种业务场景及硬件部分代码结构,让开发者更深入通过华为物联网平台进行开发。 课程目标: 帮助开发者深入了解物联网操作系统相关技术原理和应用场景 1、了解物联网操作系统LiteOS基本原理 2、熟悉掌握物联网操作系统LiteOS任务管理的运作机制及应用场景 3、了解物联网操作系统LiteOS关于信号量的运作机制及阻塞机制 4、了解物联网操作系统LiteOS互斥锁的相关概念、运作原理及使用场景 5、熟悉掌握物联网操作系统LiteOS内存管理 课程大纲: 第1章 LiteOS内核实战教程-Helloworld 第2章 LiteOS内核实战教程-任务管理 第3章 LiteO内核实战教程-信号量 第4章 LiteOS内核实战教程-互斥锁 第5章 LiteOS内核实战教程-内存管理 课程学习链接 https://education.huaweicloud.com/courses/course-v1:HuaweiX+CBUCNXT023+Self-paced/about
-
LiteOS_Lab仓库地址:https://github.com/LiteOS/LiteOS_LabLiteOS有一个较早的版本,仓库地址为:https://github.com/LiteOS/LiteOS,本连载帖采用的是LiteOS_Lab,关于LiteOS和LiteOS_Lab的差异,后面有时间会给大家一一道来。本贴属于一个连载系列,将发布在“IoT物联网”板块,完成发布后,在汇总到这里STM32L476移植华为LiteOS系列教程---背景知识 1STM32L476移植华为LiteOS系列教程---开发前的准备 2STM32L476移植华为LiteOS系列教程---使用STM32CubeMX创建工程 3STM32L476移植华为LiteOS系列教程---修改链接脚本 4STM32L476移植华为LiteOS系列教程---修改Makefile文件5STM32L476移植华为LiteOS系列教程---Kconfig 6STM32L476移植华为LiteOS系列教程---更换芯片后应该修改的地方 7STM32L476移植华为LiteOS系列教程---main.c 8这就算完结了,后面我准备出一期关于如何在Ubuntu下开发的帖子以及环境的搭建。对了,有关IoT Studio的详细操作,我会在IoT Studio正式版发布后给大家补上,我在这里说一声抱歉!这里先给大家补一个Ubuntu下搭建LiteOS_Lab开发环境PS:如果大家发现问题欢迎留言,我们将会尽力给大家解答,如果发现写的不好或者有错误,也欢迎大家指正!
-
我按照liteos在线文档里的移植教程,在STM32F103ZET6上移植。按照例程一步一步来,其中OS_CONFIG里的文件在小熊派的例程上复制过来的。在target_config.h 文件有两处修改,其中有一处为修改当前SRAM大小的宏定义。但是我的target_config.h是没有这个定义的。这是怎么回事?
-
请将在学习过程中的所有问题,发布在此帖中。本次活动一共有三次直播,此帖中的问题将会在答疑帖中直播中一一答疑。感谢!答疑视频见下: LiteOS设备开发实战第一次直播0526LiteOS设备开发实战第二次直播0528 LiteOS设备开发实战第三次直播0604常见FAQ,萌新看这里>>>《Huawei LiteOS设备开发实战》—FAQ(持续更新),萌新遇到问题先看这里
-
朋友们!新的一年,新的训练营这训练营的主角是>>>Huawei LiteOS!大家激不激动,开不开心!!!本课程限时免费开放,参与活动还有各种大奖等你拿哦!直接告诉大家坚持到最后的奖品吧(结业证书/华为GT 2手表/HCIA考券/开发板/音响等等)报名时间:2020.5.14-2020.6.3打卡时间:2020.5.25-2020.6.3添加小助手微信,发送“LiteOS”进入学习交流群活动报名链接>>>【LiteOS设备开发实战营】学员邀请情况>>>LiteOS设备开发实战大赛学员邀请活动活动信息开始时间课程链接作业提交直播地址抽奖结果公示第一天产品模型开发和调测2020.5.25课程链接点击提交第一次打卡点击进入>>>第一次直播获奖公示帖第二天移植Huawei LiteOS内核2020.5.26课程链接点击提交第二次打卡第三天移植Huawei LiteOS传感器2020.5.27课程链接点击提交第三次打卡点击进入>>>-第二次直播第四天移植Huawei LiteOS通信模组2020.5.28课程链接点击提交第四次打卡第五天移植Huawei LiteOS通信协议2020.5.29课程链接点击提交第五次打卡6月3日-第三次直播地址第六天定制IoT开发套件LCD屏显2020.6.1课程链接点击提交第六次打卡第七天发表学习 总结与感言2020.6.2课程链接点击提交第七次打卡答疑帖其他说明:1. 班主任会对每天的成功任务截图进行确认并登记,只有前序所有关卡都成功,才可在第1/4/7天领取相应福利;2. 在成功打卡第1/4/7天后,根据所在楼层确认抽奖号码(如在7楼打卡,则抽奖号码为7号),如果发现打卡上传图片错误,可重新编辑上传,勿开新楼层(如有新楼层,以第一次回复为准);3. 第1/4/7天抽奖,班主任先和所有学员确认抽奖号码,第二天直播抽奖;4. 特别奖:实战营打卡结束后可参与实战大赛(初赛+决赛),决赛胜出者可获得相应奖励;;5. 所有实物礼品将会在活动结束后15个工作日内发放。6.【华为云社区常规活动规则】https://bbs.huaweicloud.com/forum/thread-5766-1-1.html
-
DAY5:通信协议1、 截图需要有华为云账号2、 需要有创建命令处理任务代码3、 需要编译成功完成时间:2020.5.31 23:59请注意:直播进行答疑,学习过程中有任何问题,请在答疑帖中提出,我们会在直播中一一答疑
-
DAY4:通信模组1、 截图需要有华为云账号2、 需要有数据上报代码3、 需要编译成功完成时间:2020.5.29 12:00 am请注意:数字抽奖:以打卡所在楼层数为抽奖数字。以每人第一次打卡为准(打卡楼层可多次编辑,尽量在一个楼层打卡)抽奖方式为直播随机抽奖直播进行答疑,学习过程中有任何问题,请在答疑帖中提出,我们会在直播中一一答疑。
-
DAY3:传感器1、 截图需要有华为云账号2、 需要有传感器数据采集代码3、 需要编译成功完成时间:2020.5.28 12:00 am请注意:直播进行答疑,学习过程中有任何问题,请在答疑帖中提出,我们会在直播中一一答疑。
上滑加载中
推荐直播
-
华为云AI入门课:AI发展趋势与华为愿景
2024/11/18 周一 18:20-20:20
Alex 华为云学堂技术讲师
本期直播旨在帮助开发者熟悉理解AI技术概念,AI发展趋势,AI实用化前景,了解熟悉未来主要技术栈,当前发展瓶颈等行业化知识。帮助开发者在AI领域快速构建知识体系,构建职业竞争力。
去报名 -
华为云软件开发生产线(CodeArts)10月新特性解读
2024/11/19 周二 19:00-20:00
苏柏亚培 华为云高级产品经理
不知道产品的最新特性?没法和产品团队建立直接的沟通?本期直播产品经理将为您解读华为云软件开发生产线10月发布的新特性,并在直播过程中为您答疑解惑。
去报名
热门标签