硬件:
MCU: stm32f103,
FLASH: w25q128
开发平台:
keil5.20
需要在一块板子上实现spi_flash以扇区大小为单位的读写操作,接口函数如下:
- /*
- *********************************************************************************************************
- * 函 数 名: sf_WriteSector
- * 功能说明: 向指定扇区写入整个扇区的数据
- * 形 参: _pBuf:数据源缓冲区
- * _uSectorNumber:扇区编号(以w25q128为例,编号取值范围为0~4095)
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void sf_WriteSector(uint8_t * _pBuf, uint16_t _uSectorNumber)
- {
- uint16_t len;
- uint16_t i;
- len = sizeof(_pBuf)/sizeof(uint8_t);
- if(4096 > len)
- {
- //当写入数据缓冲区大小小于扇区大小时进行补足操作
- }
- sf_WriteBuffer(_pBuf, _uSectorNumber*4096+0, 4096);//写入数据缓冲区,扇区编号,扇区大小
- }
- /*
- *********************************************************************************************************
- * 函 数 名: sf_ReadSector
- * 功能说明: 读取指定扇区的全部数据
- * 形 参: _pBuf:读取数据缓冲区
- * _uSectorNumber:扇区编号(以w25q128为例,编号取值范围为0~4095)
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void sf_ReadSector(uint8_t * _pBuf, uint16_t _uSectorNumber)
- {
- sf_ReadBuffer(_pBuf, _uSectorNumber*4096+0, 4096);
- }
需要考虑写入时,若写入数据缓冲区数据不足4K(一个扇区的大小),那么就需要对其进行补足操作,
使用code blocks验证malloc、sizeof、memcpy的用法,测试代码如下所示:
malloc: 不知道什么原因,不管是len=(int*)malloc(3*sizeof(int))
len=(int*)malloc(6*sizeof(int)),malloc所分配的内存大小长度‘len一直为1~~
不过使用malloc进行内存分配,则数组中的原始数据将被覆盖,,
sizeof:主要是为了测试如何得到传入数据的长度,可以通过sizeof(array)/sizeof(TYPE)得到数组长度
memcpy: 可采用它实现数组补足功能
不过还是未找到扩充数组长度且保留数组元数据的方法,请问各位大神遇到这种情况怎么解决呢?
- #include"stdio.h"
- #include"stdlib.h"
- #include"string.h"
- int main()
- {
- int i;
- int len;
- int* array;
- int* arrayCopy;
- int data = 3;
- /*测试数组内存分配及赋值*/
- array = (int*)malloc(3*sizeof(int));
- if(!array)
- {
- printf("创建数组失败!\n");
- exit(1);
- }
- memcpy(array,&data,3*sizeof(int));
- len = sizeof(array)/sizeof(int);
- for(i=0; i<len-1; i++)
- {
- printf("%d ",array[i]);
- }
- printf("%d & first array len is %d\n",array[i], len);
- /*测试数组扩展*/
- array = (int*)malloc(6*sizeof(int));
- if(!array)
- {
- printf("创建数组失败!\n");
- exit(1);
- }
- len = sizeof(array)/sizeof(int);
- for(i=0; i<len-1; i++)
- {
- printf("%d ",array[i]);
- }
- printf("%d & second array len is %d\n",array[i], len);
- }
运行结果: