问题标签 [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.
c - 嵌入式 Keil C 是否支持多线程?
我正在使用 Keil C 编译器在LM3S6965评估板上开发一个嵌入式应用程序。有没有创建多线程嵌入式应用程序的选项?
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 在同一个文件夹中。代码运行成功。
stm32 - 使用 Keil STM32 构建时未定义的符号 SystemInit(引用自 startup_stm32f2xx.o)
我正在使用 STM32F207VC 控制器。我正在使用 uvision4 IDE,当我尝试编译一个简单的代码时,我收到错误 tst1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f2xx.o)。. 我已将 stm32f2x 文件放置到我的项目目录中。
但仍然是同样的问题。
请帮助解决这个问题。
谢谢
c - 任何函数而不是 C 中的 sprintf()?编译后代码太大
我正在开发一个嵌入式系统(Cortex M3)。为了将一些数据从设备发送到串行端口(显示在 PC 屏幕上),我使用 putchar() 方法使用了一些自己的函数。
当我想发送integer或float时,我使用 sprintf() 将它们转换为字符串并将它们发送到串行端口。
现在,他们的问题是我使用的是 Keil uVision IDE,它是最大 32 KB 的有限版本。每当我在不同的函数中调用 sprintf() 时,我都不知道为什么编译后的代码大小增加了太多。我现在已经超过 32 KB,我想知道我必须更改我的一些函数并使用其他东西而不是 sprintf!
有什么线索吗?
c++ - Keil uVision4 armcc:使用 C++ 标准包括
我正在使用 Keil uVision4 在 STM32F2 设备上进行开发。我正在尝试使用 C++,这应该可以使用 uVision 工具链提供的 armcc(如果我错了,请纠正我)。但是uVision拒绝接受标准的C++包含方式
不工作,而
完美运行。当我在 uVision(右键单击,打开文档)中打开 cstdint 时,它会打开文件,但是作为通用文件,例如不是作为头文件,没有花哨的颜色。
我错过了什么?这两个文件都在同一个文件夹 C:\Keil\ARM\ARMCC\include 中,我是否强制编译器使用 c++(通过附加 --cpp)没有任何区别。uVision 只是无法接受没有结尾的文件作为头文件吗?
编辑:响应答案(感谢您的宝贵时间!):错误消息将是:
尽管
这表明了问题所在。谢谢您的帮助!
eclipse - RTX 内核移植
我们有一个项目,KEIL IDE
其中LPC2148
包含RTX
内核程序以及其他程序。现在我们需要将 IDE 从更改KEIL
为Eclipse
. 当我们尝试在 Eclipse GCC 编译器中编译它时,它在文件中显示错误。RTX_Config.c
是否RTX_Config.h
有任何解决方案可以在 Eclipse IDE 中编译这个项目?
提前致谢。
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 特定的关键字?
c++ - Keil:虚拟或受保护的析构函数和堆
我正在将 Keil 4 与 ARM 工具集一起用于 Cortex M3(如果这很重要的话)。我尝试了这个简单的代码:
如果我在本地(在 main 内部)创建 Derived 的实例,一切都很好:调试工作正常,程序大小约为 300 字节。
如果我创建 Derived 的静态或全局实例,程序大小会增加到 1000 字节,并且调试会话会在 BKPT 指令上停止。
我整理出这是因为堆大小设置为其默认值(零)。当我添加一些堆时,调试开始工作。
使析构函数受保护但非虚拟会导致相同的行为。使通常的方法 virtual 没有。
所以,我的问题是:为什么编译器在这种情况下需要堆?
Vtab 是静态创建的(我检查过),全局对象也应该是静态的。当我不需要动态分配时,再浪费 700 个字节用于堆分配代码(以及堆本身的空间)有点愚蠢。
(我将析构函数设为虚拟以防止出现警告。)
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 中的特殊问题?
或者只是链接中有错误?
c - 将 Char[] 与 C“嵌入式”中的字符串进行比较
我尝试创建两个函数将字符串拆分为 2 部分,第一个函数我想从串口获取字符串“模式 1”,当RX_IN_CHR_UART
变量时,填充数据如“模式 1 34”,第二个函数我想获取“34”
此函数获取字符串“模式 1”
和这个函数来获取字符串“34”
当我尝试比较功能时dop()
,if(dop(RX_IN_CHR_UART)=="34")
它不起作用。
我应该用这个函数做什么来比较 dop() 等于“34”?