ccs读取dat文件c语言程序,详解CCS中的.dat文件
CCS支持的.dat文件的格式为:
文件头为
定数 数据格式 起始地址 页类型 数据块大小
1651 1 80000000 0 10
固定标识 数据格式 基地址 页类型 长度
数据格式:1-十六进制 2-十进制 3-十进制长整型 4-十进制浮点型
页类型: 0-数据 1-程序 ?
长度: 装入数据的长度
比如一个.dat文件:
1651 1 800 1 10
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
0x0000
制作.dat 文件的方法也很简单,可以用VC++或者MATLAB来实现。比如hellodsp的网友lwxing提供的使用matlab创建.dat文件的一个实例:
matlab向dsp传递.dat文件
x=2*sin(2*pi*100*m*dt);
for m=1:200;
if x(m)>=0 y(m)=x(m);
else y(m)=4+x(m);
end;
end;
y=y*16384;
fid=fopen('input.dat','w');%打开文件,'w'是将此文件定义为可写的,fid是此文件的整数标示
fprintf(fid,'1651 1 0 1 0\n');%输出文件头,文件头必须是dsp所能识别的,就如此句程序所设定的
fprintf(fid,'0x%x\n',round(y));%输出y数组,并写到与fid标示符相同的文件,即yinput.dat文件里。round是取y值的最近的数,即如果是1.2,就取1,如果1.6,就取2.
fclose(fid); %关闭fid标示符的文件。
fid=fopen('input.dat','w');%打开文件,属性设置为写
fprintf(fid,'1651 1 0 1 0\n');%输出文件头,只有此文件头dsp芯片才能识别
fprintf(fid,'0x%x\n',round(x));%输出十六进制的x
fclose(fid);关闭
这里x要转换成二进制补码,这也是我发此贴的目的所在。只是个人的理解,如果有问题,请大侠们改正,为更多dsp学习者们提供借鉴。
首先确定x的范围,譬如x=【-2,2】,那么,我们采用定点Q14,那么就是要乘以16384,如果x<0,还要转化成其补码。补码应该是用模加上x,即4+x,然后再将此数乘以16384.
其在CCS中的使用方法可以有一下命令:
File->Data->Load
File->Data->Store
File->File I/O
验证一下,采用倒推的方法,即使用save data将内存中的数据取出写入到一个文件中,首先将数据写入到内存中,写入的数据见下面截图
之后将部分数据,地址为0x80000000,长度0x10保存到test.dat中,使用编辑工具打开test.dat,得到的文件内容如下
1651 1 80000000 0 10
0x01020304
0x00000001
0x00000002
0x00000003
0x00000004
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
0x00000000
由于CCS中设定采用小端的存储方式,所以数据存储的顺序有一些改变,即0x01020304中04是数据的最低位,放在内存的LSB,01是数据的最高位,放在内存的MSB,同时在所有的32位数据之前添加了0x字段。
to mayerx:
我按你说的方法试了一下,不知道负数应该怎样处理?你说的“生成的数据转化为合适Q值的十六进制数据”看了不是很明白.我的小程序如下,错的地方请指正,谢谢!
x=8*sin(0.5*2*pi*[1:1000]/300)+3*sin(40*2*pi*[1:1000]/300);%产生数据
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 1 0/n');%输出文件头
fprintf(fid,'0x%x/n',round(x));%输出
fclose(fid);
************************888
我知道怎么用matlab产生dsp 需要的数据文件,程序附在下面.
% Creat a data file of the sinewave, which DSP chip can load .%
clear all;
Fs=8000; %Sampling Frequecy of AD535 chip=8KHz%
f1=100; %Frequency of Sine Wave"
y=10*sin(2*pi*f1*[0: 160]/Fs); % Number of Sampling point=160, and create sine wave%
plot(y);
grid on;
reply=input('Please input category of data: '); % input category of data%
fid=fopen(sine1.dat', 'w'); %creat a data file in the given folder%
fprintf(fid, '1651 %d 0 0 0 /n', reply); % output the head file of .dat file %
switch reply % output data into the .dat file according to the category of data%
case 1
fprintf(fid, '0x%x/n', y); % output 32bit hexadecimal data %
case 2
fprintf(fid, '%d/n', round(y)); % output 32bit float data %
case 3
fprintf(fid, '%12.1f/n', round(y)); % output 40bit long inter data %
case 4
fprintf(fid, '%f/n', y); % outout 32bit integer data %
end
fclose(fid); % close the .dat file %
*************************************************88
对于负数,应当采用补码,用模减去该数的绝对值.
你的程序中有如下问题没有考虑:
x=8*sin(0.5*2*pi*[1:1000]/300)+3*sin(40*2*pi*[1:1000]/300);%产生数据
%%此后要对X中的各个元素需要转化为合适的定点数,比如你的各元素在-11~11之间,则选用Q11,其示数范围在-16≤x≤15.9995117,否则保存结果应当还是浮点数.用浮点数A转换成定点数B: B =(int)A×2^Q来进行转换,如果是负数,还需要求补.
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 1 0/n');%输出文件头
fprintf(fid,'0x%x/n',round(x));%输出
fclose(fid);
to mayerx:
我按你说的方法试了一下,不知道负数应该怎样处理?你说的“生成的数据转化为合适Q值的十六进制数据”看了不是很明白.我的小程序如下,错的地方请指正,谢谢!
x=8*sin(0.5*2*pi*[1:1000]/300)+3*sin(40*2*pi*[1:1000]/300);%产生数据
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 1 0/n');%输出文件头
fprintf(fid,'0x%x/n',round(x));%输出
fclose(fid);
************************888
我知道怎么用matlab产生dsp 需要的数据文件,程序附在下面.
% Creat a data file of the sinewave, which DSP chip can load .%
clear all;
Fs=8000; %Sampling Frequecy of AD535 chip=8KHz%
f1=100; %Frequency of Sine Wave"
y=10*sin(2*pi*f1*[0: 160]/Fs); % Number of Sampling point=160, and create sine wave%
plot(y);
grid on;
reply=input('Please input category of data: '); % input category of data%
fid=fopen(sine1.dat', 'w'); %creat a data file in the given folder%
fprintf(fid, '1651 %d 0 0 0 /n', reply); % output the head file of .dat file %
switch reply % output data into the .dat file according to the category of data%
case 1
fprintf(fid, '0x%x/n', y); % output 32bit hexadecimal data %
case 2
fprintf(fid, '%d/n', round(y)); % output 32bit float data %
case 3
fprintf(fid, '%12.1f/n', round(y)); % output 40bit long inter data %
case 4
fprintf(fid, '%f/n', y); % outout 32bit integer data %
end
fclose(fid); % close the .dat file %
*************************************************88
对于负数,应当采用补码,用模减去该数的绝对值.
你的程序中有如下问题没有考虑:
x=8*sin(0.5*2*pi*[1:1000]/300)+3*sin(40*2*pi*[1:1000]/300);%产生数据
%%此后要对X中的各个元素需要转化为合适的定点数,比如你的各元素在-11~11之间,则选用Q11,其示数范围在-16≤x≤15.9995117,否则保存结果应当还是浮点数.用浮点数A转换成定点数B: B =(int)A×2^Q来进行转换,如果是负数,还需要求补.
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 1 0/n');%输出文件头
fprintf(fid,'0x%x/n',round(x));%输出
fclose(fid);
ccs读取dat文件c语言程序,详解CCS中的.dat文件相关推荐
- c 语言中 %是什么运算符,C 语言基础----详解C中的运算符
C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...
- 详解Python中的File(文件)操作
目录 Python中的File(文件)操作 写入文件的操作: 读取文件的操作: 一.文件操作相关函数 1. open() 打开文件 2. seek() 设置文件指针的位置 3. write() 写入内 ...
- 【C语言简单说】二:第一个C语言程序详解(2)
如有错误请给与纠正- (+_+)? 不知道你在什麼 其实这一节可以跳过,不信你往下看- 上一个教程只说明了第一个C语言程序源码中的头文件: #include<stdio.h> #inclu ...
- 【C语言简单说】二:第一个C语言程序详解(3)
如有错误请给与纠正- 注:注意我们每一行代码后面的分号表示我们一句代码的结束,就像我们在写文字的时候的标点符号,一个句号表示一句话的结尾. 上一个教程只说明了第一个C语言程序源码中的main(其实等于 ...
- linux打开文件命令_详解Linux中3个文件查找相关命令
来自:民工哥技术之路 1.which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which 查看可执行文件的位置. whereis 查看文件的位置. ...
- windows服务器文件夹权限设置详解,windows服务器如何设置文件夹权限
windows服务器如何设置文件夹权限 内容精选 换一换 实际业务场景下,您可能会需要将文件临时分享给其他人或者将文件永久共享给其他人.临时分享:通过文件的临时URL直接将其分享给其他用户.文件分享强 ...
- 51单片机温度控制C语言程序详解,基于单片机的温度控制系统设计(附程序清单及原理图).doc...
您所在位置:网站首页 > 海量文档  > 电子工程/通信技术 > 电子设计 基于单片机的温度控制系统设计(附程序清单及 ...
- 双素数(质数)C语言程序详解
欢迎各位C语言学者和各位饱受大学计算机实验折磨的大学牲们前来围观 :) 本人水平有限,只希望浅薄的见解能给大家带来帮助! 同为计算机实验受害者,深切体会写不出的痛苦,为了同学们能顺利做出作业,遂写此文 ...
- linux typeof 头文件,C语言typeof详解
typeof 是 GNU C 标准里特有的扩展,标准的 ISO C 并没有这个关键字,所以在编译的时候不能加任何 ISO 的 C 标准选项,否则会报错.使用时加入-std=gnu90 即 GNU 的标 ...
最新文章
- 《CCNA无线640-722认证考试指南》——9.3节集中式架构
- 使用OpenCV与百度OCR C++ SDK实现文字识别
- ZooKeeper Java Example(官方例子)
- html鼠标悬停区域拉伸,html – :将鼠标悬停在具有边框半径的div上
- [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]
- mac怎么设置默认浏览器 mac默认浏览器设置方法
- Python-----规范化开发
- 后台MemoryStream图片流用ajax接收乱码问题
- php怎么截取数组最后元素,PHP如何获取数组最后一个元素的键和值?(图文+视频)...
- Linux中如何删除一个大文件
- PCL点云库:ICP算法
- MicroSoft官方——Sql Server2000相关下载页面及下载地址集合
- MT2503环境搭建步骤及注意事项
- 70行代码让你远离颈椎病,致所有的程序猿们
- 梦幻西游动画效果展示
- Java实现蓝桥杯VIP算法训练 预测身高
- 9款好用的SSH客户端软件推荐
- 技巧心得:在国家核心期刊发表文章应注意(三)
- 003-位运算异或“∧”使特定bit位翻转
- 蚂蚁森林公益合种带我种“大树”
热门文章
- java实现floyd统计天津地铁的网站距离
- 在Adobe Acrobat Pro DC中为什么注释会莫名其妙消失怎么办
- 计算机科技英语写作,计算机技术在英文写作课中的应用
- 被ddos攻击了怎么办,阿里云又太贵了
- linux的create命令,createuser命令
- Bat脚本实现定时演示PPT后自动关闭PPT
- 还原数据库提示 Unknown collation ‘utf8_general_mysql500_ci’解决方式
- 历年全国计算机技术与软件专业资格(水平)考试真题及答案汇总
- 微型计算机标致寄存器实验报告,微机原理实验报告(2013).doc
- Dictionary和IDictionary