问题描述
我正在尝试为具有 8 字节页面写入缓冲区的小型 EEPROM 进行一些手动分页。 我创建的代码可以在在线工具中正常工作。但是,当我在我的编程环境中实现它时,这让我很难,尤其是在解析的页面中获取正确的值。
如果你愿意,你可以检查一下自己; Click here for the code
或者你也可以从这里看到;
#include <stdint.h>
#include <string.h>
#include <stdio.h>
int main(){
uint8_t * buffer = "123456789ABCDEFGHIJKLM";
uint8_t length = strlen(buffer);
uint8_t pagesize = 8;
uint8_t pagecount = length / pagesize;
if ((length % pagesize) >= 0){
pagecount++;
}
char memRet[8];
char *retVal = memRet;
for (uint8_t p = 1; p < pagecount + 1; p++){
printf("Page # %d => ",p);
retVal = GetPageParsed(buffer,pagesize,p);
printf("GetPageParsed : %s \n",retVal);
}
return 0;
}
uint8_t * GetPageParsed(uint8_t * buffer,uint8_t pageSize,uint8_t page){
char MemVal[8]; // If pageSize is used to determine the size of the array dynamically,for some reason,the array filled up with extra values!
char *RetVal = MemVal;
uint8_t i = 0;
uint8_t StartAddress = pageSize * (page - 1);
for (int p = StartAddress; p < pageSize * page; p++){
RetVal[i] = buffer[p];
i++;
}
return RetVal;
}
当我在线运行它时,我得到了这个结果;
Page # 1 => GetPageParsed : 12345678
Page # 2 => GetPageParsed : 9ABCDEFG
Page # 3 => GetPageParsed : HIJKLM
但是,当我在我的程序中运行时;
Page # 1 => 12345678\001\b\240/
Page # 2 => 9ABCDEFG\002\b\240/
Page # 3 => HIJKLM
这是完全相同的代码。但是,在我的程序中,结果有所不同。即使我通过按字符数组(char memRet[8];
和 char MemVal[8];
)分配内存来规定我需要 8 个字节
我很确定我错过了什么。感谢您从现在开始提供的宝贵意见。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)