发布网友 发布时间:2022-04-21 20:31
共1个回答
热心网友 时间:2023-05-04 18:31
具体思路如下。
一、上位机实现
1、要能根据APP文件生成boot_data文件;
2、如果考虑加密,可以具有一些加密功能。
bin文件读写:出处https://blog.csdn.net/weixin_42287851/article/details/103759331
方法1:
(1)写bin文件
#include <iostream>
#include <fstream>
int main(){
float data[224*224*3];
for(int i=0; i<224*224*3; ++i){
data[i] = i/2.0;
}
// save
FILE *fp = fopen("test.bin", "w");
fwrite(data, sizeof(float), sizeof(data), fp);
fclose(fp);
return 0;
}
(2)读bin文件
#include <iostream>
#include <fstream>
int main(){
float* data = new float[3*224*224];
//read
std::ifstream inF("test.bin", std::ios::binary);
inF.read((char*)data, sizeof(float) * (3*224*224));
inF.close();
std::cout << "read bin file" << std::endl;
for(int i=0; i<10; i++){
std::cout << i << ": "<< data[i] << std::endl;
}
for(int i=224*224*3-10; i<224*224*3; i++){
std::cout << i << ": "<< data[i] << std::endl;
}
return 0;
}
方法2:
(1)写bin文件
#include <iostream>
#include <fstream>
int main(){
float data[224*224*3];
for(int i=0; i<224*224*3; ++i){
data[i] = i/2.0;
}
// save
std::ofstream outF("test2.bin", std::ios::binary);
outF.write(reinterpret_cast<char*>(data), sizeof(data));
outF.close();
return 0;
}
(2)读bin文件
#include <iostream>
#include <fstream>
int main(){
float* data = new float[3*224*224];
//read
std::ifstream inF("test2.bin", std::ios::binary);
inF.read(reinterpret_cast<char*>(data), sizeof(float) * (3*224*224));
inF.close();
std::cout << "read bin file" << std::endl;
for(int i=0; i<10; i++){
std::cout << i << ": "<< data[i] << std::endl;
}
for(int i=224*224*3-10; i<224*224*3; i++){
std::cout << i << ": "<< data[i] << std::endl;
}
return 0;
}
二、下位机实现
1、boot实现
具体实现过程不说了,这里说下注意点,起始地址和大小设置好,然后编译输出bootBin文件。
2、APP实现
具体实现过程不说了,这里说下注意点,起始地址和大小设置好,然后编译输出APPBin文件。
3、用上位机生成bootConfig文件
上面是从Flash读出的配置,下面是生成的配置。
4、合成bin
1)打开 J-Flash,File->open data file,输入boot地址;
2)打开File->merge data file,输入配置地址;
3)打开File->merge data file,输入APP地址;
4)打开File->save data file as,选择HEX格式;
5)用HEX烧写工具即可。