我目前正在使用 STM32CubeMx 和 Keil uVision 为 STM32F407 开发应用程序。我知道嵌入式系统中的动态内存分配大多是不鼓励的,但是在互联网上我可以找到一些支持它的论据。
由于我的发明家灵魂,我想尝试去做,但要安全地去做。假设我正在为传入的 UART 消息创建一个动态分配的 fifo,其中包含由 msg 本身及其长度组成的结构。但是我不想这样做消耗所有的堆大小,因此我想检查我还剩下多少:我的新(?)想法是尝试临时分配一些大块内存(比如 100 个字符)-如果成功,我接受传入的消息,如果不是 - 这意味着我的堆用完了并忽略消息(或接受它并将最旧的消息出队)。检查后我当然释放了临时内存。
我的脑海中出现了几个问题:
- 首先,这有意义吗?根据您的经验,您认为它有用且安全吗?
- 我找不到关于在 ES 中究竟共享 RAM 的确切信息(我知道堆、堆栈和 volatile 变量)所以我的问题是:提供对 1 的答案不是“地狱不回家”,什么大小您会为提到的控制器选择临时内存检查器吗?
- 关于微本身 - 它有 192kB RAM,但是在Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm\startup_stm32f407xx.s文件中,只有 512B+1024B 分配给堆和堆栈 - 不是很少,留下百日咳,剩余 190kB 用于 volatile vars?将堆大小增加到 50kB 是否明智?如果是,我是直接在这个文件中做,还是在其他地方做更好的做法?
可能对你们中的一些人来说,“安全动态记忆”和“嵌入”在一篇文章中既令人震惊又令人眼花缭乱,但请记住,这是在试验和探索新的视野 :) 谢谢和问候。