//输出样本库信息
void Put_Simple_Data(char *_data)
{
int offset_start = 0 , count = 0 , end_position = 0 ;
int end_position_save = 0 ;
int count_number = 0 ;
count_number = 0 ;
for(offset_start = 0 , count = 0 ;
offset_start < 600 ;
offset_start++ ,count++)
{
//每20个字节为单位
if(count == 20)
{
//1.记录起始地址
end_position = offset_start ;
//2.以20个字节作为分割点,分割数据
sample_data_info[count_number].serial_num = _data[end_position-20] ; //20*n+0为库的编号
sample_data_info[count_number].property = _data[end_position-19] ; //20*n+1为库的属性
memset(sample_data_info[count_number].sample_name,0,18);
memcpy(sample_data_info[count_number].sample_name,(_data+2)+(20*count_number),18); //20*n+2....20*n+2+18为库的名称
printf("编号:%d 属性:%d 名称:%sn",sample_data_info[count_number].serial_num,sample_data_info[count_number].property,sample_data_info[count_number].sample_name);
//记录有多少个20
count_number++ ;
//将当前的计数清0
count = 0 ;
}
}
}
主函数中,主要工作是开辟一块600字节的内存空间用于存储,并调用以上的函数实现功能:
int main (void)
{
char *_data = NULL ;
_data = malloc(600);
Create_Simple_Data(_data);
Put_Simple_Data(_data);
free(_data);
_data = NULL ;
return 0;
}
运行结果:

在内存足够大的情况下,这无疑是非常好的方法,既简单又粗暴,但在单片机的程序上,可能无法一次性分配如此大的,比如Ucos,一个栈的分配有限,现在,又如何来实现这样的协议呢?不建议把栈改大,因为单片机没有虚拟内存管理机制,如果当前的任务改大了,其余的也就相对的要变小了。开动脑筋吧!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ASPKU的支持。










