找回密码
 立即注册
查看: 229|回复: 3

关于冲哥29课SPI读写W25X40CL页写程序的疑问

[复制链接]
  • TA的每日心情
    开心
    昨天 09:00
  • 签到天数: 135 天

    [LV.7]常住居民III

    11

    主题

    89

    回帖

    336

    积分

    中级会员

    积分
    336
    发表于 2024-3-1 10:20:27 | 显示全部楼层 |阅读模式
    本帖最后由 pursuing 于 2024-3-2 11:17 编辑

    我在学习冲哥STC32教程(用的STC8H实验箱),第29课SPI读写FLASH的教程中有如图的页写PageProgram(指令0x02)程序段:

    1. 我的疑问是,这里addr在实验中传的地址是0,根本就没有变,而这里 if(addr&0xff==0) 不是一下就满足了吗,也就跳出这段循环了,按我的理解只有SPI_WriteByte(buffr[0])写入了,后面的2、4、6、8、10等数组后5个数组元素都不应该写入,但实验确实证明写入成功了,又读出来了。这是怎么回事呢??
    2. 另外,这句红线的 if 判断,我认为有问题,应该是 if((addr+i)&0xff==0),这样写满一页时就停止了。又看了下实验箱程序,虽然这一句和这里一样,但前一句是addr++,这就对了。另外,页写最大256字节,length和i用u8就够。
    3. 我对上述地方进行了仿真,奇怪的是,仿真程序从来不会走到 if(addr&0xff==0) break; 这句,而其他的 if(length == 0) 之类的判断,都会停下来进行判断。开始我以为是addr没有变化,编译时优化掉了,但后来我改成 if((addr+i)&0xff==0),仿真竟然也不会走到这里,每次都是跳过这个判断,直接到while(length--)处。咋回事捏?

    000.png
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:00
  • 签到天数: 135 天

    [LV.7]常住居民III

    11

    主题

    89

    回帖

    336

    积分

    中级会员

    积分
    336
     楼主| 发表于 2024-3-4 11:13:56 | 显示全部楼层
    本帖最后由 pursuing 于 2024-3-5 19:56 编辑

    网上看了看相关帖子,除了说打开魔术棒/output/Debug information,就是让降低优化级别,我降低到2,或用default,编译都没问题,但这里if的判断一句断点还是打不上。看来编译器还是会把if这一句优化掉,(addr+i)是不断增加的为何还会被优化,真是令人费解啊。
    后来用了xdata的库,终于可以把优化级别降下来了。

    最后原因也找到了,应该加(),优先级问题。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 59 天

    [LV.5]常住居民I

    1

    主题

    5

    回帖

    277

    积分

    中级会员

    积分
    277
    发表于 2024-3-6 10:00:57 | 显示全部楼层
    从flash规的格书看一次最多可写256个字节。如果(addr&oxff==0)说明指针(地址)返回到了0x00,再写下去会覆盖掉前面写好的资料,所以要break退出。
    以下是STC8程序包中的相同操作,可作参考


    SPI-PM25LV040.JPG

    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:00
  • 签到天数: 135 天

    [LV.7]常住居民III

    11

    主题

    89

    回帖

    336

    积分

    中级会员

    积分
    336
     楼主| 发表于 2024-3-7 09:19:31 | 显示全部楼层
    GGG_988 发表于 2024-3-6 10:00
    从flash规的格书看一次最多可写256个字节。如果(addr&oxff==0)说明指针(地址)返回到了0x00,再写下去会覆 ...

    谢谢,我不是问这几句的意思,而是当时疑惑为什么仿真到不了那一句,后来发现少了括号,问题已解决。
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 01:20 , Processed in 0.062195 second(s), 45 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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