cortex-m相关内容
当下面的代码在像 MSP430 微控制器这样的 16 位整数机器上运行时,s32 产生 65446 #include uint16_t u16c;int32_t s32;主函数(){u16c = 100U;s32 = 10 - u16c;} 我的理解是 10 - u16c 将隐式类型提升为 unsigned int.数学上 10 - u16c 等于 -90.但是如何将负数表
..
我的问题是关于我在 ARM CORTEX M 启动文件中找到的一些流行但没有详细记录的代码,例如 这个STM32. “模式"是: .size X,.-X ,其中 X 是符号或标签. 我找到了这个答案并了解.size指令和 dot 特殊符号 工作,但仍然完整的行似乎对我没有任何作用..-X 操作的结果不会存储在任何地方. 谁能解释一下这条线的作用? 解决方案 即放在函数
..
我对 ARM 架构相当陌生,我正试图围绕唤醒机制展开思考. 首先,我发现很难找到这方面的好信息.ARM 的文档似乎对这个主题非常简洁. 我想了解的是 Cortex(尤其是我正在使用的 M0)何时会醒来. 作为参考,我还参考了以下内容: 目的是什么WFI 和 WFE 指令和事件信号? 为什么处理器进入使用WFE指令待机,使用WFI指令不待机? 关于 WFE 说明的文档
..
我想计算在 ARM cortex-M4(或 cortex-M3)处理器上执行的每个周期的指令数. 需要的是:我要分析的代码的指令数(在运行时执行)和代码执行所需的周期数.p> 1 - 循环数 使用循环计数器非常简单直接. volatile unsigned int *DWT_CYCCNT ;volatile unsigned int *DWT_CONTROL ;volatile u
..
故事如下:我正在使用 AC6 Toolpack 在 Linux 中为 ARM Cortex-M0 处理器开发 C++ 软件.在我使用 Keil(在 Windows 中)(拥有自己的工具链)之前,我已经迁移到 GNU-toolchain ((GNU Tools for ARM Embedded Processors) 5.2.1) .我意识到的第一件事是;二进制文件大小大幅增加.我已经测试了每个编译
..
我需要强制 IAR tp 在我的代码的某些部分使用某些 Cortex-M0+ 指令,同时使用 C 进行编码. 请不要提供纯 asm 函数或内联 asm 等. 我已设法为 51 条指令执行此操作,但无法为 ;ADR、BLX、RSBS、SBCS、SXTH 指令. 禁用此功能的优化(#pragma optimization=none) 考虑到教学行为,我尝试了很多方法.但IAR更
..
我目前正在尝试了解 Cortex-M 内核的 ARM 程序集. 我知道处于 Thumb 模式(这是内核支持的唯一模式)的函数是通过它们的地址调用的,并且地址的 LSB 为高表示目标是 Thumb 代码. 在汇编中,我在函数“Reset_Handler"前面写了以下内容来告诉汇编器标签处的数据是可执行的/函数: .type Reset_Handler, %functionReset_
..
我不明白为什么我不能写 mov r1, #5000.为什么我必须使用 ldr 代替?R1 是 32 位寄存器,范围为 5000.我发现我可以mov r1, #255 但不能mov r1, #256.对我来说似乎很奇怪. 解决方案 阅读关于指令的文档,在这种情况下,指令是固定长度的,因此您没有空间容纳指令信息(操作码等)和16 或 32 位指令中的 32 位立即数,这是不可能的,因此需要对立
..
我试图理解为什么某些 Cortex-M0 代码在链接和未链接时表现不同.在这两种情况下,它都被加载到 0x20000000.尽管我尽最大努力通过将 -fPIC 传递给编译器来生成位置无关代码,但在代码通过链接器后,bl 指令似乎有所不同.我的理解是否正确,这只是 ARM Thumb 中链接器工作的一部分,是否有更好的方法来生成与位置无关的函数调用? 链接: 20000000:2000000
..
我在 Atmel SAM4E-EK 板上使用 Atmel SAM4E-16e.我已经为此配置编写了一个引导加载程序.引导加载程序通过 UART 接收 .bin 文件并将其写入闪存.这没有问题,我做了一个十六进制转储,这正是我所期望的: 0x400000 处的引导程序(AT SAM4E 的闪存起始地址) 我的应用程序在 0x420000 0x800000 是闪存结束地址 这是 C 代
..
我在 Atmel SAM4E-EK 板上使用 Atmel SAM4E-16e.我已经为此配置编写了一个引导加载程序.引导加载程序通过 UART 接收 .bin 文件并将其写入闪存.这没有问题,我做了一个十六进制转储,这正是我所期望的: 0x400000 处的引导程序(AT SAM4E 的闪存起始地址) 我的应用程序在 0x420000 0x800000 是闪存结束地址 这是 C 代
..
我正在 FreeRTOS 中的 STM32F302R8 上进行开发.我正在使用 here 来分析执行时间.我的 DWT 周期计数似乎有效,但我不确定如何将其转换为秒.从我在网上收集的信息来看,循环计数似乎是基于 CPU 频率的.哪个 HAL 函数将为我返回正确的 CPU 频率?我认为这是以下之一 uint32_t HAL_RCC_GetSysClockFreq(void);uint32_t HA
..
我尝试了下面的代码,但未能从 r11 中读取正确的值,以下参考 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0472f/Cihfhjhg.html volatile int top_fp;__asm{mov top_fp, r11} r11 的值为 0x20009DCC top_fp 的值为 0x00000004
..
我在虚拟 QEMU 嵌入式系统 connex 上成功编译并执行了 ARM 二进制文件,使用以下程序: arm-none-eabi-as -o program.o program.sarm-none-eabi-ld -Ttext=0x0 -o program.elf program.oarm-none-eabi-objcopy -O binary program.elf program.bindd
..
我目前正在 ARM 网站上阅读 ARM Cortex M0+ 用户指南,如下所示http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/CHDBIBGJ.html 在用户手册中,提到了以下段落: 可中断重启指令 可中断-可重启指令是 LDM、STM、PUSH、POP 以及在 32 周期乘法器实现中的 M
..
我曾经用 arm-none-eabi-gcc/arm-none-eabi-g++ 编译我的微控制器代码,一切正常.我在 Mac 上使用自制的 Cask gcc-arm-embedded.昨天我更新了它,现在当我为 Cortex M4 架构编译(用 M3 编译得很好)时,我在链接阶段为每个目标文件收到这些错误消息: /usr/local/Caskroom/gcc-arm-embedded/6-20
..
我在拇指模式下使用 STM32L486ZG 板.我正在运行一个没有任何 RTOS 的简单裸机应用程序.我使用 FSM 将外部 SRAM 连接到电路板.外部 SRAM 位于地址 0x60000000.系统已初始化并以 72MHz 的频率运行(我已经在 18-80MHz 的频率下尝试过这个问题),现在在我的主函数中,我有以下代码: int main(){asm 易变的 (“推{r0}\n"“移动 r
..
[收到大量文字,因为我想尽可能详细地说明我的问题.] 我正在优化 Cortex-M0 的手写 ARM 汇编代码.我使用的板子是 STMicro STM32F0Discovery,它有一个 STM32F051R8 控制器.控制器以 48 MHz 运行. 不幸的是,在进行优化时,我得到了一些非常奇怪的循环计数. 例如,在我的代码中将单个 nop 添加到循环中应该总共添加 2 个循环(
..
我正在尝试让 cortex m4 处理器休眠不到一秒钟.我希望能够让它进入睡眠状态,然后一秒钟后,或者当按下按钮时,从我离开的地方开始.我查看了参考手册,VLPS 模式看起来很适合我的需要.我不知道如何开始进入该模式或如何对 NVIC 进行编程. 更多信息:我在裸机上用 C 语言做这件事. 解决方案 您可以下载并检查实现 这个演示.尽管演示是针对 RTOS 的,但无论是使用 RTOS
..
我正在用 C (gcc) 编写 STM32F4,它是 ARM Cortex M4,我看到所有示例都以无限循环完成它们的 main() 函数,即使程序的其余部分将从中断中执行.如果我尝试从我的程序中删除循环,中断也会停止. 为什么我不能删除这个循环并退出主线程? 这是程序集(我猜是拇指,但即使有文档我也看不懂): LoopFillZerobss:ldr r3,= _ebsscmp
..