8.4(学习笔记)
- 格式:docx
- 大小:84.84 KB
- 文档页数:8
本来是x<100,y<100,z<100,k<100d的但是CCS上跑的时间太长,修改为上图所示。 显示:时间,运算步数;
下图是优化过后的: 时间,运算步数; CCS中统计程序运行时间(CCS3) 文档链接地址:http://blog.csdn.net/henhen2002/article/details/4552751
给出来的源程序缺少hello.h头文件,然后程序也是不完整,添加了hello.h文件修改了源程序不通过的地方。 源文档缺少的地方: 1,hello.h文件如下: 2,,结构体初始化时出错,修改如下: 开始操作: 1. 选择File→Reload Program。 2. 选择Profiler→Enable Clock。标记“√”出现在Profile菜单Enable Clock项的旁边,该选项使能就可计算指令周期。
3. 在Project View中双击文件hello.c. 4. 选择View→Mixed Source/ASM,灰色的汇编指令紧随在C源代码行后面。 5. 将光标放在下述行上: puts(“hello world!/n”); 6. 点击工具栏按钮 (Toggle Profile_point),该C源代码行和第一条汇编指令被用绿色加亮。
7. 向下移动滚动条,将光标停在以下行上:for (i = 0; i8. 点击工具栏按钮或者在该代码行上点击右键并从弹出菜单中选择Toggle Profile Pt。
有关测试点的统计数据报告显示自前一个测试点或程序开始运行以来到本测试点所需的指令周期数。在这里,第二个测试点的统计数据报告显示自puts()开始执行到该测试点所需的指令周期数。
9. 选择Profile→View Statistics,窗口底部出现一个显示测试点统计数据的区域。
10. 通过拖拽该区域的边缘可调整其大小。
11. 点击(RUN)工具栏按钮 或按F5键运行该程序并在提示窗口中键入一串字符。
12. 注意对第二个测试点所显示的指令周期数,它应该大约为2800个周期(显示的实际数目可能会变化),这是执行puts()函数所需的指令周期数。由于这些指令只执行了一次,所以平均值、总数、最大值和最小值都是相同的。
注:目标系统在测试点处于暂停状态 只要程序运行到一个测试点,它就会自动暂停。所以,当使用测试点时,目标系统应用程序可能不能满足实时期限的要求。
13. 执行以下步骤释放测试期间所占用的资源: a 进入profiler菜单并撤消 Enable Clock使能。 b 点击鼠标右键从弹出菜单中选择Hide从而关闭Profile Statistcs窗口。 c 进入profiler→profile_points, 选择Dlete All并点击OK。 d 进入View菜单,并撤消 Mixed Source/ASM使能。
实验一 关于本程序的整体说明: 本程序的目的是利用5402进行处理,在屏幕上显示“hello,world!” 其中使用了 #ifdef FILEIO 来选择是否输入字符串。 流程图如下:
定义了 FILEIO 么? | / Y / N 输出“hello,world!” 输出“hello,world!” | | 要求输入字符串 OVER | 输出读入字符串大小 | OVER
/* ======= hello.h ========== 头函数 struct PARMS { /*头函数中仅定义了一个结构体 PARMS*/ int Beta; int EchoPower; int ErrorPower; int Ratio; struct PARMS *Link; }; ======================= */ /* ======== hello.c ======== */ #include #include "hello.h" #define BUFSIZE 30 /*定义BUFSIZE(缓冲空间)为30*/ struct PARMS str = /*全局变量是一个结构体 str*/ { 2934, /*Beta = 2934*/ 9432, /*EchoPower = 9432*/ 213, /*ErrorPower = 213*/ 9432, /*Ratio = 9432*/ &str /*Link 是指向str自己的指针。本程序中并未使用*/ }; /*PARAMS是在hello.h中定义的结构类型*/ /* * ======== main ======== 主函数 */ void main() { #ifdef FILEIO /*第一次运行程序时,FILEIO没有定义,此处不执行,只执行puts()一句。*/ int i; char scanStr[BUFSIZE]; /*输入字符存入scanStr数组中*/ char fileStr[BUFSIZE]; /*存储从文件中读出的内容*/ size_t readSize; /* size_t 是在stdio.h中定义的无符号整型,用来存储输入字符数目*/ FILE fptr; /*FILE是在stdio.h中定义的一结构变量,用来记录控制输入输出流的所有信息,fprt是文件指针*/ #endif /* 向标准输出设备写一字符串*/ puts("hello world! ");
#ifdef FILEIO /*清除字符型数组*/ for (i = 0; i < BUFSIZE; i++) { scanStr[i] = 0 /* 预置的语法错误(少一个“;”)*/ fileStr[i] = 0; }
/* 从输入设备读入一字符串,并存入scanStr数组中 */ scanf("%s", scanStr);
/*在主机上打开一文件,然后向文件写入刚才的字符串 */ fptr = fopen("file.txt", "w"); fprintf(fptr, "%s", scanStr); fclose(fptr);
/* 在主机打开一文件,然后从中读入字符串 */ fptr = fopen("file.txt", "r"); fseek(fptr, 0L, SEEK_SET); /*SEEK_SET是stdio.h中通过宏定义定义的常量0x0000*/ /*此句如果没有,运行结果不改变,此处为了保证程序的规范(修改方便)*/ readSize = fread(fileStr, sizeof(char), BUFSIZE, fptr); /*获取文件大小,即输入字符数目*/ printf("Read a %d byte char array: %s ", readSize, fileStr); /*输出“Read a ??(数字) byte char array: ??????(字符串)”*/ fclose(fptr); /*关闭文件*/ #endif }
实验二 /* ======== hello.c ======== */
/* DSP/BIOS 头文件*/ #include #include
/* 被配置工具创建的对象*/ extern far LOG_Obj trace;
/* ======== main ======== */ Void main() { LOG_printf(&trace, "hello world!"); /*本程序简单,仅有一句话意思很明了了。*/
/* 返回后进入DSP/BIOS闲置循环 */ return; } 实验三
/* ======== volume.h ======== */ #ifndef __VOLUME_H #define __VOLUME_H#ifndef TRUE #define TRUE 1 #endif #define BUFSIZE 0x64 #define FRAMESPERBUFFER 10 #define MINGAIN 1 #define MAXGAIN 10 #define MINCONTROL 0 #define MAXCONTROL 19 #define BASELOAD 1 #endif /* __VOLUME_H */ /*一些宏定义,定义了一些常量*/
#include #include "volume.h"
/*定义全局变量 */ int inp_buffer[BUFSIZE]; /* 设置输入输出数据缓冲区 inp_buffer 和 out_buffer 大小为 0x64*/ int out_buffer[BUFSIZE]; int gain = MINGAIN; /* 增益设置,MINGAIN代表1,在volume.h中定义的 */ unsigned int processingLoad = BASELOAD; /*BASELOAD大小为1,也是在volume.h中定义的*/ extern void load(unsigned int loadvalue); /*该函数是一个汇编的处理函数,具体分析见后文*/ static int processing(int *input, int *output); static void dataIO(void); /*定义了三个函数load、processing、dataIO*/
/* ======== main ======== */ void main() { int *input = &inp_buffer[0]; /*指针赋初值*/ int *output = &out_buffer[0]; puts("volume example started "); /*输出一句话*/ /* 下面是一个无限循环 */ while(TRUE) { /* 使用探测器来连接住机上的文件. */ dataIO(); /*调用dataIO函数,实际上,dataIO是一个空函数。*/ processing(input, output); /*调用processing函数*/ } /*dataIO是一个空函数,实际上主函数完成的是对processing函数的无限次调用。*/ }
/* ======== processing ======== * 对输入信号进行数字信号处理变换. 参数:输入输出缓冲区的地址 */ static int processing(int *input, int *output) /*函数processing*/