皮皮网
皮皮网

【hbasesnapshot源码】【华英会app源码】【miui12.0源码】cmsis源码下载

来源:jsp 课程管理源码 发表时间:2024-11-27 17:41:05

1.为什么要用CMSIS RTOS
2.鸿蒙轻内核M核源码分析:中断Hwi
3.STM32 HAL库的码下框架结构
4.如何使用STM32
5.如何在MDK下建立stm32工程
6.树莓派Zero 2W安装Pyocd经验分享

cmsis源码下载

为什么要用CMSIS RTOS

       1、集成在keil中,没有所谓移植概念。针对任何MCU都可以一键添加(试想一下,如果你将来用的不是STM,那么移植OS是不是还是那么容易);

       2、占用资源极小。大约5kB,而且针对cortex系列ARM官方优化,效率不言自明;

       3、组件丰富。常用中间件USB/network/GUI/文件系统等,ARM官方已经准备好,只需要在keil中一键添加,同样没有移植概念;

       4、仿真非常方便。在keil的debug模式中,轻松查看任务的CPU、内存占用,还有各任务的运行时间、运行状态,各任务之间如何抢占,非常直观,不需要像其他RTOS那样调用专用的查看函数;

       5、CMSIS RTOS是ARM现在热推的物联网操作系统mbedOS的基础,搞懂这个RTOS API,mbedOS更容易上手,物联网是大势所趋,ARM的在这个浪潮中的地位众所周知(软银收购ARM的核心原因),物联网以后估计会产生大量的相关工作机会;

       6、使用极简单。再次提醒,CMSIS RTOS只是一套API,有兴趣的可以去研究它封装OS源码,没兴趣的,看看API拿来就用;

       7、免费!这点和freeRTOS一样,比uc/oS更有潜力,不过freeRTOS是个人开源项目,后续升级维护缺乏商业模式,而ARM刚从软银那里搞来大笔钱,估计后续发展推广更为强劲,话说回来,如果freeRTOS真的非常优秀,ARM也可以对它进行封装。

鸿蒙轻内核M核源码分析:中断Hwi

       在鸿蒙轻内核源码分析系列中,本文将深入探讨中断模块,码下旨在帮助读者理解中断相关概念、码下鸿蒙轻内核中断模块的码下源代码实现。本文所涉及源码基于OpenHarmony LiteOS-M内核,码下读者可通过开源站点 gitee.com/openharmony/k... 获取。码下hbasesnapshot源码

       中断概念介绍

       中断机制允许CPU在特定事件发生时暂停当前执行的码下任务,转而处理该事件。码下这些事件通常由外部设备触发,码下通过中断信号通知CPU。码下中断涉及硬件设备、码下中断控制器和CPU三部分:设备产生中断信号;中断控制器接收信号并发出中断请求给CPU;CPU响应中断,码下执行中断处理程序。码下

       中断相关的码下硬件介绍

       硬件层面,中断源分为设备、码下中断控制器和CPU。设备产生中断信号;中断控制器接收并转发这些信号至CPU;CPU在接收到中断请求后,华英会app源码暂停当前任务,转而执行中断处理程序。

       中断相关的概念

       每个中断信号都附带中断号,用于识别中断源。中断优先级根据事件的重要性和紧迫性进行划分。当设备触发中断后,CPU中断当前任务,执行中断处理程序。中断处理程序由设备特定,且通常以中断向量表中的地址作为入口点。中断向量表按中断号排序,存储中断处理程序的地址。

       鸿蒙轻内核中断源代码

       中断相关的声明和定义

       在文件 kernel\arch\arm\cortex-m7\gcc\los_interrupt.c 中定义了结构体、全局变量和内联函数。关键变量 g_intCount 记录当前正在处理的中断数量,内联函数 HalIsIntActive() 用于检查是miui12.0源码否正在处理中断。中断向量表在中断初始化过程中设置,用于映射中断号到相应的中断处理程序。

       中断初始化 HalHwiInit()

       系统启动时,在 kernel\src\los_init.c 中初始化中断。HalHwiInit() 函数在 kernel\arch\arm\cortex-m7\gcc\los_interrupt.c 中实现,负责设置中断向量表和优先级组,配置中断源,如系统中断和定时器中断。

       创建中断 HalHwiCreate()

       开发者可通过 HalHwiCreate() 函数注册中断处理程序,传入中断号、优先级和中断模式。函数内部验证参数,设置中断处理程序,最终通过调用 CMSIS 函数完成中断创建。

       删除中断 HalHwiDelete()

       中断删除操作通过 HalHwiDelete() 实现,接收中断号作为参数,单页源码文件调用 CMSIS 函数失能中断,设置默认中断处理程序,完成中断删除。

       中断处理执行入口程序

       默认的中断处理程序 HalHwiDefaultHandler() 仅用于打印中断号后进行死循环。HalInterrupt() 是中断处理执行入口程序的核心,它包含中断数量计数、中断号获取、中断前后的操作以及调用中断处理程序的逻辑。

       开关中断

       开关中断用于控制CPU是否响应外部中断。通过宏 LOS_IntLock() 关闭中断, LOS_IntRestore() 恢复中断状态, LOS_IntUnLock() 使能中断。这组宏对应汇编函数,使用寄存器 PRIMASK 控制中断状态。

       小结

       本文详细解析了鸿蒙轻内核中断模块的源代码,涵盖了中断概念、溯源码密封贴初始化、创建、删除以及开关操作。后续文章将带来更多深入技术分享。欢迎在 gitee.com/openharmony/k... 分享学习心得、提出问题或建议。关注、点赞、Star 和 Fork 到个人账户,便于获取更多资源。

STM HAL库的框架结构

       全文链接:

       HAL库的框架结构涉及了Cortex系列微控制器软件接口标准(CMSIS)的背景,以及STM微控制器库的构建方式。CMSIS标准由ARM与芯片厂商共同制定,旨在解决不同芯片厂商生产的Cortex微控制器软件兼容性问题,提供通用API接口以简化移植工作。STM的库遵循CMSIS标准,分为三种类型,提供硬件抽象层,屏蔽硬件差异,便于软件移植。

       MCU固件包包含HAL库,它是STM芯片开发的核心部分,文件结构清晰,分为Src和Inc两个主要部分,分别存储源码和头部文件。HAL库API函数遵循特定命名规则,提供初始化、读写、控制、状态和错误查询等功能。对寄存器位操作使用宏定义,便于高效操作。

       HAL库设计借鉴面向对象思想,采用句柄概念抽象外设,简化用户代码编写。句柄贯穿整个外设操作流程,例如USART2初始化时定义句柄huart2,用于管理串口操作。句柄内部结构包含串口初始化数据类型,用于配置串口参数。初始化过程涉及配置寄存器和中断处理,确保外设功能正常。

       总之,STM HAL库通过CMSIS标准和面向对象设计,提供了高效、统一的微控制器软件接口,简化了开发流程,提高了代码可移植性。

如何使用STM

       å…³äºŽèŽ·å–ST公司的STM固件库源码,有几种方法。我们可以在百度上搜,网上有进行了分享,也可以到ST公司的官网进行查找并下载。不过,如果英文不好的话,要在官网上找到STM固件库确实是件很吃力的事。在官网上可以根据英文提示按不同条件进行筛选,具体操作如下图所示:

       END

       ç¬¬äºŒæ­¥ï¼šæ–°å»ºå·¥ç¨‹æ–‡ä»¶å¤¹â€”—《STM工程模板》

       é¦–先,新建工程文件夹《STM工程模板》,然后再在该文件夹下新建6个文件夹,分别为:《Doc》、《Libraries》、《Listing》、《Output》、《Project》和《User》。其中,《Doc》用于存放各种说明文档;《Libraries》用于存放各种库文件;《Listing》用于存放编译时产生的中间文件;《Output》用于存放生成的下载所需的文件;《Project》用于存放工程文件;《User》用于存放用户文件,即我们自己编写的各种源文件。具体情况如下图所示:

       END

       ç¬¬ä¸‰æ­¥ï¼šå‘建立的工程文件夹中添加库文件

       å°†åº“文件中的inc和src文件夹复制到模板工程文件夹下的FWLIB文件夹。具体操作情况如下图:

       å°†åº“文件中CoreSupport文件夹下的文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图:

       å°†åº“文件中DeviceSupport文件夹下的相关文件复制到工程模板文件夹下的CMSIS文件夹。具体操作情况如下图:

       å°†åº“文件中startup文件夹下arm中的文件全部复制到工程模板文件夹下的startup文件夹。具体操作情况如下图:

       å°†åº“文件中Project文件夹下的相关文件复制到工程模板文件夹下的User文件夹中。具体操作情况如下图:

       ç¬¬å››æ­¥ï¼šä½¿ç”¨MDK(Keil)新建工程模板

       é¦–先得选择CPU,这个在新建工程时,会有一个选择芯片的界面,我们只需按提示以及自己的实际情况来选择就好了。具体操作情况如下图:

       æ›´æ”¹å·¥ç¨‹åï¼ˆå°†é»˜è®¤çš„工程名改为“Template”的方法:选中工程,按“F2”键)并为工程添加项目组(Add group to project)。具体操作情况如下图:

       åˆ†åˆ«å‘各个项目组中添加我们刚刚从库中复制过来的文件文件(Add files to group)。具体操作情况如下图:

       ç¬¬äº”步:工程配置

       é…ç½®Target选项卡。具体操作情况如下图:

       é…ç½®Output选项卡。具体操作情况如下图:

       é…ç½®Listing选项卡。具体操作情况如下图:

       é…ç½®C/C++选项卡。具体操作情况如下图:

       é…ç½®Debug选项卡。具体操作情况如下图:

       é…ç½®Utilities选项卡。具体操作情况如下图:

如何在MDK下建立stm工程

       1.解压stmfx_stdperiph_lib.zip 可以从ST官方网站免费下载。

       2.创建一个Demo文件夹

        2.1 新建子文件夹User,用于存放用户源程序

        2.2 新建子文件夹Project,用户KEIL工程文件

        2.3 在Project下依次创建Obj和List子文件夹,存放编译过程中产生的中间文件。

       3. 复制源代码到Demo文件夹

        3.1 将stmfx_stdperiph_lib\STMFx_StdPeriph_Lib_V3.1.2Libraries文件整体复制到Demo文件夹下。这就是ST的标准库,是以源代码形式提供的。

        3.2 将库中的演示代码IOToggle中的文件复制到Demo\User文件夹.

       4. 新建一个Keil MDK工程

        4.1 启动Keil MDK,点击菜单 New uVision Project,然后按向导进行操作

        4.2 选择CPU类型为 STMFZE (这是安富莱STM开发板采用CPU类型)

        4.3 当提示是否复制启动代码时,请选择否。(我们用最新的库中的启动代码,不用Keil软件自带的旧版本启动文件)

        4.4 根据自己的需要修改Target名字。(名字任意)

        4.5 为了便于代码管理,在这个Project下创建几个Group (名字可以任意)

        User : 存放用户自己写的源代码

        RVMDK : 存放启动文件(汇编文件)

        StdPeriph_Driver : 存放ST标准库文件

        CMSIS : 存放CMSIS接口文件(这也是库的一部分)

        4.6 创建好Group后,我们开始依次添加文件。

       5. 修改源代码。我们将修改main.c 文件,换成我们自己跑马灯程序。

       6. 配置工程, 点击“Options”按钮

        6.1 切换到Output。

        选择Object文件夹。

        在Create Hex File 前打钩。

        6.2 切换带Listing。

        选择Listings文件夹

        6.3 切换到C/C++

        添加两个预编译宏 STMFX_HD, USE_STDPERIPH_DRIVER (这是ST库用到了这两个宏)

        修改Includes路径

        6.4 切换到Debug

        选择硬件调试器(缺省是软件仿真),我们选择Cortex-M3 J-Link调试器

        再 Run to main前打钩

        6.4 切换到Utilities

        选额调试器类型,我们选择Cortex-M3 J-Link

        点settings按钮,添加Flash编程算法,我们选择STM高密度器件,Flash容量K字节

       7. 配置工程完毕。下面开始编译。

       8. 编译OK,开始调试。

       9. 教程结束。

       å·²ç»è®²å¾—很清楚了吧,如果还有什么疑问可以再问我或者联系我。

树莓派Zero 2W安装Pyocd经验分享

       树莓派Zero 2W安装Pyocd的经验分享,我直接跳过系统的安装配置和更新软件源的部分,因为这些网上都有详尽的指南。树莓派内置的烧写系统流程简单,但有几个关键步骤需要特别注意。

       首要任务是安装libusb库,这是Pyocd运行的基础。紧随其后,我需要安装pip(由于没有预先安装,这部分是必要的)。随后更新pip版本,确保兼容性。

       安装过程中,理解python命令前加sudo与不加的区别十分重要。它们操作在不同的环境中,因此避免混淆。

       下载并解压pyocd源码后,我遇到了一个挑战:Zero 2W的内存限制导致编译过程异常。官方文档指出问题可能与CMSIS-Pack-Manager有关,但经过实际测试,我发现卡死的原因是capstone包,一个用于反编译的工具。由于我主要使用Zero 2W来下载程序,因此并不需要编译capstone包。如果需要反编译功能,可以尝试交叉编译或在4B上编译后复制到Zero 2W。

       解决capstone包的问题,我注释了该包,并在项目根目录的setup.cfg文件中进行调整。随后,我执行编译命令,加入了sudo以获得足够的权限访问USB调试设备。尝试发现,Zero 2W在执行此命令时存在权限问题,但4B和Zero W并无此困扰。因此,我选择将pyocd编译到管理员目录下,成功解决了权限问题。

       成功编译后,我尝试烧写固件,这一过程顺利无阻。如果你也想烧写F,可以参考特定的安装指南,注意过程可能较为漫长,需要耐心等待。

相关栏目:娱乐

.重点关注