cortex-m相关内容

.size X,.-X 之类的代码模式有什么作用?

我的问题是关于我在 ARM CORTEX M 启动文件中找到的一些流行但没有详细记录的代码,例如 这个STM32. “模式"是: .size X,.-X ,其中 X 是符号或标签. 我找到了这个答案并了解.size指令和 dot 特殊符号 工作,但仍然完整的行似乎对我没有任何作用..-X 操作的结果不会存储在任何地方. 谁能解释一下这条线的作用? 解决方案 即放在函数 ..
发布时间:2022-01-17 14:18:27 其他开发

arm sleep模式进出区别WFE、WFI

我对 ARM 架构相当陌生,我正试图围绕唤醒机制展开思考. 首先,我发现很难找到这方面的好信息.ARM 的文档似乎对这个主题非常简洁. 我想了解的是 Cortex(尤其是我正在使用的 M0)何时会醒来. 作为参考,我还参考了以下内容: 目的是什么WFI 和 WFE 指令和事件信号? 为什么处理器进入使用WFE指令待机,使用WFI指令不待机? 关于 WFE 说明的文档 ..
发布时间:2022-01-17 14:06:24 其他开发

ARM M4 每周期指令 (IPC) 计数器

我想计算在 ARM cortex-M4(或 cortex-M3)处理器上执行的每个周期的指令数. 需要的是:我要分析的代码的指令数(在运行时执行)和代码执行所需的周期数.p> 1 - 循环数 使用循环计数器非常简单直接. volatile unsigned int *DWT_CYCCNT ;volatile unsigned int *DWT_CONTROL ;volatile u ..
发布时间:2022-01-17 13:58:43 其他开发

如何强制 IAR 使用所需的 Cortex-M0+ 指令(此功能的优化将被禁用.)

我需要强制 IAR tp 在我的代码的某些部分使用某些 Cortex-M0+ 指令,同时使用 C 进行编码. 请不要提供纯 asm 函数或内联 asm 等. 我已设法为 51 条指令执行此操作,但无法为 ;ADR、BLX、RSBS、SBCS、SXTH 指令. 禁用此功能的优化(#pragma optimization=none) 考虑到教学行为,我尝试了很多方法.但IAR更 ..
发布时间:2021-11-17 22:42:10 其他开发

cortex M4 Thumb Assembly 函数地址

我目前正在尝试了解 Cortex-M 内核的 ARM 程序集. 我知道处于 Thumb 模式(这是内核支持的唯一模式)的函数是通过它们的地址调用的,并且地址的 LSB 为高表示目标是 Thumb 代码. 在汇编中,我在函数“Reset_Handler"前面写了以下内容来告诉汇编器标签处的数据是可执行的/函数: .type Reset_Handler, %functionReset_ ..
发布时间:2021-11-17 22:40:44 其他开发

Arm cortex-m3 mov 和 ldr

我不明白为什么我不能写 mov r1, #5000.为什么我必须使用 ldr 代替?R1 是 32 位寄存器,范围为 5000.我发现我可以mov r1, #255 但不能mov r1, #256.对我来说似乎很奇怪. 解决方案 阅读关于指令的文档,在这种情况下,指令是固定长度的,因此您没有空间容纳指令信息(操作码等)和16 或 32 位指令中的 32 位立即数,这是不可能的,因此需要对立 ..
发布时间:2021-11-17 22:40:02 其他开发

arm-none-eabi-ld 是否重写了 bl 指令?

我试图理解为什么某些 Cortex-M0 代码在链接和未链接时表现不同.在这两种情况下,它都被加载到 0x20000000.尽管我尽最大努力通过将 -fPIC 传递给编译器来生成位置无关代码,但在代码通过链接器后,bl 指令似乎有所不同.我的理解是否正确,这只是 ARM Thumb 中链接器工作的一部分,是否有更好的方法来生成与位置无关的函数调用? 链接: 20000000:2000000 ..
发布时间:2021-11-17 22:39:24 其他开发

Cortex M4 的引导加载程序 - 跳转到加载的应用程序

我在 Atmel SAM4E-EK 板上使用 Atmel SAM4E-16e.我已经为此配置编写了一个引导加载程序.引导加载程序通过 UART 接收 .bin 文件并将其写入闪存.这没有问题,我做了一个十六进制转储,这正是我所期望的: 0x400000 处的引导程序(AT SAM4E 的闪存起始地址) 我的应用程序在 0x420000 0x800000 是闪存结束地址 这是 C 代 ..
发布时间:2021-11-17 22:37:19 其他开发

Cortex M4 的引导加载程序 - 跳转到加载的应用程序

我在 Atmel SAM4E-EK 板上使用 Atmel SAM4E-16e.我已经为此配置编写了一个引导加载程序.引导加载程序通过 UART 接收 .bin 文件并将其写入闪存.这没有问题,我做了一个十六进制转储,这正是我所期望的: 0x400000 处的引导程序(AT SAM4E 的闪存起始地址) 我的应用程序在 0x420000 0x800000 是闪存结束地址 这是 C 代 ..
发布时间:2021-11-17 22:36:25 其他开发

使用 STM32 和 HAL 将 DWT 周期计数转换为时间

我正在 FreeRTOS 中的 STM32F302R8 上进行开发.我正在使用 here 来分析执行时间.我的 DWT 周期计数似乎有效,但我不确定如何将其转换为秒.从我在网上收集的信息来看,循环计数似乎是基于 CPU 频率的.哪个 HAL 函数将为我返回正确的 CPU 频率?我认为这是以下之一 uint32_t HAL_RCC_GetSysClockFreq(void);uint32_t HA ..
发布时间:2021-11-17 22:36:01 其他开发

编译 Cortex M4 时 CPU 架构冲突 1/13

我曾经用 arm-none-eabi-gcc/arm-none-eabi-g++ 编译我的微控制器代码,一切正常.我在 Mac 上使用自制的 Cask gcc-arm-embedded.昨天我更新了它,现在当我为 Cortex M4 架构编译(用 M3 编译得很好)时,我在链接阶段为每个目标文件收到这些错误消息: /usr/local/Caskroom/gcc-arm-embedded/6-20 ..
发布时间:2021-11-17 22:31:16 其他开发

LDMIA 指令在 Cortex M4 中的外部 SRAM 上无法正常工作

我在拇指模式下使用 STM32L486ZG 板.我正在运行一个没有任何 RTOS 的简单裸机应用程序.我使用 FSM 将外部 SRAM 连接到电路板.外部 SRAM 位于地址 0x60000000.系统已初始化并以 72MHz 的频率运行(我已经在 18-80MHz 的频率下尝试过这个问题),现在在我的主函数中,我有以下代码: int main(){asm 易变的 (“推{r0}\n"“移动 r ..
发布时间:2021-11-17 22:31:04 其他开发

ARM Cortex-M0 上的不稳定周期计数

[收到大量文字,因为我想尽可能详细地说明我的问题.] 我正在优化 Cortex-M0 的手写 ARM 汇编代码.我使用的板子是 STMicro STM32F0Discovery,它有一个 STM32F051R8 控制器.控制器以 48 MHz 运行. 不幸的是,在进行优化时,我得到了一些非常奇怪的循环计数. 例如,在我的代码中将单个 nop 添加到循环中应该总共添加 2 个循环( ..
发布时间:2021-11-17 22:30:25 其他开发

在手臂皮质 m4 上进入睡眠模式

我正在尝试让 cortex m4 处理器休眠不到一秒钟.我希望能够让它进入睡眠状态,然后一秒钟后,或者当按下按钮时,从我离开的地方开始.我查看了参考手册,VLPS 模式看起来很适合我的需要.我不知道如何开始进入该模式或如何对 NVIC 进行编程. 更多信息:我在裸机上用 C 语言做这件事. 解决方案 您可以下载并检查实现 这个演示.尽管演示是针对 RTOS 的,但无论是使用 RTOS ..
发布时间:2021-11-17 22:28:36 其他开发

为什么在STM32编程中需要无限循环?

我正在用 C (gcc) 编写 STM32F4,它是 ARM Cortex M4,我看到所有示例都以无限循环完成它们的 main() 函数,即使程序的其余部分将从中断中执行.如果我尝试从我的程序中删除循环,中断也会停止. 为什么我不能删除这个循环并退出主线程? 这是程序集(我猜是拇指,但即使有文档我也看不懂): LoopF​​illZerobss:ldr r3,= _ebsscmp ..
发布时间:2021-11-17 22:24:38 其他开发