我在 armv6 程序集中有一个程序,它计算 (x +y)^2 的结果此代码不起作用,并返回:“不受支持的 ARM 系统调用:0xffffffdf” 但是这个经过稍微编辑并且可以工作(或者没有?): 谁能告诉我为什么第一个代码不起作用? 第二个甚至有效吗? ...
我在 armv6 程序集中有一个程序,它计算 (x +y)^2 的结果此代码不起作用,并返回:“不受支持的 ARM 系统调用:0xffffffdf” 但是这个经过稍微编辑并且可以工作(或者没有?): 谁能告诉我为什么第一个代码不起作用? 第二个甚至有效吗? ...
我的目标:使用 pyelftool 从 elf 文件中检索变量绝对位置和函数绝对地址,以自动化白盒测试的断点放置。 我的代码: 我的问题:上面的代码返回 cu_ofs 和 die_ofs,比如 cu_ofs 和 die_ofs 不是目标上的真实地址(例如,我可以使用 Ozone 检查,从源代码跳转 ...
是否可以将一个 GCLK 用于更多外围设备? ATSAMD09C13 有六个 GCLK 发生器,但这还不够。 这个例子有效: 这个例子,有两个 ID 不起作用: 存在解决此问题的方法还是不可能? ...
所以这里我有以下代码(ARMv6 程序集): 我理解除tst指令以外的所有行。 我在网上做了一些研究,我能找到的最好的定义是: 测试寄存器是零还是负。 在寄存器与其自身之间执行逻辑与。 我在理解它的含义时遇到了一些麻烦,所以我尝试使 C 等同于tst指令,这就是我得到的: 上面的代码似乎不起作用。 ...
背景: 我用 C 写了一个函数并用arm-none-eabi-gcc (7-2018-q2-update) 编译它。 为循环体生成的汇编代码看起来每次迭代需要 20 个周期,包括 2 个等待状态,用于加载操作访问非易失性程序存储器中的常量数据。 但是,我的 MCU 的 NVM 控制器缓存说缓存未 ...
我在 Raspberry Pi Pico(RP2040,Cortex-M0+ 核心,使用 JLink SWD 通过 VSCode cortex-debug 进行调试)上运行,我看到了关于 PendSV 的奇怪行为。 紧接着,SVCall 异常处理程序通过 ICSR 寄存器请求 PendSV。 但是 ...
有预定义的宏,例如__OPTIMIZE__ (在所有优化编译中定义)和__OPTIMIZE_SIZE__ (如果编译器正在优化大小则定义)。 我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。 是否有可能检查是否设置了优化级别-Ofast ? 可能类似于__OPTIM ...
我在裸板运行时运行,从地址零读取数据是我的软件中的一个有效用例。 但是,运行时将地址 0x0 视为null ,并在使用-O2编译时在以下代码中引发异常。 使用-O1编译时,代码的行为符合预期: 有没有办法解决这个问题? 我的平台上的详细信息: Ravenscar 小尺寸运行时移植到 Arm Cor ...
在一个旧的Android平板电脑的引导程序中,我找到了一个代码块,该代码块禁用了mmu,然后重新映射了外围端口(发生了向超级用户模式的传输,但未显示)。 我真的不明白如何重新映射外围端口。 《 ARM1176JZF-S技术参考手册》的第3-131页介绍了寄存器的工作方式。 位 ...
我知道 Pi Zeros 上的很多编译问题是由于它们使用 armv6,而较新的 Raspberry Pi,如 3 A+ 和 B+ 使用 armv7。 但是,我不明白如何在导致问题的应用程序中找到有问题的库,以及是否可能有一个简单的解决方法来解决这个问题。 背景: 我正在尝试将应用程序从 Linux ...
现在,我为RPi制造低级别的裸机工具。 而且我需要获取安全配置寄存器值。 我写了以下指令mrc p15, 0, r0, c1, c1, 0来获取它。 但是CPU进入未定义异常模式 , CPSR值为0x600001DB 。 读取SCR值的指令是CPU执行的第一条指令。 我已经多次 ...
我正在尝试将我的程序编译为 armv6,但 ELF 文件是为 armv7 构建的,即使我使用-march=armv6选项也是如此。 所有的.o文件都编译到了armv6,只有ELF文件是错误的。 基本上我是这样编译的: arm-linux-gnueabihf-g++ -static -march= ...
我在cortex-m0上有一个svc异常处理程序的以下实现: 当我为cortex-m0构建它时,它看起来像这样: 当然,导致硬故障,R7中的值是“未定义的”,并且它很可能包含不在地址范围内的值。 当我删除裸属性时,程序集更有意义: 我之前没有使用过裸属性,为什么现在 ...
我有一种情况,其中某些地址空间是敏感的,因为您阅读它会崩溃,因为那里没有人响应该地址。 bx 不是由编译器作为指令创建的,而是一个 32 位常量的结果,该常量不适合作为单个指令中的立即数,因此设置了 pc 相对负载。 这基本上是文字池。 它碰巧有一些类似于 bx 的位。 可以轻松编写测试程序 ...
我开始在树莓派上玩Adacore Gnat 2016。 在Raspberry Pi 2上进行了一些琐碎的测试后,我切换到Raspberry Pi Zero W,一切都失败了。 我有点天真,完全忽略了RPi 2上有一个ARMv7,而RPi Zero上有一个ARMv6。 现在,我想知道是否有可 ...
将crosswalk webview插件添加到我的应用程序后,我收到了x86版本或ARMv7版本。 但我希望我的应用程序也可以在具有ARMv6架构的设备上运行,并且我知道ARMv6架构的应用程序集也可以在ARMv7上运行,但这对ARMv7来说不适用于ARMv6。 这就是我想要获得ARMv6版 ...
我尝试为ARMv6构建应用程序,但是失败了。 我猜问题出在工具链上,它支持Hard Float,但ARMv6不支持。 好吧,首先我设置-march = armv6,其中编译失败。 /opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.03_li ...
在阅读ARMv6-M的文档时,我第一次遇到了内存保护单元(并没有那么复杂)。 根据文档,有一个名为 MPU_RASR 的寄存器(代表“MPU 区域属性和大小寄存器”)并且显然有多个寄存器(如果我理解正确的话,每个内存区域一个)。 我的问题是我怎么知道这个寄存器有多少副本存在? (我从 Valida ...
我正在尝试在ArchLinux下执行第一个Raspberry Pi上存储在数组中的机器代码。 我已经在x86下完成了,但是在ARMv6下我做错了。 问题在于数组中的代码无关紧要,它在执行第一条指令后始终会崩溃。 在gcc 5.2.0中禁用了Thumb交互功能的情况下编译代码。 这是我 ...
我们知道ARMv8 AArch32位模式完全向后兼容ARMv7架构。 ARMv7与ARMv4,ARMv5te和ARMv6向后兼容。 从上面的陈述,可以说ARMv8 AArch32模式也向后兼容ARMv4,ARMv5te和ARMv6。 即使用ARMv4,ARMv5te或ARMv6编译的代 ...