由于一些原因,需要在keil中采集大量(成千上万)数据然后分析,于是创建了一个uint16_t value[2000]数组。然后我通过

打开keil的command窗口,在其中输入如下命令:

:SAVE D:\value1.txt 0X00080ABC,0X00080ABC+4000

SAVE:为命令
D:\value1.txt: 保存路径
0X00080ABC:需要导出数组开始地址
0X00080ABC+4000:需要导出数组结束地址

这样就可以导出数组数据到本地了,需要注意导出数据的格式是hex386(忘了的话,自己百度一下).

hex386的格式就有点麻烦了,我要的是十进制的数组。一开始我自己通过Notepad++手动编辑修改了一下,可是最后留下来的是十六进制的数组,而且还挺麻烦的,要1min/数组文件。而且导入EXCEL之后还要转换成十进制(这样很直观)。这就不能忍了,几次之后,我就到网上百度一下我这样的情况,发现还是有不少同道也碰到这样的情况,可是,重要的是可是,没有解决我问问题的办法(反正我没找到,就有一些类似的,例如:HextoBin)。

于是我就只好自己写了。采用VS2013,代码如下,复制粘贴就好了,只需要改一下这首行的路径地址就好了。如果不行再好好看看,没有写太多的注释(笑)。

这是主函数:

#define path ("./未充电/0ml2.txt")int main(void)
{FILE *fp;fp = fopen(path, "r"); if (fp == NULL){printf("open file 失败!\n");exit(1);}else{printf("open file 成功!\n");}/*r 打开只读文件,该文件必须存在。r + 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w + 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。a + 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。*/printf("失败\n");fseek(fp, 0, SEEK_END);printf("成功\n");int file_size;file_size = ftell(fp);char tmp[12 * 1024] = { 0 };fseek(fp, 0, SEEK_SET);fread(tmp, file_size, sizeof(char), fp);tmp[file_size] = '\0';printf("file_size = %d\n", file_size);transformArr(tmp, file_size);//                        第一步:将垃圾数据通通变成'g',并重新排序//printf("%s", tmp);
//**************************************************************************************************int len = deleteElement(tmp, file_size, 'g');//      第二步:删除垃圾数据if (-1 == len){printf("删除'g'失败\n");}else{printf("删除'g'成功\n");}
//**************************************************************************************************//printf("%s", tmp);len = deleteElement(tmp, len, '\n');//     第三步:删除换行符if (-1 == len){printf("删除'\\n'失败\n");}else{printf("删除'\\n'成功\n");}
//**************************************************************************************************//printf("%s", tmp);HexToDec(tmp,len);//                              第四步:十六进制数转十进制数//printf("%s", tmp);
//**************************************************************************************************len = addElement(tmp, len, '\n', 4);//               第五步:添加空格printf("%s", tmp);printf("\n添加' '函数已执行\n");
//**************************************************************************************************    fp = fopen(path, "w+");//                   第六步:写入文件if (fp == NULL){printf("open file failure!\n");}else{printf("open and write file successful!\n");fputs(tmp, fp);}fclose(fp);return 0;
}

还有一些主函数应用到的函数:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <math.h>
using namespace std;int HexCharToNum(char c)
{if (c >= '0' && c <= '9'){return (c - '0');}else if (c >= 'a' && c <= 'f'){return (c - 87);}else if (c >= 'A' && c <= 'F'){return (c - 55);}else{//printf("It isn't Hex!\n");}
}
/*
功能:判断是否为十六进制里的字符
参数:需要判断的字符
返回值:成功返回1 失败返回0
*/
int isHexNum(char c)
{if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))return 1;return 0;
}void getformat(char *tmp)
{int len = strlen(tmp);
}/*
功能:删除数组中的指定元素
参数:arr 数组名, len 数组的实际长度, del 要删除的数据
返回值:成功返回数组的有效长度 失败返回-1
*/
int deleteElement(char arr[], int len, char del)
{//外层循环寻找要删除的元素int i = 0;int j = 0;int tmp = len;for (i = 0; i < len; i++){if (arr[i] == del){      //找到要删除的元素//将该元素后边的所有元素前移for (j = i; j + 1 < len; j++){arr[j] = arr[j + 1];}//数组有有效长度-1len--;//防止重复元素的删除时,位置的后移--i;}}if (!(tmp - len)){return -1;}return len;
}
/*
功能:指定间隔n个数组元素添加指定元素
参数:arr 数组名, len 数组的实际长度, add 要添加的数据
返回值:成功返回数组的有效长度 失败返回-1
*/
int addElement(char arr[], int len, char add, int n)
{//外层循环寻找要删除的元素int i = 0;int j = 0;int c = 0;int tmp = len;for (i = 0; i < len; i++){if (c == n){c = 0;//printf("i = %d\n",i);for (j = len; j >= i; j--)//先将之后的所有元素后移{arr[j + 1] = arr[j];}arr[i] = add;            //然后填充要添加的元素//printf("%c", arr[i]);len++;i++;}//printf("%c", arr[i]);c++;}if ((tmp - len) == 0){return -1;}return len;
}
/*
功能:改造文本数据
参数:arr 数组名
返回值:成功返回数组的有效长度 失败返回-1
*/
void transformArr(char tmp[],int len)
{int cnt = 0;int j = 0;int x = 1;int n = 0;for (int i = 0; i < len; i++){if (tmp[i] == '\n'){n++;}}printf("n = %d\n", n);for (int i = 1; i < n + 1; i++){ if (i == 1){while (tmp[cnt] != '\n'){tmp[cnt] = 'g';cnt++;}printf("cnt = %d,i = %d\n", cnt, i);}else if (i == 2){while (tmp[cnt] != '\n'){if (j < 9){tmp[cnt] = 'g';}else if (j < 44){if (x == 4){int temp = 0;x = -1;temp = tmp[cnt];tmp[cnt] = tmp[cnt - 2];tmp[cnt - 2] = temp;temp = 0; cnt = cnt - 1;temp = tmp[cnt];tmp[cnt] = tmp[cnt - 2];tmp[cnt - 2] = temp;}x++;//printf("x = %d\n", x);}else{tmp[cnt] = 'g';}cnt++; j++;}//printf("cnt = %d,i = %d\n", cnt, i);}else if (i == n - 1){while (tmp[cnt] != '\n'){tmp[cnt] = 'g';cnt++;}printf("cnt = %d,i = %d\n", cnt, i);}else if (i == n){while (tmp[cnt] != '\n'){tmp[cnt] = 'g';cnt++;}printf("cnt = %d,i = %d\n", cnt, i);}else{j = 0; x = 1;while (tmp[cnt] != '\n'){if (j < 9){tmp[cnt] = 'g';}else if (j < 49){if (x == 4){int temp = 0;x = -1;temp = tmp[cnt];tmp[cnt] = tmp[cnt - 2];tmp[cnt - 2] = temp;temp = 0; cnt = cnt - 1;temp = tmp[cnt];tmp[cnt] = tmp[cnt - 2];tmp[cnt - 2] = temp;}x++;//printf("x = %d\n", x);}else{tmp[cnt] = 'g';}cnt++; j++;}//printf("cnt = %d,i = %d\n", cnt, i);}cnt++;}}void HexToDec(char arr[],int len)
{int sum = 0;int c = 0;for (int i = 0; i < len; i++){sum = sum + HexCharToNum(arr[i]) * (int)pow(16, 3-c);if (c == 3){//printf("%d ", sum);arr[i - 0] = (sum % 10) + '0';//个位arr[i - 1] = sum / 10 % 10 + '0';arr[i - 2] = sum / 100 % 10 + '0';arr[i - 3] = sum / 1000 % 10 + '0';sum = 0;c = -1;}c++;}
}

只需一个main文件,然后生成就OK了。最后只剩下一列十进制的数据,可以直接导入EXCEL了。

18.11.15

发现,地址最后一位竟然对输出的数据格式有影响,真是坑爹!

例:最后一位为数字地址:0x000807e2:

:020000040008F2
:0E07E2006A0270026B026E026E026F026D02FE
:101740000000000000000000000000000000000099
:101750000000000000000000000000000000000089
:101760000000000000000000000000000000000079
:101770000000000000000000000000000000000069
:0317800000000066
:00000001FF

最后一位为数字地址:0x000807ea:

:020000040008F2
:06078A0000000000000069
:100790000000000000000000000000000000000059
:1007A0000000000000000000000000000000000049
:1008300000000000000000000000000000000000B8
:1008400000000000000000000000000000000000A8
:03085000000000A5
:00000001FF

文本数据格式不一样,那我的上面的代码自然也就不能直接用了。

将KEIL中memory window 数据保存到文本,然后改造成十进制数组,方便导入excel进行分析相关推荐

  1. 下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

    下载MNIST数据集并使用python将数据转换成NumPy数组 首先来分析init_mnist函数 接下来继续分析load_mnist函数 实现数据集转换的python脚本的代码 显示MNIST图像 ...

  2. matlab将数据输出到excel中,matlab将数据保存为excel表格-怎样将MATLAB中的数据输出到excel中...

    怎样将MATLAB中的数据输出到excel中? xlswrite()函数可以将matlab中数据保存到excel中,请面例子: >> data = magic(5) % 示例数据 data ...

  3. 微信小程序中如何将数据保存到内存中并且读取的同步写法

    前言 微信小程序保存到内存中有两种方法,一种是同步一种是异步,两个方法有着独特的用处,在小程序控制台中的Storage中可以查看保存到内存中的数据. 保存到内存中也就是我们平常说的本地存储,有一个内存 ...

  4. scrapy+mysql+pipeline+更新数据_python3+Scrapy爬虫实战(二)—— 使用pipeline数据保存到文本和数据库(mysql)...

    前言 保存本地 存储Json数据 配置setting 保存数据库 创建数据库 创建表 编写pipelines 配置setting 本文是对上篇文章所讲的代码进一步优化,回看可以点这里,代码就直接在上一 ...

  5. pandas 取excel 中的某一列_干货Python Pandas 做数据分析之玩转 Excel 报表分析

    本篇文章选自作者在 GitChat 的分享,若有什么问题,可在公众号回复「小助手」添加小助手微信,邀请你进入技术交流群. 各位朋友大家好,非常荣幸和大家聊一聊用 Python Pandas 处理 Ex ...

  6. excel数据导入c语言数组,C导入Excel数据的方式(两种)

    C导入Excel数据的方式(两种) C#导入 Excel 数据的方式(两种) 方式一.导入数据到数据集对象,只支持 Excel 的标准格式,即不能合并单元格等等/// /// 导入数据到数据集中/// ...

  7. php字符串定义为arraylist,如何把arraylist集合中的字符串数据保存的文本文件中

    分析: (推荐教程:java课程) 通过题目的意思我们可以知道如下内容:ArrayList集合里存储的是字符串 遍历ArrayList集合,把数据获取 然后存储到文本文件中 文本文文件说明使用文本文件 ...

  8. java 保存文件在服务器_Java中如何将数据保存到服务器端

    展开全部 您好,提问者: 1.存储到数据库32313133353236313431303231363533e4b893e5b19e31333335323462,建议. 2.如果不涉及数据库,也可以用流 ...

  9. python中的文件数据保存

最新文章

  1. 【Spring】spring基于注解的声明式事务控制
  2. 超酷的JS时间效果--收集
  3. 嵌入式linux实时化技术,嵌入式Linux实时化技术
  4. Scala定义函数的5种方式
  5. linux中fg jobs ctrl-z bg操作和kill-15、kill-9杀死进程
  6. 一场大火,让云计算巨头的数据中心化为灰烬!10 万Rust 游戏玩家的数据永久丢失,无法恢复
  7. 华为发布全容器化 5G 核心网;余承东评小米 MIX Aphla 手机无实用价值;PHP 新版本更新 | 极客头条...
  8. CCF201503-5 最小花费(100分解题链接)
  9. KVO 的使用和举例
  10. 用Raspberry Pi作AirPlay服务端
  11. ActiveMQ集群安装与配置
  12. 好看的个人网站源码_新手想建个人网站,都要注意哪些关于自助建站源码的坑?...
  13. 计算机专业转段考试,计算机信息技术学院完成计算机网络技术专业3+2本科转段考试工作...
  14. 长期应用阿达木单抗时所产生的抗抗体会影响疗效
  15. FactoryBean的使用~
  16. w ndows无法连接到System,电脑无法连接到System Event Notification Service服务
  17. 【最具价值CTO评选秀】出门问问CTO雷欣:从技术极客到核心管理的秘密
  18. ElasticSearch启动报错RollingFileManager (/xxx/xxx) java.io.FileNotFoundException
  19. 深度学习那么火,深度学习图形工作站应该更火
  20. 事件分发机制Android,阿里P7级别面试经验总结,实战篇

热门文章

  1. 使用AVCaptureSession扫描二维码
  2. 戴骨传导耳机会头晕?骨传导耳机真的好吗?
  3. 新玺配资:货币宽松逐步成熟 A股调整低吸良机
  4. php 四舍五入,php四舍五入 js四舍五入方法 | 帮助信息-动天数据
  5. 一个不错的拳皇技巧学习网站
  6. 16g电脑内存有什么好处_电脑32G内存有必要吗?8G、16G、32G内存条玩游戏、生产力实测对比...
  7. 基于Springboot+Vue+Mybatis的小说阅读管理系统
  8. php随机几种图片,关于 PHP 随机图片那个衍生的一个小问题
  9. 渔业养殖远程监控系统解决方案
  10. NFT支付平台接口,数字藏品支付接口如何申请?