标签: iar

在Linux中使用Dongle运行IAR Embedded Workbench for Arm的建议

我正在运行Ubuntu 10.04和Wine 1.2.我能够安装IAR软件,但无法找到加密狗许可证.无论如何在Wine和Ubuntu中使用加密狗许可证还是我必须使用PC许可证?

提前致谢..

linux ubuntu iar ubuntu-10.04

7
推荐指数
1
解决办法
2万
查看次数

错误[P​​e513]:无法将类型为"void*"的值分配给"uint8_t*"类型的实体

我试图将C项目转换为C++.

在C项目中,我在编译成c ++时反击了这个错误:

错误[P​​e513]:无法将类型为"void*"的值分配给"uint8_t*"类型的实体

以下代码给出了此错误:

#define RAM32Boundary  0x20007D00
uint8_t *pNextRam;
pNextRam = (void*)RAM32Boundary;// load up the base ram
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这在C中做了什么以及如何将其转换为C++?

c c++ embedded iar

7
推荐指数
1
解决办法
1万
查看次数

由于看门狗(IAR/MSP430),我的嵌入式应用程序永远不会完成init到main()

我正在使用带有10K RAM的MSP430芯片.如果我超过5k的RAM使用量,它永远不能进入main().init代码调用__data20_memzero清除已用RAM空间.

__data20_memzero来源

它看起来像是通过内存递增并清除字节直到R14 = R12.R14是0x34B4.但是在重新启动并重新开始之前,R12的最大值为0x2c86.我通过调试器手动关闭了看门狗,它开始运行就好了.我不能认为这是正常的.知道如何解决这个问题吗?

c embedded startup msp430 iar

7
推荐指数
1
解决办法
893
查看次数

将外部静态库的片段放置到特定位置

我的应用程序调用了一些放置在外部静态库中的函数。我将外部静态库链接到我的应用程序,一切正常(在这种情况下,我使用的是 GCC)。

然而,库的文本、.data 和 .bss 部分的位置(地址)由链接器选择。我可以通过修改链接器脚本来选择/更改它们的位置,但是这很乏味,因为我必须指定库的所有函数、变量等。我的意思是这样的:

. = 0x1000; /* new location */
KEEP(*(.text.library_function1));
KEEP(*(.text.library_function2));
[...]
Run Code Online (Sandbox Code Playgroud)

另一种解决方案是通过为每个函数/变量放置一个段属性来构建外部库,然后通过重新定位整个段来修改链接器。就像是:

/* C source file */
unsigned char __attribute__((section (".myLibrarySection"))) variable1[10];
unsigned char __attribute__((section (".myLibrarySection"))) variable2[10];

/* Linker script */
. = 0x1000;
KEEP(*(.myLibrarySection))
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够重新定位外部静态库的整个 .text、.data 和 .bss 段,而无需使用这些技巧。

我想要这样的东西(在链接脚本中):

. = 0x1000;
KEEP(*(.text.library_file_name))
Run Code Online (Sandbox Code Playgroud)

是否可以使用 GCC 工具链?

是否可以使用其他工具链(IAR、Keil 等)?

c linker gcc iar keil

7
推荐指数
1
解决办法
2493
查看次数

如何从C代码引用段开头和大小

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

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

有没有办法和海湾合作委员会做同样的事情?我查了GCC手册,却找不到任何相关内容.


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

我可以通过添加变量来指示这些内存段的开始和结束来实现相同的功能,但是如果GCC具有类似的运算符,这将有助于最小化编译器相关代码的数量,我最终必须编写和维护.

gcc porting iar

6
推荐指数
1
解决办法
2233
查看次数

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

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

typedef __packed struct
{
uint8_t status;
uint16_t delay;
uint32_t blabla;
uint8_t foo[5];
uint8_t padding[...] // this has to be changed every time I alter the structure.
} CONFIG;
Run Code Online (Sandbox Code Playgroud)

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

编辑:请注意.数据在内部闪存结束时保留,因此省略填充将无法正常工作......

c cortex-m3 memory-alignment iar

6
推荐指数
2
解决办法
4402
查看次数

如何停止优化器丢弃未使用的变量?

我想调试我的代码并且无法访问过程中的内部层,因为这会干扰与硬件的通信。(在监视列表会干扰基本读取访问的地方执行易失性操作。)

所以我正在测试接口的返回值,但 IAR 编译器甚至优化了未使用的 volatile 变量。

和这样的声明:

i = object.foo();
if (i)i=i;
Run Code Online (Sandbox Code Playgroud)

也没有帮助。

我在这里找到了 SO 只是回答了该案例使用 i/o 操作的建议。但这也不是选项,因为我没有包含 C 标准库的选项。并且项目本身不需要输入/输出,没有自己的输入/输出功能变体。

那么除了禁用优化器之外,我还有哪些选择?

c++ embedded volatile iar

6
推荐指数
2
解决办法
3269
查看次数

IAR可以生成GCC可以链接到的静态库吗?

有一个供应商的软件,我想与之合作.他们有一个代码库,他们只能使用IAR Embedded Workbench进行编译(据我所知,他们的代码不能用GCC编译).不幸的是,他们的硬件仅适用于他们的软件堆栈,所以我真的无法选择是否要使用它.它们将此代码分发.a为为ARM Cortex-M4 CPU编译的静态库文件(以及随附的标头).(他们不想分发来源.)为了这个讨论,让我们称之为evil_sw_stack.a.

我想使用这段代码,但我没有IAR许可证,对IAR没有专业知识.我想使用GCC.

有没有办法让IAR生成GCC可以链接到的静态库?供应商需要使用哪种编译器选项来生成这样的二进制文件?
(我猜测得到的二进制文件的ABI可以某种方式指定并设置为满足GCC的设置.)

GCC的示例用法

他们的默认软件堆栈非常适合GCC,这个特定的软件堆栈是他们提供的唯一一个不是.通常,如果我有以下内容,我可以编译一段简单的示例代码:

  • startup_(devicename).S:GCC特定的程序集文件
  • system_(devicename).c
  • (devicename).ld:链接器脚本
  • 某些特定设备的头文件

例如,我可以编译一个简单的例子,如下所示:

$ arm-none-eabi-gcc helloworld.c startup_(devicename).S system_(devicename).c -T (devicename).ld -o helloworld -D(devicename) -I. -fno-builtin -ffunction-sections -fdata-sections -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m4 -mthumb -mno-sched-prolog -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.没有警告,没有错误.

我如何尝试使用静态库

为了这个讨论,让我们称之为evil_sw_stack.a.
这就是我尝试使用它的方式:

$ arm-none-eabi-gcc evil_sw_stack.a helloworld.c startup_(devicename).S system_(devicename).c -T (devicename).ld -o helloworld -D(devicename) -I. -fno-builtin -ffunction-sections -fdata-sections -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -mcpu=cortex-m4 -mthumb -mno-sched-prolog -Wl,--start-group -lgcc -lc -lnosys -Wl,--end-group
Run Code Online (Sandbox Code Playgroud)

不幸的是,这抱怨了一系列定义的函数的多个定义system_(devicename).c.也许他们不小心把它编成了这个库?或者也许IAR只是这样编译?现在,如果我尝试system_(devicename).c …

interop arm static-libraries gnu-toolchain iar

6
推荐指数
0
解决办法
2779
查看次数

如何配置 Visual Studio Code 以使用 IAR 编译器构建项目?

我想使用Visual Studio Code作为我的主要 IDE,但我想用 IAR 的编译器编译我的代码。

我该如何配置 VSCode ?

我找到了这个扩展,但文档太差了。

iar visual-studio-code

6
推荐指数
2
解决办法
3726
查看次数

IAR 窗口布局

有没有办法保存 IAR 窗口布局?每次我启动调试会话时,它都会在我的屏幕上填满 9 个不同的窗口。我会很高兴有 3 个和几个选项卡,但我每次都必须重新安排事情。我没有看到明显的方法来拯救它们,谷歌对此也没有太多可说的。

iar

5
推荐指数
1
解决办法
2132
查看次数