当前位置:   article > 正文

指针移位操作在STM32中的应用_pbuffer+=pageremain;这里的偏移能到下一页吗?

pbuffer+=pageremain;这里的偏移能到下一页吗?

指针移位操作通常指对指针进行地址的偏移或移位,以便于访问连续的内存区域。

在C语言中,可以通过以下方式对指针进行移位操作:

  1. int a[10] = {1, 2, ..., 10};
  2. int *p = &a[0]; // 将指针p指向数组a的第一个元素
  3. p += 3; // 将指针p向右移动3个位置

在以上代码中,首先定义了一个整型数组a和一个指向其第一个元素的指针p。然后,将指针p向右移动3个位置,即将其指向a[3]位置的地址。这里使用了指针算术运算中的加法运算,由于指针p指向的数据类型是int类型,因此每次移动时应该增加4个字节的偏移量(或称大小)。

需要注意的是,在进行指针移位操作时,应该确保指针类型和指向的数据类型一致,并遵循C语言指针算术运算的规则。此外,还应该考虑指针越界和未定义行为等问题,以确保程序正常运行和可靠性。

需要注意的是,在进行指针移位操作时,应该确保指针类型和指向的数据类型一致,并遵循C语言指针算术运算的规则。此外,还应该考虑指针越界和未定义行为等问题,以确保程序正常运行和可靠性。

 以下代码是STM32的SPI实验中有关页写自动换页函数代码,其中指针位移操作的应用代码部分为:pBuffer+=pageremain;//数组指针左移pageremain位

具体作用是在写入数据字节数超过写入地址那一页剩余的字节数时,首先将写入地址那一页剩余字节数写满,然后跳转到下一页。完成换页后,我们不能将需要写入的数据再从头开始写了,因为,在上一页我们已经将数据写入了一部分,再写的话,这一页数据会有一部分和上一页一样,所以只能接着我们写入的那部分数据的下一个字节开始写。因此,我们需要利用需要写入数据的数组的指针移位操作,将数组指针指到需要继续写的那一个字节的位置上。然后再继续进行页写操作。

举例说明:

首先我们需要知道一页可以写256个字节

为解说方便我们假设SPI FLASH内存只有两页(也就是256*2个字节,也就是所有地址0~511)

我们要写的数据有321个,并且将写入字节的首地址是121,此时第一页我们只能写入255-121+1=135个字节,那么还剩下321-135=186个字节只能写入第二页,在写入第二页时,我们肯定要从要写入数据的第136个字节开始写入,因此我们要将写入数据数组的指针进行移位操作,将数组指针移到第136个字节的地址上。然后继续进行第二页的写操作。

  1. //无检验写SPI FLASH
  2. //必须确保所写的地址范围内的数据全部为0XFF,否则在非0XFF处写入的数据将失败!
  3. //具有自动换页功能
  4. //在指定地址开始写入指定长度的数据,但是要确保地址不越界!
  5. //pBuffer:数据存储区
  6. //WriteAddr:开始写入的地址(24bit)
  7. //NumByteToWrite:要写入的字节数(最大65535)
  8. //CHECK OK
  9. void W25QXX_Write_NoCheck(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)
  10. {
  11. u16 pageremain;
  12. pageremain=256-WriteAddr%256; //单页剩余的字节数
  13. if(NumByteToWrite<=pageremain)pageremain=NumByteToWrite;//不大于256个字节
  14. while(1)
  15. {
  16. W25QXX_Write_Page(pBuffer,WriteAddr,pageremain);
  17. if(NumByteToWrite==pageremain)break;//写入结束了
  18. else //NumByteToWrite>pageremain
  19. {
  20. pBuffer+=pageremain;//数组指针左移pageremain位
  21. WriteAddr+=pageremain;
  22. NumByteToWrite-=pageremain; //减去已经写入了的字节数
  23. if(NumByteToWrite>256)pageremain=256; //一次可以写入256个字节
  24. else pageremain=NumByteToWrite; //不够256个字节了
  25. }
  26. };
  27. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/429261
推荐阅读
相关标签
  

闽ICP备14008679号