问题标签 [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.
c - 这在 C 中是否允许?
我用 C 编写了以下行。我想知道该语言是否支持。它是这样的:
基本上我想将“DHCP”或“STATIC”的字符串值插入模式,这取决于 Config_Msg.DHCP 中的值。
当我在 IAR 中编译时,我收到以下警告:
这个警告是什么意思?
debugging - 使用 IAR Embedded Workbench IDE 调试失败
我正在尝试在德州仪器 (TI) 设备上运行示例代码:MSP430F2274。当我单击调试按钮时,会发生此错误:
在项目的常规选项中,我选择设备并使用“FET 调试器”。
为什么我会收到此错误?
c - 应用程序在链接描述文件中定义的访问符号
在我的链接器脚本文件中,我定义了两个符号
然后我将它们导出,如下所示
从应用程序代码中,我尝试访问这些符号
现在,我希望返回值是 0x00100000,但是,我得到的只是 0。所以,当我转向调试器时,我注意到它_region_RAM_start__
的值分别为 0xC0000000和_region_RAM_end__
0xC00fffff,但值为 0。address_1
address_2
编译器优化设置为“无”。这一直困扰着我一段时间。我在这里是否缺少一些非常明显的东西(除了“我一开始就不应该这样做”)?
解决方案 感谢nm的回答
否则address_1
,address_2
两者都包含垃圾值(即分别在地址 0xC0000000 和 0xC00fffff 处可用的值,但从这段代码的角度来看是垃圾)
c - 内部 FLASH 存储器中 C 结构的对齐
我有一个配置结构,我想保存在 ARM cortex M3 的内部闪存上。根据规范,保存在内部flash中的数据,必须对齐32bit。因为我的结构中有很多布尔值和字符,我不想使用 32 位来存储 8 位......我决定使用__packed
预处理器编译指示打包结构,然后当我将它保存为一个整体结构时,我只需确保结构大小可被 4 整除(4 字节 = 32 位),如果需要,我通过添加填充字节来做到这一点。目前,在开发过程中,我对结构进行了很多更改,为了使其与 32 位对齐,我需要一直更改填充字节。目前,结构看起来像这样
有没有更好的方法来实现我正在做的事情?我是嵌入式编程的新手,我想确保我没有犯错。
编辑:请注意。数据保留在内部闪存的末尾,因此省略填充将不起作用...
arm - 如何实现 ISR 和 main() 同步?
我是 ARM 微控制器编程的初学者,有以下问题需要解决。
- 程序中有两个 ISR:ISR_Timer和ISR_Buffer。ISR_Timer 每 5 分钟执行一次。每次应填充外部设备缓冲区时(一秒钟内多次),都会执行 ISR_Buffer。外部设备缓冲区很小。
- ISR_Buffer从外部 SRAM 获取数据以填充缓冲区。SRAM中有两个大缓冲区。第一个当前使用,第二个用于重新计算。然后它们被交换。
- ISR_Timer设置标志,指示main()重新计算外部 SRAM 中的第二个缓冲区。之后 ISR_Buffer 使用该缓冲区。第一个用于下一次重新计算。重新计算大约需要 1 分钟。
问题是 main() 和 ISR_Buffer 都访问外部 SRAM,并且这些访问不是原子的。main() 函数在缓冲区重新计算期间将数据写入 SRAM。ISR_Buffers 读取数据以填充小型设备缓冲区。如何解决这个问题?
IDE:IAR。芯片:AT91SAM7。
embedded - MSP430F5418 的 RTC 中断问题
我正在使用带有 IAR EW 5.10 的 MSP430F5418。
在我的项目中,我使用 FreeRTOS 7.0 作为操作系统。
考虑场景:
- 将 RTC 设置为具有一分钟中断的闹钟模式。
- 创建两个任务。
- 当一分钟中断到来时,任务 1 向任务 2 发送请求。
- 任务 2 以 4 条消息响应任务 1。
- 在接收消息时,任务 1 调用一个简单的函数,该函数循环 0x7FFF 次。
这里,在第 4 次请求之后,即使没有经过一分钟,也会立即产生 RTC 中断。
我正在使用 TI 提供的解决方法代码进行 RTC 操作。
谁能告诉我为什么会发生这种意外行为???
谢谢,
哈里
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:
将错误行更改为:
不会使错误消失。
linker - IAR Embedded Workbench MSP430 和 *.lib 文件链接
我假设这是一项非常简单的任务,但我没有发现任何相关或我的错误。所以把我的问题放在这里,即我有一些 MSP430 项目,实际上是在代码作曲家工作室中。我现在必须将整个代码运行到 IAR 嵌入式工作台中。项目还提供了一些库文件 (*.lib),必须链接这些文件才能构建项目。经过少量修改后,代码编译正常,但我无法链接库并出现链接器错误。我使用 avr 进行 IAR 工作,但很少只是为了测试一些示例代码。我没有找到提及这些库名称及其各自路径的选项。我检查了链接器选项卡,但没有任何线索将这些 .lib 文件与项目链接。
c - 为什么 IAR 在 void* 上抛出错误
我想将使用 gcc 的项目移植到 IAR 编译器,但 IAR 抱怨使用 void* 作为形式参数的几个函数。
函数原型是
使用方法是:
这里抱怨错误[Pe167]:“struct *”类型的参数与“void const *”类型的参数不兼容
还有一个地方
错误[Pe852]:表达式必须是指向完整对象类型的指针。据我所知, void* 可以接受任何指针,如何更改代码以消除这些错误?谢谢!
克里斯
c - 定义枚举类型是否具有沉重的记忆印记?
我正在使用具有 32K 内存的嵌入式设备,使用 IAR EWARM v6.30 以纯 C 语言编写。
为了使代码更具可读性,我想定义一些枚举类型,例如,类似
而不是使用 0、1、2 值,但恐怕它会占用已经稀缺的额外内存。
所以我有两个问题:1)我可以强制枚举为短或字节类型而不是 int 吗?2)定义枚举类型的确切内存印记是什么?