首页
学习
活动
专区
圈层
工具
发布

实用技能分享,充分利用内联函数,内联汇编,内部函数和嵌入式汇编提升代码执行效率和便捷性(2021-12-17)

因为这样才能发挥内联的优势: LL库这里用的关键字是__STATIC_INLINE,这个是ARM的CMSIS软件包专门做的定义方式,对MDK,IAR和GCC都做了适配,通用。...cmsis_armcc.h :对应MDK AC5头文件 cmsis_gcc.h : 对应各种基于GCC的编译器头文件 cmsis_clang.h : 对应MDK AC6头文件 cmsis_iccarm.h...: 对应IAR头文件 比如我们常用的函数__set_MSP设置主堆栈指针,实现如下: 又比如32bit变量赋值的原子操作,由于要用到互斥指令ldrex和strex,通过内联汇编,就可以方便的在各种编译器里实现...内部函数编译为内联代码,作为单个指令或作为一小段指令序列,一般用双下划线 (__) 标记 针对内部函数,ARM的CMSIS软件包也是做了一大批,主要分两类: 1、一类是CPU使用的内部函数,部分截图...2、另一类是SIMD指令,这个在CMSIS-DSP库里面被大量应用,主要使用操作加速,下面是部分截图: 四、嵌入式汇编: 现在xxxx.S启动文件和各种RTOS的Port移植,都是采用的汇编文件(或者内联汇编

1.6K30

__disable_irq() 和 __enable_irq()定义在哪?

直接在工程里搜索,确实只能在cmsis_armcc.h文件里看到下面的两处注释说明,并没有这俩函数的具体定义。 可是如果直接去调用这俩函数的话,编译又不会报错,那么这俩函数的定义到底在哪呢?...__disable_irq() 和 __enable_irq() 是所谓的intrinsic函数,编译器自动识别并替换为相关的指令,它们其实是编译器的一部分,实际的定义位于arm_compat.h 文件中...defined(__ARM_ARCH_PROFILE) || __ARM_ARCH_PROFILE != 'M' || // __ARM_ARCH != 6) && !...(void) { #if __ARM_ARCH >= 6 __asm__ __volatile__("cpsie f"); #else /* __ARM_ARCH 6 */ unsigned...如果想真正禁止中断的产生的话,还得从源头上配置相关外设的寄存器关掉中断才行。

1.8K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【STM32H7的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5和AC6) 本期教程主要讲解ARM官方DSP源码和库的移植以及一些相关知识的介绍。...6.1 初学者重要提示 6.2 DSP库的下载和说明 6.3 DSP库版本的区别 6.4 DSP库的几个重要的预定义宏含义 6.5 使用MDK的AC6编译器优势 6.6 DSP库在MDK上的移植(AC5...鉴于MDK的AC6(ARM Compiler 6.X)编译器在浮点处理上的强劲性能,每个例子将必做一个AC6版,而且ARM编译好的DSP库也开始直接采用AC6。  ...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...但AC5和AC6工程上有三处区别,这里着重指出下:   第1处,采用AC6编译器:   第2处,警告类型选择AC5-like:   第3处,MDK的AC6工程代码如果有源文件是GBK编码,而且使用汉字,

    2K10

    【STM32F429的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5和AC6) 本期教程主要讲解ARM官方DSP源码和库的移植以及一些相关知识的介绍。...6.1 初学者重要提示 6.2 DSP库的下载和说明 6.3 DSP库版本的区别 6.4 DSP库的几个重要的预定义宏含义 6.5 使用MDK的AC6编译器优势 6.6 DSP库在MDK上的移植(AC5...鉴于MDK的AC6(ARM Compiler 6.X)编译器在浮点处理上的强劲性能,每个例子将必做一个AC6版,而且ARM编译好的DSP库也开始直接采用AC6。  ...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...但AC5和AC6工程上有三处区别,这里着重指出下:   第1处,采用AC6编译器   第2处,警告类型选择AC5-lik   第3处,MDK的AC6工程代码如果有源文件是GBK编码,而且使用汉字,MDK

    1.3K20

    【STM32F407的DSP教程】第6章 ARM DSP源码和库移植方法(MDK5的AC5和AC6)

    mod=viewthread&tid=94547 第6章   ARM DSP源码和库移植方法(MDK5的AC5和AC6) 本期教程主要讲解ARM官方DSP源码和库的移植以及一些相关知识的介绍。...6.1 初学者重要提示 6.2 DSP库的下载和说明 6.3 DSP库版本的区别 6.4 DSP库的几个重要的预定义宏含义 6.5 使用MDK的AC6编译器优势 6.6 DSP库在MDK上的移植(AC5...鉴于MDK的AC6(ARM Compiler 6.X)编译器在浮点处理上的强劲性能,每个例子将必做一个AC6版,而且ARM编译好的DSP库也开始直接采用AC6。...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...但AC5和AC6工程上有三处区别,这里着重指出下:   第1处,采用AC6编译器:   第2处,警告类型选择AC5-like:   第3处,MDK的AC6工程代码如果有源文件是GBK编码,而且使用汉字,

    1.5K30

    【教程】如何用GCC“零汇编”白嫖MDK

    虽然这三个编译器都是由Arm所维护和提供的,但前两者算是彼此兼容的编译器: 使用共同的 armlink 使用相同的方式来描述地址空间布局(分散加载脚本 scatter script) 从Arm Compiler...---- 值得注意的是:有时候,某些芯片会提供面向Arm Compiler 5或者Arm Compiler 6的system_xxxx.c,其实我们完全可以拷贝出来直接替换掉这里的 system_ARMCM7...选项卡中选择对应芯片,这样MDK会自动将目标芯片头文件的路径加入编译器的头文件搜索列表中。...目标芯片没有针对MDK的CMSIS-Pack,而只提供了目标芯片的头文件(包含了寄存器定义等等) 此时,我们需要将目标芯片的头文件拷贝到工程目录下,并收工将对应路径添加到编译器的头文件搜索列表中。...在Github上的最新版本中,优化了gcc的部署体验——也能像Arm Compiler 5以及Arm Compiler 6那样简单拖放lib即可完成部署: 具体步骤如下: 1、通过下面连接获取最新版本的

    2.8K10

    i.MX RT1062 嵌套中断向量控制器NVIC

    ,类型为 IRQn_Type,在头文件MIMXRT1062.h中定义,代码如下: typedef enum IRQn { /* Auxiliary constants */ NotAvail_IRQn...CMSIS-Core 是ARM为了屏蔽不同厂商之间操作内核的差异,提供了一层抽象层,只要是ARM Cortex-M的内核都可以调用CMSIS-Core的API去操作,其核心就是一个头文件core_cm7...)IRQn) & 0x1FUL)); __DSB(); __ISB(); } } 细心的同学不难发现,这两个API传入的参数,刚好是在MIMXRT1062.h头文件中的中断号枚举类型...IRQn_Type,所以,你应该知道如何使用了吧~ 在 NXP 提供的 FSL固件库fsl_common.h中,对CMSIS-Core提供的API再次进行了封装: /*!...代码分析 该实验的核心逻辑都在 source 文件夹中的 gpio_input_interrupt.c 文件中。 4.1.

    1.2K30

    TencentOS tiny 内核移植参考指南(IAR版)

    ; port_s.S 文件是TencentOS tiny的任务调度汇编代码,主要做弹栈压栈等处理的,port_c.c适配systick等,这两个文件 每个IP核和编译器都是不一样的,如果您的芯片是ARM...Cortex M核,我们都已经适配好,比如现在我们移植的芯片是STM32L073RZ,是ARM Cortex M0+核,使用的编译器是IAR,所以我们选择arch\arm\arm-v7m\cortex-m0...+\iccarm下的适配代码,如果你的开发板是STM32F429IG,M4核,编译器是GCC,则可以选择arch\arm\arm-v7m\cortex-m4\gcc目录下的适配文件。...添加cmsis os源码 cmsis os是TencentOS tiny为了兼容cmsis标准而适配的OS抽象层,可以简化大家将业务从其他RTOS迁移到TencentOS tiny的工作量,我们在IAR...文件; TencentOS tiny所有要添加的头文件目录如下: [ce46270ddd79961cf98c5e740cb894ea.png] 6.

    2.4K60

    TencentOS tiny 内核移植参考指南(Keil版)

    2.准备编译器环境 本移植指南针对的是Keil编译器,所以我们移植内核前需要先安装Keil编译器,能编译ARM Cortex M核的Keil编译器现在也叫MDK,最新版本5.28a,下载地址为:https...从代码仓直接拷贝过来即可,而board目录下则放入我们前面生成的裸机工程代码,我们移植的开发板取名叫NUCLEO_L073RZ,裸机代码全部拷贝到下面即可,如下图所示: [b8bd75a9baec5d5f11a3505014f9ba46...,port_c.c适配systick等,这两个文件 每个IP核和编译器都是不一样的,如果您的芯片是ARM Cortex M核,我们都已经适配好,比如现在我们移植的芯片是STM32L073RZ,是ARM...Cortex M0+核,使用的编译器是KEIL,所以我们选择arch\arm\arm-v7m\cortex-m0+\armcc下的适配代码,如果你的开发板是STM32F429IG,M4核,编译器是GCC...添加cmsis os源码 cmsis os是TencentOS tiny为了兼容cmsis标准而适配的OS抽象层,可以简化大家将业务从其他RTOS迁移到TencentOS tiny的工作量。

    4.1K60

    TencentOS tiny 内核移植参考指南(GCC版)

    2.准备编译器环境 本移植指南针对的是GCC编译器,所以我们移植内核前需要先安装GCC编译器,能编译ARM Cortex M核的GCC编译器下载地址为:https://developer.arm.com....png] 如上图所示,下载windows exe版本的gcc编译器(Linux下也可以下载linux版本的编译器),下载完成在windows环境下按照提示安装,如下图, [af5ef27546cb033cc925929a42f6d989...的任务调度汇编代码,主要做弹栈压栈等处理的,port_c.c适配systick等,这两个文件 每个IP核和编译器都是不一样的,如果您的芯片是ARM Cortex M核,我们都已经适配好,比如现在我们移植的芯片是...,M4核,编译器是keil,则可以选择arch\arm\arm-v7m\cortex-m4\armcc目录下的适配文件。...添加cmsis os源码 cmsis os是TencentOS tiny为了兼容cmsis标准而适配的OS抽象层,可以简化大家将业务从其他RTOS迁移到TencentOS tiny的工作量。

    2.5K31

    【教程更新】Arm-2D的公开课你错过了么?

    本身占用RAM极小; 支持最高优化等级(-O3,-Os,-Oz,-Ofast,-Omax,-Omin) 支持Arm Compiler 5、Arm Compiler 6、GCC和LLVM(理论上也支持IAR...: 2、将Arm-2D添加到MDK工程中 在工程管理器中新建一个名为“Arm-2D”的分组,并将文件夹“Arm-2D/Library”下“Include”和“Source”中所有内容都添加到分组中: 为了获取...具体步骤如下: 1、通过git工具将最新版本的CMSIS从https://github.com/ARM-software/CMSIS_5 的develop 分支下载到本地。...在工程管理器中,找到CMSIS,在右键的弹出菜单中选择“Options for Component Class 'CMSIS'”: 在弹出窗口中选中DSP,并切换到 C/C++选项卡,如果你使用的是Arm...END_IMPL_ARM_2D_REGION_LIST() 这里,“列表名称”实际上就是列表的变量名,而“列表变量的修饰” 则是大家熟悉的类型修饰符,比如 static、const 一类——正确使用修饰符既可以节省

    93020

    【喂到嘴边了的模块】准备徒手撸GUI?用Arm-2D三分钟就够了

    从2021年3月31日在Github上公开算起,Arm-2D已经从青涩中逐渐成熟(从0.9.x版本一路进化到 1.0.0-preview)、从寄人篱下到自立门户(拥有了不久即将公开的独立的仓库 https...步骤四:添加代码 在 main() 函数所在的源代码文件中包含头文件: #include "arm_2d.h" 并在 main()函数中完成对 arm-2d 的初始化: int main(void)...END_IMPL_ARM_2D_REGION_LIST() 这里,“列表名称”实际上就是列表的变量名,而“列表变量的修饰” 则是大家熟悉的类型修饰符,比如 static、const 一类——正确使用修饰符既可以节省...问题二:编译时报告与 ARM_PRIVATE() 相关的错误 这类问题是由于你的 MDK 工程中存在独立的 CMSIS,且该 CMSIS 与 RTE中所添加的 CMSIS 存在冲突(工程中的 CMSIS...此外,要检查你是否正确开启了 GNU 扩展和对应的C标准(Arm Compiler 5要开启 C99,Arm Compiler 6要开启 gnu99) 问题三:提示找不到__aeabi_assert

    2.5K30

    【STM32F407开发板用户手册】第1章 初学STM32F407的准备工作

    2、  调试器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。 3、  配套开发板是安富莱的:STM32-V5开发板,MCU是STM32F407IGT6。...F407的GPIO最高翻转速度为90MHz,F1最大翻转速度只有18MHz。   F1最多可提供5个UART串口,F407最多可以提供6个UART串口。  ...针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.5.1): 这个软件包可以在三个地方获取...通过GitHub获取也比较方便,地址:https://github.com/ARM-software/CMSIS_5 。点击右上角就可以下载CMSIS软件包了。...对芯片的外设、存储器等进行了详细描述,编译器要用到这个文件,不同系列芯片有不同的SVD文件。以STM32F407为例,在MDK的option选项里面可以看到以svd为后缀的文件被调用。

    6.5K25

    【教程更新】一网打尽Arm-2D的资料和傻瓜部署教程

    作为一个资料综合贴,本文希望能够帮您解决以下问题: Arm-2D公开课和对应的资料贴从哪里找 Arm-2D的傻瓜图文部署教程 Arm-2D依赖哪个版本的CMSIS?...本身占用RAM极小; 支持最高优化等级(-O3,-Os,-Oz,-Ofast,-Omax,-Omin) 支持Arm Compiler 5、Arm Compiler 6、GCC和LLVM(理论上也支持IAR...: 2、将Arm-2D添加到MDK工程中 在工程管理器中新建一个名为“Arm-2D”的分组,并将文件夹“Arm-2D/Library”下“Include”和“Source”中所有内容都添加到分组中:...具体步骤如下: 1、通过git工具将最新版本的CMSIS从https://github.com/ARM-software/CMSIS_5 的develop 分支下载到本地。...END_IMPL_ARM_2D_REGION_LIST() 这里,“列表名称”实际上就是列表的变量名,而“列表变量的修饰” 则是大家熟悉的类型修饰符,比如 static、const 一类——正确使用修饰符既可以节省

    2.7K60

    【安富莱STM32H7教程】第1章 初学STM32H7的准备工作

    2、  调试器使用JLINK,CMSIS-DAP,ULINK或者STLINK均可。 3、  配套开发板是安富莱的:STM32-V7开发板,MCU是STM32H743XIH6。...针对我们这个教程来说,当前还用不到这些东西,主要用到CMSIS软件包里面的如下头文件即可(不同版本,截图中的文件可能不同,这个软件包是一直在更新中的,下面的截图的版本是V5.3.0): 这个软件包可以在三个地方获取...通过GitHub获取也比较方便,地址:https://github.com/ARM-software/CMSIS_5 。点击右上角就可以下载CMSIS软件包了。...对芯片的外设、存储器等进行了详细描述,编译器要用到这个文件,不同系列芯片有不同的SVD文件。以STM32H7为例,在MDK的option选项里面可以看到以svd为后缀的文件被调用。...1.8   STM32H7调试方法 STM32H7的调试方法主要分为两大类: 1、MDK和IAR编译器自带的调试     MDK调试方法在第5章进行了详细讲解。

    3K50

    【STM32F407的DSP教程】第7章 ARM DSP源码和库移植方法(IAR8)

    通过GitHub获取也比较方便,地址:https://github.com/ARM-software/CMSIS_5 。点击右上角就可以下载CMSIS软件包了。...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...MDK(ARM),IAR和CGG版库文件: Projects文件夹里面的文件如下,提供了三个版本的工程模板,每个模板里面都是把所有源码文件添加了进来: Source文件夹中的文件如下,这个是DSP的源码文件...7.5.1  第一步:建立IAR工程并添加DSP库 为了方便起见,我们这里不再专门建立一个MDK工程了,直接以V6开发板中的例子:V7-001_跑马灯例程为模板(注意,要使用我们HAL版本例子)进行添加即可...: 7.5.2  第二步:添加头文件路径 添加DSP所需的头文件路径,这个头文件路径是已经在模板工程中添加好的,这里只是跟大家强调一下: 这里要注意一点,为什么直接添加路径Libraries\CMSIS

    1.7K20

    【STM32F429的DSP教程】第7章 ARM DSP源码和库移植方法(IAR8)

    通过GitHub获取也比较方便,地址:https://github.com/ARM-software/CMSIS_5 。点击右上角就可以下载CMSIS软件包了。...打开固件库里面的CMSIS文件,可以看到如下几个文件: 其中DSP文件夹是我们需要的: Examples文件夹中的文件如下,主要是提供了一些例子: Include文件夹里面是DSP库的头文件: Lib文件夹里面是...MDK(ARM),IAR和CGG版库文件: Projects文件夹里面的文件如下,提供了三个版本的工程模板,每个模板里面都是把所有源码文件添加了进来: Source文件夹中的文件如下,这个是DSP的源码文件...7.5.1  第一步:建立IAR工程并添加DSP库 为了方便起见,我们这里不再专门建立一个MDK工程了,直接以V6开发板中的例子:V6-001_跑马灯例程为模板(注意,要使用我们HAL版本例子)进行添加即可...: 7.5.2  第二步:添加头文件路径 添加DSP所需的头文件路径,这个头文件路径是已经在模板工程中添加好的,这里只是跟大家强调一下: 这里要注意一点,为什么直接添加路径Libraries\CMSIS

    1.2K20

    【STM32】软件资源及开发环境

    文章目录 MDK5 固件库 新建工程模板 程序下载 MDK5 MDK5的组成如下(核心包括4个部分:uVision IDE with Editor(编辑器),ARM C/C++ Compiler(编译器...Software Packs(包安装器)又分为:Device(芯片支持),CMSIS(ARM Cortex 微控制器软件接口标准)和 Mdidleware(中间库)三个小部分): 准备好MDK5安装包和...下面是基于CMSIS的应用程序结构: CMSIS 分为 3 个基本功能层: 内核外设访问层:ARM 公司提供的访问,定义处理器内部寄存器地址以及功能函数。...可以看出,CMSIS 层在整个系统中是处于中间层,向下负责与内核和各个外设直接打交道,向上提供实时操作系统用户程序调用的函数接口。通过制定标准,其他公司设计的库函数都得到了规范。...新建工程模板 用Keil新建工程,选择芯片型号STM32F103ZET6: 到这里,我们还只是建了一个框架,还需要添加启动代码,以及.c 文件等。

    48310

    移动和嵌入式设备上也能直接玩机器学习?

    训练目前通常在服务器或类似设备上发生,而推理则更多地转移到网络边缘,这正是新版本 Arm NN 的重点所在。 ?...软件开发人员面临的可能是很多不同的平台,这就带来一个现实问题:CPU 通常包含多个内核(在 Arm DynamIQ big.LITTLE中,甚至还有多种内核类型),还要考虑 GPU,以及许多其他类型的专用处理器...Arm 对 Google NNAPI 的支持概览 CMSIS-NN CMSIS-NN 是一系列高效神经网络内核的集合,其开发目的是最大程度地提升神经网络的性能,减少神经网络在面向智能物联网边缘设备的...借助基于 CMSIS-NN 内核的神经网络推理,运行时/吞吐量和能效可提升大约 5 倍(下篇文章会对 CMSIS-NN 进行介绍)。 ?...Arm NN 的未来发展 这只是 Arm NN 的第一步:我们还计划添加其他高级神经网络作为输入,对 Arm NN 调试程序执行进一步的图形级别优化,覆盖其他类型的处理器或加速器……请密切关注今年的发展

    2.1K90
    领券