【发布时间】:2018-11-27 17:42:47
【问题描述】:
我正在编写一个需要测试一些外部 SPI 闪存的函数。 在开发过程中偶然使用了这段代码
void __TO_FLASH__ slcTestCache(uint8_t len)
{
uint16_t wcrc = 0xFFFF, rcrc = 0xFFFF;
uint8_t wbuff[len], rbuff[len];
//uint8_t *wbuff = os_malloc(len);
//uint8_t *rbuff = os_malloc(len);
...
请注意,'len' 是参数。 现在代码按预期工作(我测试了几个参数)但我的问题是这样正确吗?
我是说
uint8_t wbuff[len]
编译器如何知道 @runtime 的 len 是多少来调整缓冲区的大小? 注释代码似乎更符合逻辑(malloc)。
现在的问题是代码是否有效,我宁愿不使用 malloc(嵌入式原因)。或者只是偶然运行该堆栈在该区域中是空闲的。
感谢您的澄清(我使用 gnu c99)。
【问题讨论】:
-
您正在使用
c99中引入的可变大小数组。但请记住,与您注释的代码示例不同,wbuff和rbuff是在堆栈上创建的。 -
嗯...太棒了:)所以现在的问题..让它们放在堆栈或堆上!谢谢。