10得票2回答
如何确定嵌入式系统中的最大堆栈使用量?

当我给Keil编译器添加"--callgraph"选项时,它会静态地计算出确切的"最大堆栈使用量"。但今天它给了我一个"最大堆栈使用量 = 284字节 + 未知(没有堆栈大小信息的函数...)"的消息,并列出了"没有堆栈信息的函数"列表。Nigel Jones说在嵌入式系统中递归是个非常糟糕的...

10得票3回答
在嵌入式系统中,C语言中的NOP指令有什么等价替代品?

我使用KEIL编译程序。 该程序使用如下代码 asm("NOP"); 不幸的是,KEIL编译器不接受此语句。 这个想法是通过使用NOP(无操作)汇编代码来引入延迟。 在C中,实际等效于此的是什么? 这是否因我使用的嵌入式控制器而有所不同?

9得票1回答
在Keil uVision 5中,我如何在调试器步进时保持文本编辑器行的实时显示?

我正在使用uVision 5的教育/评估版本。在调试我的项目时,反汇编窗口会在边缘标记下一条将要执行的语句,并用黄色箭头指示。 每行文本编辑器中的边缘将在到达该代码行时变为绿色。这似乎意味着文本编辑器知道当前正在执行哪行代码。 然而,文本编辑器不会更新,除非它失去并重新获得焦点,这使得在调...

9得票2回答
一个STM32板的RAM、堆和栈内存是什么?

我正在进行一个项目,需要至少使用500 kB的内存。我有一个带有定义堆栈和堆的代码的SDK,它可以正常工作。 Stack_Size EQU 0x00004000 AREA STACK, NOINIT, READWRITE, ALIGN=3 S...

9得票2回答
将注释保留在预处理器 i 文件中

我们希望使用预处理器输出文件(.i 文件)以便进一步使用,特别是注释部分。为此,我们使用 /PREPRINT (或 /PP )命令行开关。问题在于KEIL编译器(C166)会删除任何注释。 问:是否有可能在 .i 文件中保留注释? 额外研究: Microsoft编译器使用 /P 命令行开关...

9得票5回答
UINT32_C和uint32_t的区别

据我所知,uint32_t 中的后缀t表示类型名称,但我想知道 UINT32_C 中的C是什么意思,以及它们之间有何区别?

9得票3回答
在C语言中,有没有替代sprintf()函数的任何功能?编译后代码大小太大了。

我正在开发一个嵌入式系统(Cortex M3)。为了将设备上的一些数据发送到串行端口(显示在PC屏幕上),我使用了一些自己编写的函数,其中包括putchar()方法。 当我想发送整数或浮点数时,我使用sprintf()将它们转换为字符字符串,并将它们发送到串行端口。 现在,问题是我正在使用...

8得票2回答
如何在ARM内联汇编中访问本地C变量?

我想在ARM内联汇编中访问C语言中声明的局部变量。我该怎么做? 可以像这样访问全局变量: int temp = 0; Function(){ __asm( ".global temp\n\t" "LDR R2, =temp\n\t"...

8得票3回答
如何在Keil的uVision下重新定位向量表并更改Cortex-M3的起始地址?

我正在使用STM32F107 Cortex M3微控制器。我在项目中使用Keil uvision IDE。我有一个应用程序,在起始位置(即0x08000000)正常运行。如果我将起始位置更改为0x08004000,应用程序就无法正常工作。我使用以下函数更改了向量表的位置: NVIC_SetV...

8得票2回答
将外部静态库的片段放置到特定位置

我的应用程序调用了一些在外部静态库中的函数。我将外部静态库链接到我的应用程序中,并且一切正常(在这种情况下,我使用的是GCC)。 然而,文本、.data 和 .bss 部分的地址由链接器选择。我可以通过修改链接器脚本来选择/更改它们的位置,但这很繁琐,因为我必须指定库中的所有函数、变量等等。...