本实验是通过学习野火的《物联网操作系统 LiteOS开发实战指南》参考学习的。
1、移植前的准备
LiteOS 的源码可从 LiteOS GitHub 仓库下载到,其地址为:https://github.com/LiteOS/LiteOS
以下是需要添加到裸机工程的LiteOS源文件。

2、具体移植过程这里不多说,我移植的是非接管中断版本的。
3、这里我说一下野火教程文档中错误的地方,尽量让大家避坑。
①复制KEIL软件下的include文件夹。下图是教程文档的。
错误地方:大家千万不要按文档所说将KEIL下的整个include文件夹复制到工程文件中替换掉工程文件中的include文件夹。
正确做法:将KEIL下的include文件夹下的所有文件复制到工程文件夹对应的include文件夹下去,选择文件替换即可。

②修改target_config.h这个配置文件。
错误地方:教程文档上“注意:此文件仅保留内存管理部分,其他地方跟接管中断版本基本一致。”这句话及图片上的文件内容会让人家误以为该文件只需要内存管理这部分程序。
正确做法:除了2.3小节修改的内容一样外,这个2.4小节仅需要修改内存管理这部分功能程序。

③添加的头文件路径。
错误地方:添加的头文件路径缺少一个。
正确做法:还需要添加/LiteOS/kernel/extended/include这个文件夹的路径。

4、target_config.h头文件
该头文件对裁剪整个 LiteOS 所需的功能的宏均做了定义,在移植和使用过程中也主要是修改它。
① LOSCFG_PLATFORM_HWI_LIMIT 这个宏定义表示 LiteOS 支持最大的外部中断数,默认为 96,一般不作修改,使用默认即可。
②LOSCFG_BASE_CORE_TSK_DEFAULT_PRIO 这个宏定义表示默认的任务优先级,默认为 10,优先级数值越小表示任务优先级越高。
③LOSCFG_BASE_CORE_TSK_LIMIT 这个宏定义表示 LiteOS 支持的最大任务个数(除去空闲任务),默认为 15。
④LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE 宏定义表示定义默认的任务栈大小
为 0x2D0U 字节。
⑤LOSCFG_BASE_CORE_TIMESLICE_TIMEOUT 这个宏定义表示具有相同优先级的任务的最长执行时间,单位为时钟节拍周期,默认配置为 10。
⑥LOS_TASK_PRIORITY_LOWEST 这个宏定义表示定义可用的任务的最低优先级,在 LiteOS 中默认为 31, LiteOS 最大支持 32 个抢占优先级,优先级数
值越大,优先级越低。
⑦LOSCFG_BASE_IPC_SEM_LIMIT 这个宏定义表示 LiteOS 最大支持信号量的个数,默认为 20个,用户可以自定义设置信号量个数。
⑧LOSCFG_BASE_IPC_MUX_LIMIT 这个宏定义表示 LiteOS 最大支持互斥锁的个数,默认为 15。
⑨LOSCFG_BASE_IPC_QUEUE_LIMIT 这个宏定义表示 LiteOS 最大支持消息队列量的个数,默认为 10。
⑩OS_SYS_MEM_NUM 这个宏定义是内存块检查,默认为 20。
以上是比较合适用户进行移植、裁剪修改的。
5、不同的芯片需修改内容。
①根据不同的芯片需要修改对应工程中的 \Libraries\CMSIS 文件夹的接口文件 cortex-m?
②根据不同的芯片在 LiteOS\arch\arm\arm-m\cortex-m?\keil 中选择对应的接口文件。
③如下图所示,根据不同的芯片选择引用对应的头文件。

④如下图所示,根据不同的芯片修改对应的内存起始地址及大小。

⑤如下图所示,根据不同的芯片修改对应的驱动类型。

本人是使用正点原子战舰开发板STM32F103ZET6的。祝大家都完美移植。下面请观赏。


工程包下载链接:华为LiteOS移植工程包
请各位学友点赞+收藏!
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源
我给自己买了一个新的8gigUSBkey,我正在寻找一个合适的解决方案来拥有一个可移植RoR环境来学习。我在谷歌上搜索了一下,发现了一些可能性,但我很想听听一些现实生活中的经历和意见。谢谢! 最佳答案 我喜欢InstantRails,非常容易使用,无需安装程序,也不会修改您的系统环境。 关于ruby-on-rails-可移植RubyonRails环境,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q
我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n
我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:
文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su