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

c - 嵌入式 Keil C 是否支持多线程?

我正在使用 Keil C 编译器在LM3S6965评估板上开发一个嵌入式应用程序。有没有创建多线程嵌入式应用程序的选项?

0 投票
4 回答
3512 浏览

c++ - 链接器如何知道外部函数的定义在哪里?

我阅读了一些帖子并得出结论,extern 告诉编译器“这个函数存在,但它的代码在其他地方。不要惊慌。” 但是链接器如何知道函数的定义位置。

我的案例:- 我正在研究 Keil uvision 4。有一个头文件 grlib.h,主要功能在 grlib_demo.c 中(它包括 grlib.h)。现在,在 Circle.c 中定义并在 grlib_demo.c 中调用的函数 GrCircleDraw(),还有一条语句

extern void GrCircleDraw(所有参数);

在 grlib.h 中。我的查询是链接器如何知道 GrCircleDraw() 的定义在哪里,因为 Circle.c 不包含在 grlib.h 和 grlib_demo.c

注意:- 文件 grlib.h 和 Circle.c 在同一个文件夹中。代码运行成功。

0 投票
3 回答
18234 浏览

stm32 - 使用 Keil STM32 构建时未定义的符号 SystemInit(引用自 startup_stm32f2xx.o)

我正在使用 STM32F207VC 控制器。我正在使用 uvision4 IDE,当我尝试编译一个简单的代码时,我收到错误 tst1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f2xx.o)。. 我已将 stm32f2x 文件放置到我的项目目录中。

但仍然是同样的问题。

请帮助解决这个问题。

谢谢

0 投票
3 回答
15437 浏览

c - 任何函数而不是 C 中的 sprintf()?编译后代码太大

我正在开发一个嵌入式系统(Cortex M3)。为了将一些数据从设备发送到串行端口(显示在 PC 屏幕上),我使用 putchar() 方法使用了一些自己的函数。

当我想发送integerfloat时,我使用 sprintf() 将它们转换为字符串并将它们发送到串行端口。

现在,他们的问题是我使用的是 Keil uVision IDE,它是最大 32 KB 的有限版本。每当我在不同的函数中调用 sprintf() 时,我都不知道为什么编译后的代码大小增加了太多。我现在已经超过 32 KB,我想知道我必须更改我的一些函数并使用其他东西而不是 sprintf!

有什么线索吗?

0 投票
1 回答
2865 浏览

c++ - Keil uVision4 armcc:使用 C++ 标准包括

我正在使用 Keil uVision4 在 STM32F2 设备上进行开发。我正在尝试使用 C++,这应该可以使用 uVision 工具链提供的 armcc(如果我错了,请纠正我)。但是uVision拒绝接受标准的C++包含方式

不工作,而

完美运行。当我在 uVision(右键单击,打开文档)中打开 cstdint 时,它会打开文件,但是作为通用文件,例如不是作为头文件,没有花哨的颜色。

我错过了什么?这两个文件都在同一个文件夹 C:\Keil\ARM\ARMCC\include 中,我是否强制编译器使用 c++(通过附加 --cpp)没有任何区别。uVision 只是无法接受没有结尾的文件作为头文件吗?

编辑:响应答案(感谢您的宝贵时间!):错误消息将是:

尽管

这表明了问题所在。谢谢您的帮助!

0 投票
0 回答
320 浏览

eclipse - RTX 内核移植

我们有一个项目,KEIL IDE其中LPC2148包含RTX内核程序以及其他程序。现在我们需要将 IDE 从更改KEILEclipse. 当我们尝试在 Eclipse GCC 编译器中编译它时,它在文件中显示错误。RTX_Config.c是否RTX_Config.h有任何解决方案可以在 Eclipse IDE 中编译这个项目?

提前致谢。

0 投票
1 回答
1060 浏览

eclipse - 在 Eclipse IDE 中使用 GCC Compiler 编译 RTX Kernel 文件

我们在 LPC2148 的 KEIL IDE 中有一个项目,其中包含 RTX 内核程序以及其中的其他程序,由 ARM CC 编译。现在我们需要将 IDE 从 KEIL(ARM CC) 更改为 Eclipse(GCC)。当我们尝试在 Eclipse GCC 编译器中编译它时,它在 RTX_Config.c 和 RTX_Config.h 文件中显示错误。其他文件使用 GCC 编译器编译成功。但是 RTXConfig.c 文件有编译器特定的代码,这些代码没有被 GCC 编译。有没有使用 GCC 编译器在 Eclipse IDE 中编译这个项目的解决方案?作为初学者,请帮助我。提前致谢

我们有一些特定于 keil 的关键字,例如irq 、 __swi 、 _ _task 、 __asm ,它们已被 ARM CC (keil) 成功编译,但是当我们尝试将其移植到 GCC Compiler (Eclipse) 时,此编译器无法编译这些关键字并显示错误。有没有办法在 GCC 编译器中编译这些 keil 特定的关键字?

0 投票
2 回答
476 浏览

c++ - Keil:虚拟或受保护的析构函数和堆

我正在将 Keil 4 与 ARM 工具集一起用于 Cortex M3(如果这很重要的话)。我尝试了这个简单的代码:

如果我在本地(在 main 内部)创建 Derived 的实例,一切都很好:调试工作正常,程序大小约为 300 字节。

如果我创建 Derived 的静态或全局实例,程序大小会增加到 1000 字节,并且调试会话会在 BKPT 指令上停止。

我整理出这是因为堆大小设置为其默认值(零)。当我添加一些堆时,调试开始工作。

使析构函数受保护但非虚拟会导致相同的行为。使通常的方法 virtual 没有。

所以,我的问题是:为什么编译器在这种情况下需要堆?

Vtab 是静态创建的(我检查过),全局对象也应该是静态的。当我不需要动态分配时,再浪费 700 个字节用于堆分配代码(以及堆本身的空间)有点愚蠢。

(我将析构函数设为虚拟以防止出现警告。)

0 投票
2 回答
7771 浏览

c - “uint8_t”类型的参数与“uint8_t *”类型的参数不兼容

我正在尝试在 Keil 上为 STM32F4-Discovery编译USB HID 示例代码。这段代码允许我向一个名为“USB HID Demonstrator”的软件发送和接收消息。

但是我的USBD_HID_DataOut功能有问题。该行:

USB_OTG_ReadPacket((USB_OTG_CORE_HANDLE*)pdev, *Buffer, HID_OUT_PACKET);

给我一个错误:

错误 #167:“uint8_t”类型的参数与“uint8_t *”类型的参数不兼容

当我抑制*ofBuffer时,代码编译但似乎不起作用(收到的缓冲区值与预期不匹配,但我可能错了)实际上第二个参数 ofUSB_OTG_ReadPacket必须是指针所以我不'不明白为什么会发生此错误。

Buffer变量定义如下:uint8_t Buffer[6];

那么编译器有问题吗?自从它首次为 Atollic 创建以来,我是否必须处理将此项目代码复制到 Keil 中的特殊问题?

或者只是链接中有错误?

0 投票
2 回答
3026 浏览

c - 将 Char[] 与 C“嵌入式”中的字符串进行比较

我尝试创建两个函数将字符串拆分为 2 部分,第一个函数我想从串口获取字符串“模式 1”,当RX_IN_CHR_UART 变量时,填充数据如“模式 1 34”,第二个函数我想获取“34”

此函数获取字符串“模式 1”

和这个函数来获取字符串“34”

当我尝试比较功能时dop()if(dop(RX_IN_CHR_UART)=="34")它不起作用。

我应该用这个函数做什么来比较 dop() 等于“34”?