常量、变量做函数参数,在变量不变情况下感觉没区别。
本帖最后由 neutronlmk 于 2019-8-21 20:17 编辑常量做参数
void FT25Hxx_EraseSector(const uint32_t fu32_Address)
{
FT25Hxx_WriteEnable(); //FT25Hxx写使能
FT25Hxx_CS = 0; //使能器件
SPI_WriteReadData(0x20);
SPI_WriteReadData((uint8_t)(fu32_Address>>16)); //发送地址
SPI_WriteReadData((uint8_t)(fu32_Address>>8));
SPI_WriteReadData((uint8_t)(fu32_Address));
FT25Hxx_CS = 1; //取消片选
FT25Hxx_WaitBusy(); //等待写入结束
}变量做参数:
void FT25Hxx_EraseSector(uint32_t fu32_Address)
{
FT25Hxx_WriteEnable(); //FT25Hxx写使能
FT25Hxx_CS = 0; //使能器件
SPI_WriteReadData(0x20);
SPI_WriteReadData((uint8_t)(fu32_Address>>16)); //发送地址
SPI_WriteReadData((uint8_t)(fu32_Address>>8));
SPI_WriteReadData((uint8_t)(fu32_Address));
FT25Hxx_CS = 1; //取消片选
FT25Hxx_WaitBusy(); //等待写入结束
}编译输出大小不变,使用的ram也不变。
这该如何决择?
增加一个:
void FT25Hxx_ReadRDID(uint8_t *fu8p_SaveArr)
{
uint8_t u8_i;
FT25Hxx_CS = 0; //使能器件
SPI_WriteReadData(0x9F); //发送读取RDID命令
SPI_WriteReadData(0x00); //发送24bit地址
SPI_WriteReadData(0x00);
SPI_WriteReadData(0x00);
for(u8_i=0;u8_i<3;u8_i++)
{
fu8p_SaveArr=SPI_WriteReadData(0xFF); //循环读数
}
FT25Hxx_CS = 1; //取消片选
}
fu8p_SaveArr是否有必要声明为 uint8_t *const fu8p_SaveArr ?
我试过编译OK。
const 改为code 试试 const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小心修改了fu32_Address的值,前者会在编译时立刻报错发现,后者则会在运行时得到错误的结果(擦除错误的扇区、而且也许不会立即被发现)。 这不很正常嘛,const主要就是给编译器检查用的,你没违背const的限制,就不会报错而已,生成的代码当然是一样的。内存和CPU又不管只读不只读的 好奇,测了一下,好像真没区别。 jathenal 发表于 2019-8-21 17:15
const不仅在语义上提醒不要修改,更是从编译器级别保证不会被误修改;
以lz位代码为例,如果函数代码中不小 ...
感谢感谢 const代表在本函数范围内值是不能修改的 哈哈,真逗 你好,金牌会员。。。这能说明系统性的看完一本C语言书的必要性吗
页:
[1]