问题标签 [keil]

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 投票
5 回答
13350 浏览

gcc - ARM7的Keil vs GCC?

对于 ARM7 开发,Keil 与 GCC 相比如何?我正在为一个中型项目选择硬件顾问,有些使用 keil,有些使用 gcc。我想知道任何一种选择所涉及的问题......

0 投票
2 回答
1121 浏览

keil - 使用keil uvision 3的问题

我正在尝试使用 Keil uvision 3 编译 C 代码。只有当我通过为目标选择选项 xdata 来使用大内存模型时,才会编译整个代码。要使用这个模型,我必须使用外部数据 RAM,由于某些原因,这对我来说是不可能的。

所以我决定使用 pdata 选项。任何人都可以帮助我了解使用 pdata 的确切步骤吗?我正在使用 89V51RD2。我对 BL51 MISC、BL51 Locate 等选项感到很困惑。

0 投票
4 回答
15005 浏览

c - 从 16 位地址中划分高/低字节的方法?

我正在 8051 处理器上开发软件。一个常见的工作是划分一个 16 位地址的高字节和低字节。我想看看有多少种方法可以实现它。到目前为止我提出的方法是:(说 ptr 是一个 16 位指针,而 int 是 16 位 int)[注意 rn 和 arn 是寄存器]

按位运算

SDCC 给出以下汇编代码

Keil C51 给了我: 其中有许多无用的代码恕我直言。

指针技巧

SDCC 给了我: Keil C51 给了我: 这与 SDCC 版本相同。

安德烈的数学方法

p>

SDCC 给出:

我不知道为什么 sdcc 使用 r7 寄存器... Keil C51 给了我: 我不知道为什么 Keil 也不使用 R2 寄存器...

semaj 的联合方法

p>

SDCC 给了我

Keil C51 给了我: 这对指针技巧非常微笑。但是,这种方法需要多两个字节的内存来存储联合。

有没有人有任何其他好的想法?;)

任何人都可以告诉我哪种方式更有效?

如果有人感兴趣,这里是测试用例:

}

0 投票
3 回答
9253 浏览

c - 需要帮助配置端口以输入 8051

连接如下 红外传感器电路产生 0 或 5v 取决于闭合或开路输出线到微控制器 8051 philips 的端口 2_0 引脚。问题是当我这样做时,电路值被端口 2_0 LED 上的当前值覆盖总是继续。这是我的代码(在 keil c 中)我想我没有正确配置 P 2_0 作为输入

编辑:我遇到了一个问题,因为我使用的 8086 处理器有故障。建议任何人在编程时尝试这个以获得一些备件。

0 投票
4 回答
20244 浏览

c - 如何在 Cortex-M3 (STM32) 上从 RAM 执行功能?

我正在尝试从 Cortex-M3 处理器(STM32)上的 RAM 执行功能。该功能擦除并重写内部闪存,所以我肯定需要在 RAM 中,但我该怎么做呢?

我尝试过的是:使用 memcpy 将函数复制到 RAM 中的字节数组(检查它是否正确对齐),将函数指针设置为指向字节数组,然后调用函数(指针)。

这可能适用于 10 条指令(我可以使用调试器跟踪执行),但随后出现总线错误并且处理器重置。总线错误发生在第二次通过循环时,因此代码应该没问题(因为它在第一次通过时工作)。我认为更快的 RAM 访问会以某种方式破坏总线时序......

无论如何,有没有正确的方法来做到这一点?分散文件看起来如何自动将函数放置在 RAM 中(我正在使用 Keil uVision for Cortex-M3)?

编辑:更多信息:工具链:RealView MDK-ARM V 4.10 编译器:Armcc v4.0.0.728 汇编器:Armasm v4.0.0.728 链接器:ArmLink v4.0.0.728 处理器:STM32F103ZE

当复位发生时,总线故障寄存器中的 IMPRECISERR 位被设置。

0 投票
1 回答
793 浏览

embedded - 如何让 Keil RealView MDK-ARM 工具链链接一个区域以在内存的一个区域中执行,但将其存储在另一个区域中?

我正在编写一个更新闪存的程序。当我擦除/写入闪存时,我想从 RAM 中执行。理想情况下,我会将我的代码链接到存储在闪存中的执行区域,在启动时我会复制到它所链接的 RAM 位置。

我不包含任何正常生成的 C/C++ 初始化代码,所以我不能只将我的函数标记为 __ram。

如果我可以执行上述操作,那么调试器符号将与复制到 RAM 代码相关,并且我可以像往常一样调试业务。

我认为类似于 OVERLAY/RELOC 的东西可能会有所帮助,但我不确定。

谢谢,

0 投票
7 回答
75833 浏览

c - 如何将变量放置在内存中的给定绝对地址(使用 GCC)

RealView ARM C 编译器支持使用变量属性将变量放置在给定的内存地址at(address)

GCC 是否有类似的变量属性?

0 投票
2 回答
1749 浏览

debugging - 8051 串行调试监视器

我正在使用没有 jtag/bdm 功能的 8051 (Cypress FX2LP)。通常,该项目的开发人员一直在使用 ad-hoc 串行 printfs 进行调试。我正在寻找串行调试监视器的选项,例如 Keil 的 Mon51、Isd51 或 IAR 的通用 ROM 监视器。

我需要修改/配置此调试监视器以写入代码 RAM(设置软件断点)。我猜大多数 8051 调试监视器都提供了这种修改的能力,以支持哈佛架构或银行切换。

有人对 8051 或类似处理器的串行调试器有建议吗?

您是否必须修改它以写入哈佛代码 RAM 或闪存等?

0 投票
2 回答
1778 浏览

embedded - 如何在运行时向堆中添加内存?

我正在使用 Keil 的 ARM-MDK 4.11。我有一个静态分配的内存块,仅在启动时使用。它在调度程序初始化之前使用,并且由于 RL-RTX 控制堆管理的方式,不能动态分配(否则调度程序启动后的后续分配会导致硬故障)。

我想在调度程序初始化后将此静态块作为空闲块添加到系统堆中。似乎__Heap_ProvideMemory()可能会提供答案,这在初始化期间被调用以创建初始堆。但是,这需要了解堆描述符地址,并且我找不到任何记录的方法来获取它。

有任何想法吗?

我已经为此向 ARM/Keil 提出了支持请求,但他们更感兴趣的是质疑我为什么要这样做,并提供替代解决方案。我很清楚替代方案,但在这种情况下,如果可以做到这一点,那将是最干净的解决方案。

0 投票
1 回答
4689 浏览

c++ - 如何找到固件使用的 Flash 和 RAM 的大小?

如何找到固件使用的闪存 (ROM) 和 RAM 的大小?固件使用 C++ 实现。我还有 Keil microvision4;查找 ROM 和 RAM 大小会有帮助吗?

还是我需要查看固件的 MAP(.M51) 文件来查找内存大小?

还是仅仅告诉 hex 文件(.hex)文件的大小就足以定位 ROM 的大小?