问题标签 [iar]

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 投票
2 回答
2566 浏览

c - IAR Embedded Workbench - 设置变量的字节序

我正在使用 IAR Embedded Workbench for ARM (ARM7TDMI-S),我的大部分工作都是使用 little-endian 格式完成的。但是,我在手册中看到我可以执行以下操作:

将这两个变量声明为大端(而应用程序的其余部分为小端)。这似乎是一个很棒的功能,但是当我尝试编译时,我总是得到错误:

上面的大端行是直接从手册中抄来的,但是不行。这是编译器的一个很棒的特性,会让生活变得更轻松。任何想法如何让它工作?

我在 IDE 选项的 C/C++ 编译器选项选项卡上将语言一致性设置为“允许 IAR 扩展”。

0 投票
7 回答
5478 浏览

c - STM32 printf 和 RTC

* 更新 *

这是我发现的。每当我在那里拥有该功能时,它实际上不会使代码锁定。它实际上会使读取 RTC I²C 函数的执行速度非常慢,但代码仍然可以正常运行,但是每次读取 RTC 时我都必须等待很长时间才能通过。

因此,RTC 有一个警报中断,这触发了 ISR 内的其他 I²C 交互,因此看起来它试图同时进行两个 I²C 通信,因此减慢了进程。我删除了 ISR 中的功能,它现在可以工作了。我会继续调查。


我在使用 IAR 5.40 对 STM32F103 微控制器进行编程时遇到了这个问题。我有这个函数,如果我尝试 printf 一个局部变量,它会导致代码在另一个点冻结,甚至在它到达有问题的函数之前。

这可能是什么原因造成的?

这是功能:

我也试过这个,这不会导致我遇到锁:

没有启用任何优化,当尝试从我的 I²C RTC 中读取一个字节时,代码会卡住,但只要我删除它printf("index = %s\n", bTmpSms);或使用它printf("index = 2\n"); ,一切都会很开心。有任何想法吗?

bSmsIndex 实际上永远不会超过 30,即使这样,在调用此函数之前也会发生锁定。

0 投票
2 回答
1749 浏览

debugging - 8051 串行调试监视器

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

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

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

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

0 投票
1 回答
3388 浏览

c - IAR 上的 C 编程

我正在 IAR 平台上进行编码,并希望执行以下操作。我有一个typedef如下

在这些之后,我声明了以下变量:

但它出现了一个错误:

我该如何解决这个问题?

0 投票
3 回答
3845 浏览

c - 一次引用的静态函数的优化

我正在为 MSP430 编写嵌入式代码,使用最高优化级别的 IAR 编译器(速度或大小不会改变任何东西)。

我将一个函数定义为静态的,然后在同一个文件中只引用它一次。由于该函数具有内部链接,并且仅使用一次,因此我希望优化器执行内联扩展。我看不出有理由不这样做。

该函数很短,它产生 16 个字的机器码。它是从 ISR 调用的。添加 inline 关键字使函数内联,但优化器似乎需要提示。内联将两个push/ pops 保存到堆栈中, onecalla和 one reta

我是否期望执行内联扩展(即使没有inline关键字),还是我错过了什么?


编辑:更多测试表明内联扩展取决于函数的大小,并且阈值非常低。它似乎是大约 15 或 16 个字的机器代码。在此之上,如果没有给出关键字,优化器不会扩展。

我仍然不明白为什么它不会(可读性不应该成为优化器的关注点,不是吗?),但我知道 IAR 只能回答这个问题。

0 投票
2 回答
2982 浏览

gcc - 如何从 C 代码中引用段的开头和大小

我正在将一个用于 ARM 芯片的程序从 IAR 编译器移植到 gcc。

在原始代码中,IAR 特定的运算符如__segment_begin__segment_size用于分别获取某些内存段的开头和大小。

有什么办法可以用 GCC 做同样的事情吗?我搜索了 GCC 手册,但找不到任何相关内容。


更多细节:
有问题的内存段必须位于固定位置,以便程序可以与芯片上的某些外围设备正确连接。原始代码使用__segment_begin运算符来获取此内存的地址并__segment_size确保它不会溢出此内存。

我可以通过添加变量来指示这些内存段的开始和结束来实现相同的功能,但是如果 GCC 具有类似的运算符,这将有助于最大限度地减少依赖于编译器的代码的数量,我最终不得不编写和维护。

0 投票
1 回答
1317 浏览

debugging - 使用 IAR 在 MSP430 上的 IRQ 处理程序下方显示调用堆栈

我试图在 MSP430 上的一个项目中查找堆栈溢出,发现它主要发生在堆栈已满后发生 IRQ 时。

我在堆栈指针写入上设置了一个断点,其值小于堆栈的起始地址,并且 CPU 在 IRQ 处理程序中停止。

IAR C-SPY 中的调用堆栈显示然后在处理函数处终止,但是我会对下面的内容感兴趣,因为这是填充堆栈的内容。

有没有办法在当前中断处理程序下方显示调用堆栈?

0 投票
1 回答
1444 浏览

c - 如何在 IAR 中保存监视窗口?他们在关闭/重新打开应用程序时不保存

有没有办法将监视窗口保存在 IAR Embedded Workbench for ARM 中,这样每当我关闭/重新打开应用程序时它们就不会消失?我有几个监视窗口来监视变量组,每次打开 IAR 时都必须重新填充它们是一件非常痛苦的事情。有没有办法保存监视窗口设置,这样我每次打开 IAR Embedded Workbench 时都不必设置它们?

0 投票
3 回答
685 浏览

build - IAR 中具有多个输入的自定义构建步骤

我在 IAR Workbench 中有一个项目,需要自定义构建步骤来构建中间文件;该文件是由一组具有公共扩展名的其他文件组合而成的(即,对于特定领域语言的输入文件有一个中间链接步骤)。

在我看来,“自定义工具”一次只能处理一个输入文件;这是真的,还是需要设置一个复选标记,以便所有与扩展名列表匹配的文件都在一次运行中传递?

0 投票
4 回答
6457 浏览

windows-7 - Windows 7 上的 TFTP

我正在使用 TFTP 服务从嵌入式板(IAR 系统)获取/放置文件。这曾经是 Windows XP 的工作文件,但在 Windows 7 中,tftp 服务不起作用。我已经通过打开网页、telnet 等方式确认了 windows 7 机器和主板之间的网络连接,效果很好。

因此,当我尝试使用 TFTP 放置一些文件时,我可以看到在板(闪存)上创建了一个文件,但是,该文件是空的并且连接超时。它似乎到达那里,但没有任何反应。我也关闭了windows防火墙。有什么建议么?