OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9136|回复: 2

const 为形参的问题

[复制链接]

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2012-7-6
在线时间
0 小时
发表于 2012-7-28 16:24:26 | 显示全部楼层 |阅读模式
最近在移植FATFS到STM32上出现了一个问题:

DRESULT disk_write (
        BYTE drv,                        /* Physical drive nmuber (0..) */
        const BYTE *buff,        /* Data to be written */
        DWORD sector,                /* Sector address (LBA) */
        BYTE count                        /* Number of sectors to write (1..255) */
)
{
//  DRESULT res;
        u8 result;
        switch (drv) {

        case MMC :
        {
                              result = SD_WriteDisk((u8*)buff, sector, count);
                // translate the reslut code here
            }

}
        return RES_PARERR;

SD_WriteDisk的原型   u8 SD_WriteDisk(u8*buf,u32 sector,u8 cnt);
请教下大家一个问题,为什么const BYTE *buff作为形参,SD_WriteDisk传进来的实参一定要是加(u8*)强制转换的呢(即(u8*)buff ),
不然编译不过提示    argument of type "const BYTE *" is incompatible with parameter of type "u8 *"
实在是不明白,请指教,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

36

主题

1105

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2196
金钱
2196
注册时间
2012-2-8
在线时间
35 小时
发表于 2012-7-28 16:41:55 | 显示全部楼层
编译器不允许你把常量当变量使用,
这样会导致安全性问题,

比如, SD_WriteDisk 函数内部可能会对 buf 指向的缓冲区进行写操作,但是如果 buf 是指向 code 区的常量,系统可能就会崩溃

如果 SD_WriteDisk 不对 buf 进行写入,函数又没定义成  SD_WriteDisk(u8 const* , ...),只能说这个函数定义的不够规范,自己改一下定义就行了。一般不进行写入的量,都应该定义成 const,这样自己犯错的概率会小一点(相信调过程序的人都是坚信人一定会犯错的,所以尽管有些微不足道的东西,也应该养成个好习惯),也比较规范。
https://github.com/roxma
回复 支持 反对

使用道具 举报

5

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2012-7-6
在线时间
0 小时
 楼主| 发表于 2012-7-28 17:28:43 | 显示全部楼层
嗯,多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-27 01:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表