问题标签 [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 投票
5 回答
536 浏览

c - 这在 C 中是否允许?

我用 C 编写了以下行。我想知道该语言是否支持。它是这样的:

基本上我想将“DHCP”或“STATIC”的字符串值插入模式,这取决于 Config_Msg.DHCP 中的值。

当我在 IAR 中编译时,我收到以下警告:

这个警告是什么意思?

0 投票
2 回答
5142 浏览

debugging - 使用 IAR Embedded Workbench IDE 调试失败

我正在尝试在德州仪器 (TI) 设备上运行示例代码:MSP430F2274。当我单击调试按钮时,会发生此错误:

在项目的常规选项中,我选择设备并使用“FET 调试器”。

为什么我会收到此错误?

0 投票
3 回答
23376 浏览

c - 应用程序在链接描述文件中定义的访问符号

在我的链接器脚本文件中,我定义了两个符号

然后我将它们导出,如下所示

从应用程序代码中,我尝试访问这些符号

现在,我希望返回值是 0x00100000,但是,我得到的只是 0。所以,当我转向调试器时,我注意到它_region_RAM_start__的值分别为 0xC0000000和_region_RAM_end__0xC00fffff,但值为 0。address_1address_2

编译器优化设置为“无”。这一直困扰着我一段时间。我在这里是否缺少一些非常明显的东西(除了“我一开始就不应该这样做”)

解决方案 感谢nm的回答

否则address_1address_2两者都包含垃圾值(即分别在地址 0xC0000000 和 0xC00fffff 处可用的值,但从这段代码的角度来看是垃圾)

0 投票
4 回答
5287 浏览

c - 内部 FLASH 存储器中 C 结构的对齐

我有一个配置结构,我想保存在 ARM cortex M3 的内部闪存上。根据规范,保存在内部flash中的数据,必须对齐32bit。因为我的结构中有很多布尔值和字符,我不想使用 32 位来存储 8 位......我决定使用__packed预处理器编译指示打包结构,然后当我将它保存为一个整体结构时,我只需确保结构大小可被 4 整除(4 字节 = 32 位),如果需要,我通过添加填充字节来做到这一点。目前,在开发过程中,我对结构进行了很多更改,为了使其与 32 位对齐,我需要一直更改填充字节。目前,结构看起来像这样

有没有更好的方法来实现我正在做的事情?我是嵌入式编程的新手,我想确保我没有犯错。

编辑:请注意。数据保留在内部闪存的末尾,因此省略填充将不起作用...

0 投票
1 回答
289 浏览

arm - 如何实现 ISR 和 main() 同步?

我是 ARM 微控制器编程的初学者,有以下问题需要解决。

  1. 程序中有两个 ISR:ISR_TimerISR_Buffer。ISR_Timer 每 5 分钟执行一次。每次应填充外部设备缓冲区时(一秒钟内多次),都会执行 ISR_Buffer。外部设备缓冲区很小。
  2. ISR_Buffer从外部 SRAM 获取数据以填充缓冲区。SRAM中有两个大缓冲区。第一个当前使用,第二个用于重新计算。然后它们被交换。
  3. ISR_Timer设置标志,指​​示main()重新计算外部 SRAM 中的第二个缓冲区。之后 ISR_Buffer 使用该缓冲区。第一个用于下一次重新计算。重新计算大约需要 1 分钟。

问题是 main() 和 ISR_Buffer 都访问外部 SRAM,并且这些访问不是原子的。main() 函数在缓冲区重新计算期间将数据写入 SRAM。ISR_Buffers 读取数据以填充小型设备缓冲区。如何解决这个问题?

IDE:IAR。芯片:AT91SAM7。

0 投票
1 回答
304 浏览

embedded - MSP430F5418 的 RTC 中断问题

我正在使用带有 IAR EW 5.10 的 MSP430F5418。

在我的项目中,我使用 FreeRTOS 7.0 作为操作系统。

考虑场景:

  1. 将 RTC 设置为具有一分钟中断的闹钟模式。
  2. 创建两个任务。
  3. 当一分钟中断到来时,任务 1 向任务 2 发送请求。
  4. 任务 2 以 4 条消息响应任务 1。
  5. 在接收消息时,任务 1 调用一个简单的函数,该函数循环 0x7FFF 次。

这里,在第 4 次请求之后,即使没有经过一分钟,也会立即产生 RTC 中断。

我正在使用 TI 提供的解决方法代码进行 RTC 操作。

谁能告诉我为什么会发生这种意外行为???

谢谢,

哈里

0 投票
3 回答
4121 浏览

c - MISRA C:2004,移位错误

我正在使用带有 MISRA C:2004 检查的 IAR Workbench 编译器。
片段是:

MISRA 错误是: 错误[Pm136]:从基础 MISRA 类型“unsigned char”到“unsigned int”的非法显式转换(MISRA C 2004 规则 10.3)

我在上面的任何代码中都没有看到任何unsigned char内容。

讨论为什么 Misra 会在这里抛出错误?讨论了可能具有与左移不同的提升规则的乘法。

我的理解是编译器应该将表达式提升为更大的数据类型,而不是降级为更小的数据类型。

这里到底发生了什么?

如何使代码符合 MISRA C:2004?

编辑1:

将错误行更改为:

不会使错误消失。

0 投票
1 回答
2461 浏览

linker - IAR Embedded Workbench MSP430 和 *.lib 文件链接

我假设这是一项非常简单的任务,但我没有发现任何相关或我的错误。所以把我的问题放在这里,即我有一些 MSP430 项目,实际上是在代码作曲家工作室中。我现在必须将整个代码运行到 IAR 嵌入式工作台中。项目还提供了一些库文件 (*.lib),必须链接这些文件才能构建项目。经过少量修改后,代码编译正常,但我无法链接库并出现链接器错误。我使用 avr 进行 IAR 工作,但很少只是为了测试一些示例代码。我没有找到提及这些库名称及其各自路径的选项。我检查了链接器选项卡,但没有任何线索将这些 .lib 文件与项目链接。

0 投票
2 回答
3288 浏览

c - 为什么 IAR 在 void* 上抛出错误

我想将使用 gcc 的项目移植到 IAR 编译器,但 IAR 抱怨使用 void* 作为形式参数的几个函数。

函数原型是

使用方法是:

这里抱怨错误[Pe167]:“struct *”类型的参数与“void const *”类型的参数不兼容

还有一个地方

错误[P​​e852]:表达式必须是指向完整对象类型的指针。据我所知, void* 可以接受任何指针,如何更改代码以消除这些错误?谢谢!

克里斯

0 投票
4 回答
3939 浏览

c - 定义枚举类型是否具有沉重的记忆印记?

我正在使用具有 32K 内存的嵌入式设备,使用 IAR EWARM v6.30 以纯 C 语言编写。

为了使代码更具可读性,我想定义一些枚举类型,例如,类似

而不是使用 0、1、2 值,但恐怕它会占用已经稀缺的额外内存。

所以我有两个问题:1)我可以强制枚举为短或字节类型而不是 int 吗?2)定义枚举类型的确切内存印记是什么?