问题标签 [arm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 如何修复“[Lp002]:IAR ARM 工具重定位失败?
我在 ARM 的汇编器中创建了一个小模块,以与我的裸机嵌入式应用程序链接在一起。有时,当我重建应用程序时,我会收到“错误 [Lp002]:重定位失败:值超出范围或非法”。更令人费解的是,我在注释掉 C 模块中的一些代码后出现了错误。
IAR 手册对“重新排序部分或代码”含糊不清。但是查看编译器从我的 .c 文件生成的汇编器文件,我发现它们的部分声明与我的没有区别。实际上,我通过在 C 中将代码存根然后接管组装文件来开始我的代码。
c - 如何开始使用 ARM 处理器?
是否建议直接从 ARM 处理器的数据表和用户手册开始,或者先了解 ARM 世界然后继续?
gcc - ARM7的Keil vs GCC?
对于 ARM7 开发,Keil 与 GCC 相比如何?我正在为一个中型项目选择硬件顾问,有些使用 keil,有些使用 gcc。我想知道任何一种选择所涉及的问题......
python - 嵌入式 ARM9 设备上的 Python/mySQL?
我有一个应用程序,其中小型嵌入式 ARM9 设备(运行 Linux)必须从传感器收集信息,然后连接到远程 mySQL 数据库并插入数据。我在 ARM9 设备上运行 Python 2.5 很好。我已经开发了一个在 x86 Windows 上运行的 Python 2.5 原型应用程序,它与 mySQL 和 INSERTS 连接得很好。我对这个问题的困惑来自使用“mySQL Connect/C”,在使用之前必须为 ARM 处理器交叉编译。
- 将此数据库应用程序移植或移动到 ARM 设备上的最佳方法是什么?
- 支持库中是否存在必须交叉编译的底层 x86 二进制文件?
- 或者,MySQLdb 是否可以简单地跨平台移植?
c++ - GCC C++(ARM)和指向结构字段的常量指针
假设有一个简单的测试代码
它是在 CodeSourcery G++ (gcc 4.3.2) 中为裸机 ARM 编译的。它还有一个非常标准的链接器脚本。
当在 C 中编译(作为 main.c)时,对象“数据”按预期进入 Flash。当用 C++ 编译时(作为 main.cpp),这个对象进入 RAM,并且添加了额外的代码,这些代码只是将值从 Flash 复制到 RAM(值已经计算,只需复制!)。所以编译器可以计算地址,但不知何故不想“只使用它”。问题的根源在于地址的乘法——没有“*2”乘法,两个版本都按预期工作——“数据”被放置在闪存中。另外 - 当“数据”被声明为:
也一切都很好。
C 和 C++ 编译的所有文件都是相同的,唯一的区别是对编译器的调用 - g++ 用于 main.cpp,gcc 用于 main.c(警告级别不同,c++ 禁用了 RTTI 和异常)。
是否有任何简单而优雅的方法来克服这个“C++ 问题”?我确实需要这样的操作来在 Cortex-M3 的位带区域中创建位地址的 const 数组。这是一个错误,还是 C++ 编译器的一些奇怪限制?
我知道我可以在“C”文件中创建数据对象,而只是“extern”——将它们包含在 C++ 中,但这不是很优雅 [;
谢谢大家的帮助!
optimization - ARM asm中的快速饱和和移位两个半字
我在一个 32 位字中有两个带符号的 16 位值,我需要将它们右移(除)在常数值(它可以是从 1 到 6)并饱和到字节(0..0xFF)。
例如,
- shift=5的0x FFE1 00AA必须变为0x 0000 0005;
- 0x 2345 1234必须变成0x 00FF 0091
我正在尝试同时使值饱和,类似于以下伪代码:
但我得到的代码非常丑陋和缓慢。:) 我现在拥有的最好(最快)的东西是每一半的单独饱和度,如下所示:
但它是10个周期。:(可以更快吗?
ps:后来我找到了USAT16指令,但它只适用于ARMv6。我需要代码才能在 ARMv5TE 和 ARMv4 上工作。
编辑:现在我重写我的第一个代码:
但它并不美丽。
linux - ARM linux和跨工具链问题
我的手臂工具链可能有问题,但也许我做错了其他事情。我有使用三星 s3c2440 ARM9 uC的中国制造的开发板qq2440 。我正在使用带有本机 gcc(4.3.3) 和交叉编译版本 arm-unknown-linux-uclibc-gcc (crosstool-NG-1.3.2) 4.3.2 的 Ubuntu x86
我遵循了http://blog.leshak.ru/english/pages/how-to-install-u-boot-linux-2629-rootfsjffs2-busybox-1132-into-nand-qq2440/的教程 并使用了 Leshak的内核该板的补丁。问题是他的二进制文件可以完美运行,而我的则不行……
我通过 RS232(串行端口)与我的开发板通信,并且我在目标 Linux 上配置了串行终端。我使用Leshak 的uboot 映像。要配置我的内核,我使用以下命令行:
对于目标,我使用 vanilla Linux 源版本 2.6.29,并带有由Leshak创建的补丁。我真的不相信 Linux 会正式支持它,因为它不是主流产品。
我的内核映像开始启动,但它可能会将带宽(或 CPU 频率)更改为某个非标准值(已经尝试了所有标准值)。而不是指示将内核加载到内存中的点,我只有垃圾。不幸的是,它可能不会完成启动过程,因为网络接口和文件系统都没有出现。所以我发现它在中间的某个地方发生了恐慌。
有什么想法我接下来应该做什么?
感谢和问候,
克里斯
linux - 我应该选择哪种 Linux RTOS 解决方案?
我正在准备自己在 Linux 之上构建 RTOS 解决方案,这将在嵌入式设备上运行。我自己做了一些调查,但我还是有点困惑。这些是我的标准:
在三星s3c2440 ARM9机器上轻松运行
开源
与 Linux 一起工作
良好的社区支持
我见过 RTLinux 和Xenomai。Xenomai 对我来说看起来更像是东西,但我仍然很困惑。
有什么好的建议,利弊?
embedded - 在 RAM 中附加 ROMFS 是什么意思?
我正在为运行 uClinux 2.4 的 ARM 平台构建内核,在 Linux 配置的“常规设置”下,有一个名为“ m68knommu-style attach romfs in RAM support ”的选项。我的 ARM 组装技能有些有限,但据我所知,如果我启用此选项,ROMFS 将被复制到内核 BSS 的末尾。
这样做的目的是什么?
c++ - reinterpret_cast to void* 不使用函数指针
我想将函数指针重新解释为 void* 变量。函数指针的类型将是 type Class* (*)(void*)
。
下面是示例代码,
上面的代码适用于 Visual Studio/x86 编译器。但是使用ARM编译器,它会产生编译错误。不知道为什么。
错误:#694:reinterpret_cast 不能抛弃 const 或其他类型限定符
我担心下面的解释。
在函数指针和常规指针之间进行强制转换(例如将 a 强制转换
void (*)(void)
为 avoid*
)。函数指针不一定与常规指针大小相同,因为在某些架构上它们可能包含额外的上下文信息。这可能在 x86 上可以正常工作,但请记住这是未定义的行为。
如何void (*)(void*) -> void*
有效地进行此类转换,以便至少在大多数编译器中编译几乎相同?