问题标签 [cortex-m3]

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.

0 投票
4 回答
5411 浏览

arm - ARM Cortex-M3 内核上的 .NET 微框架

我有一个来自Luminary Micro的RDK-IDM。该板具有 32 位 ARM® Cortex™-M3 内核。有没有人尝试在这样的设备上运行 .NET Micro Framework 应用程序?

0 投票
1 回答
10923 浏览

gcc - Ubuntu:交叉编译 STM32 (Cortex-M3) 时使用什么 gcc?

我正在尝试开始使用 STM32 (Cortex-M3),我的计划是从 Ubuntu (9.04 / AMD64) 开始工作。

首先,我得到了Olimex stm32-h103头板和Olimex ARM-USB-OCD jtag,然后我可能会使用 OpenOCD、gcc 和 Eclipse。

但现在我正在研究使用什么版本的 gcc 以及如何设置它以便能够交叉编译代码。

那里似乎有一些手臂项目,但我不知道从什么开始,有人可以把我推向正确的方向吗?

谢谢约翰


更新: codesourcery似乎几乎是我想要的,但他们似乎专注于 IA32 而不是 AMD64。

但是在支持的设备中,我找到了 Cortex-M3

  • ARM EABI、ARM M-profile 模拟器 -mcpu=cortex-m3 -mthumb

更新:有可能在 AMD64 上安装 IA32,所以标记的答案可能已经过时了。

更新:找到这个关于 Cortex-M3 交叉编译的链接。

0 投票
3 回答
7719 浏览

xcode - 向 XCode 3.2 添加自定义编译器

我有一个适用于 ARM Cortex-m3 的 gcc 4.3.3 工具链,并希望将其集成到 XCode 中。

有没有办法设置 XCode (3.2) 来使用这个 gcc 工具链而不是内置的 GCC 4.2?

到目前为止我已经尝试过:我添加了一个修改后的副本,GCC 4.2.xcplugin并更改​​了名称、版本和可执行路径。它出现在 XCode 中,但是每当我将“C/C++ 编译器版本”设置为自定义编译器时,它都会失败

GCC_VERSION 的值“4.3.3”无效

似乎有效的版本号在其他地方被硬编码,因为即使我删除了原始版本GCC 4.2.xcplugin,该值4.2仍然有效(但在“C/C++ 编译器版本”下拉列表中不再可见)。

0 投票
1 回答
1246 浏览

embedded - 在 Cortex-M3 上的中断处理程序之间传递参数

我正在为 Cortex-M3 构建一个轻量级内核。

从高优先级中断我想调用一些代码在低优先级中断中运行并传递一些参数。

我不想使用队列将工作发布到较低优先级的中断。

我只有一个缓冲区和大小可以传递给它。

在编程手册中,它说 SVC 中断处理程序是同步的,这可能意味着如果您从优先级低于 SVC 处理程序的中断调用它,它会立即被调用(结果是您可以将参数传递给它,就好像它是一个函数调用(有点像 MS-DOS 中的 BIOS 调用)。

我想以另一种方式做到这一点:将参数从高优先级中断传递到低优先级中断(目前我通过将参数留在内存中的固定位置来做到这一点)。

最好的方法是什么(如果可能的话)?

谢谢,

0 投票
5 回答
10040 浏览

embedded - 我可以将哪些 Cortex-M3 中断用于通用工作?

由于特定中断发生,我需要运行一些代码。

我不想在中断本身的上下文中执行它,但我也不希望它在线程模式下执行。

我想以低于促使其运行的高级中断但也高于线程级别(以及其他一些中断)的优先级运行它。

我想我需要使用其他中断处理程序之一。

哪些是最好的使用,以及调用它们的最佳方式是什么?

目前,我计划只对一些我不使用的外围设备使用中断处理程序,并通过直接通过 NVIC 设置位来调用它们,但我希望有更好、更正式的方式。

谢谢,

0 投票
4 回答
5377 浏览

embedded - ARM cortex:使用位带的互斥锁

鉴于此,在 ARM Cortex M3 上,我可以:

  • 原子地读取一个位
  • 原子地设置一个位
  • 原子清除一位

我如何将这些组合成互斥体风格的一组操作:

似乎try_lockortake_lock将需要两个不是原子的操作。

我需要更多的控制来完成这个吗?禁用全局中断可以做到这一点,但似乎应该有一种更外科手术的方法。

0 投票
2 回答
4776 浏览

embedded - 使用 Keil 的 µVision 以 C/C++ 代码访问 Cortex-M3 的 MSP 和 PSP 寄存器

我需要访问 Cortex-M3 处理器的 MSP 和 PSP 寄存器(主堆栈寄存器和进程堆栈寄存器)。

我正在用 C/C++ 编写。

µVision 和相关的编译器不允许您为这个仅限 Thumb-2 的内核进行内联汇编(而且我不确定这是否是个好主意)。

我需要这样做,以便我可以提取 svc 指令的立即值,而不管它是在线程还是处理程序模式下执行。

谢谢,

0 投票
2 回答
3354 浏览

c - Zeroconf 名称解析

我正在开发一个带有嵌入式网络服务器的控制设备。网络服务器为任何请求它的网络浏览器(来自 Windows 浏览器、Mac 浏览器、iPhone android 等)提供控制接口。

我遇到的问题是一般地知道如何访问设备的一般方法。即在网络浏览器中输入什么地址。

固定 IP 对我的用户来说太技术化了,并且可能会出错,因为我的设备可以插入许多不同的本地网络。使用 uPnp 服务发现需要在某些平台的客户端上运行软件,并且不像只输入网址那么自然。我想实现名称解析。

我当前的实现使用 netbios 协议。因此,在 Windows 浏览器中,我可以键入 //controller/ 并且它可以工作,但这不适用于 Mac 或智能手机。我还可以尝试实现 Apple 的 mDnsresponder,它应该让 Mac 和 iPhone 玩得开心(尽管我认为我仅限于 //controller.local/)。也许 Android、Symbian 等也存在类似的事情,但是没有一个更通用的解决方案来创建一个我可以尝试的网络名称吗?

该平台目前基于 TI Cortex M3 处理器和 lwIP。

非常感谢任何有关如何找到解决方案的帮助或建议。

亲切的问候,

鲍勃

0 投票
1 回答
5137 浏览

arm - 调试 Cortex M3 (ARM) Embedded - 您如何判断 xPSR.ISR 正在运行什么 ISR?

我正在调试一个 arm 系列 cpu (Cortex M3) 上的固件。

调试器显示 CPU 寄存器,包括一个称为“xPSR”的寄存器,其中包含一个称为“ISR”的子字段。CPU寄存器中的模式是'Mode = Handler',这意味着m3 cpu处于中断处理程序而不是'线程'模式。这我知道。

我在那里看到字段 xPSR.ISR = 15 的值。我认为那必须是十六进制的 15(12 月 21 日)。我猜这是查看 ISR 向量表注释的“系统定时器滴答 0B”中断。实际上,我现在猜测它是十进制的 15,它是我正在查看的 SysTick 计时器中断处理程序。(请注意,因为代码是汇编器单行默认处理程序案例,其中大约 100 个不同的 asm 标签位于一个地方,很难从代码中看出是谁调用了 ISR。)

但是,我对 Cortex M3 芯片还很陌生,而且我对 ARM7TDMI 的了解也因不使用它而褪色,以至于我不记得了。而且我在任何地方的文档中都找不到这个。

谁能告诉我如何解决这个问题?

0 投票
4 回答
11695 浏览

debugging - 在 Cortex-M3 CPU 上通过 printf 进行输出调试,在 BKPT 指令处停止 + 关于 JTAG 和 sw 端口的混淆

我有一个 Keil ULINK2 USB 仿真器盒连接到我板上的JTAG连接器,它与板载 Cortex-M3 CPU(TI/Stellaris/LuminaryMicro LM3S 系列)配合良好。似乎 JTAG 和 SWJ-DP 端口在这些 CPU 上共享相同的引脚(以及板上的连接器)。一个似乎没有 ITM (printf) 功能,另一个则有。

以前的固件人一直使用 stdio 转 UART(串口),但我需要释放串口,以便调试消息不会干扰发送/接收到/从串口的其他数据,因此我需要跟踪消息去别处。可悲的是,我在这块板上只有一个串行端口。我认为这个 CPU 中的 ITM(跟踪)功能意味着我可以将调试 printf 消息直接发送到我的调试器/IDE(Keil uVision)。TI/Stellaris CPU 文档将此功能称为“串行线 JTAG 调试端口 (SWJ-DP)”,据我所知,对它的支持绝对是 Keil uVision IDE 中实现的一个功能。

在我的代码中添加一条 printf 消息会导致我的代码在我开始调试时锁定。锁定似乎在链接到我的应用程序的 RTL 库中,在 BKPT 指令的函数 _sys_open 中:

以上似乎是由调用的代码的一部分__rt_lib_init_stdio_1

到底是怎么回事?我不知道 BKPT 是做什么的。我认为它会引发一个软件断点,然后应该由调试器处理?Keil/ARM ULINK2 软件和硬件不应该已经为此配置了吗?是否有一些技巧可以使 debug printf 与 Keil JTAG/sw 端口一起工作?

我不确定 sw 和 JTAG 端口之间的区别是什么。sw 到底是什么意思,我相信它指的是板上 JTAG 物理连接器的两种可能模式之一,其中 JTAG 是一种经典但更受限制的模式,没有跟踪支持,而 sw 模式在不向 JTAG 添加任何引脚的情况下增加了跟踪支持连接器布局?但这是嵌入式系统,神秘是常态。我是 Cortex-M3 开发的新手,自从旧的 ARM7TDMI 时代以来,很多这些东西对我来说都是新的。但是 Keil uVision 会打印出以下消息:“ITM 仅适用于 SW 端口,不适用于 JTAG”。SW 是您必须在板上设计的不同物理端口吗?(我使用的是定制设计的应用板,而不是开发入门板。)

[谷歌搜索让我了解到这个难题_sys_open与一些编译指示__use_no_semihosting_swi和其他内容密切相关,ROM 中的 BRKPT 指令可能是 SWI(“软件中断”)ARM 指令的一些 ARM 变体。]