DSP 知识点
1:自定义数据段
#pragma DATA_SECTION(symbol,".section")
Int32 symbol[LENGTH];
2:前几天遇到一个问题。dsp在执行某一块算法执行的时间太长达到100多ms。这个时间后面通过设置ccs的一些优化选项。减少到42ms。这还是不能达到我们的需求。后来知道我没打开cache。所以执行的时间很长。
在网上找了好久也没一个确切的办法打开cache。因此在此我详细的给出打开cache的方法。希望能给菜鸟们一点帮助。我也是菜鸟。大家一起进步。如果又不对的地方请老鸟们指正,谢谢。
#define L2CFG *(unsigned int*)(0x01840000) //6747 L2配置缓冲区寄存器宏定义
#define L1PCFG *(unsigned int*)(0x01840020) //6747 L1程序配置缓冲区寄存器宏定义
#define L1DCFG *(unsigned int*)(0x01840040) //6747 L1数据配置缓冲区寄存器宏定义
void init_cache(void)
{
L1PCFG = 4;
L1DCFG = 4;
L2CFG = 0x01010002;
}
CMD文件
-l rts64plus.lib
-l C6747bsl.lib
-stack 0x00001000 /* Stack Size */
-heap 0x00001000 /* Heap Size */
MEMORY
{
VECS: o = 0x80000000 l = 0x00000f00
ARMRAM: o = 0xFFFF0080 l = 0x00001f80
DSPL2RAM: o = 0x00800000 l = 0x00040000
DSPL1PRAM: o = 0x00E00000 l = 0x00008000
DSPL1DRAM: o = 0x00F00000 l = 0x00008000
DSPL2RAM2: o = 0x11800000 l = 0x0003FFFF
DSPL1PRAM2: o = 0x11E00000 l = 0x00008000
DSPL1DRAM2: o = 0x11F00000 l = 0x00008000
SHAREDRAM: o = 0x80000f00 l = 0x0001ffff
SDRAM: o = 0xC0000000 l = 0x20000000
}
SECTIONS
{
".vectors" > VECS
.bss > DSPL2RAM
.cinit > DSPL2RAM
.cio > DSPL2RAM
.const > DSPL2RAM
.stack > DSPL2RAM
.sysmem > DSPL2RAM
.text > DSPL2RAM
.switch > DSPL2RAM
.far > DSPL2RAM
.calcbuffer > DSPL2RAM
.compxbuf > DSPL2RAM
.bufs > SHAREDRAM
.audiobuffer > SDRAM
.buffertemp > SDRAM
.compxbuffer > SDRAM
}
The DATA_SECTION pragma allocates space for the symbol in a section called section name.
The syntax for the pragma in C is:
#pragma DATA_SECTION (symbol, "section name");
定义一个数据段:
段名为: "section name"
段的内容在: symbol 里
在CCS编程中,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有的时候需要把变量放在一个特定的空间内,我们应该如何操作呢,CCS提供了如下的两个指令
#pragma CODE_SECTION
#pragma DATA_SECTION
其中data_section是针对数据空间的,code_section是针对程序空间的,具体的使用办法是
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferB[512];
在.cmd文件中建立对应的section就可以使用了。
注意:在使用#pragma DATA_SECTION时,应该先开辟一个空间,即:#pragma DATA_SECTION(bufferB, ”my_sect”),然后再定义该空间的大小:char bufferB[512];
#pragma,是一个编译控制指令,可以在编译时动态地调整编译选项,这种指令在不同的编译系统中是不同的.
#pragma DATA_ALIGN( symbol,constant)
指令的作用是:排列排列symbol到constant指点的列边界上.
#pragma DATA_ALIGN( rxdata_stream, 128)
就是让rxdata_stream地址的末尾7位是0(二进制地址),就是128字节对齐。
对齐的目的,一般是位了CACHE读写外存。
如果一个CACHE的line是128字节。这样,如果数据128字节对齐,那么取一个128字节的数据,只使用一个CACHE行就够了。
char efd;
#prgma DATA_ALIGN(efd, 8)
编译时一定会把efd变量的地址安排在8字节对齐的位置上,也即efd地址的低3位一定为0。
自定义段
#pragma DATA_SECTION(函数名或全局变量名,"用户自定义在数据空间的段名");
#pragma CODE_SECTION(函数名或全局变量名,"用户自定义在程序空间的段名");
不能在函数体内声明。必须在定义和使用前声明
#pragma可以阻止对未调用的函数的优化
#pragma DATA_ALIGN( symbol,constant)
指令的作用是:排列排列symbol到constant指点的列边界上.
例如
#pragma DATA_ALIGN( rxdata_stream, 128)
就是让rxdata_stream地址的末尾7位是0(二进制地址),就是128字节对齐。
对齐的目的,一般是位了CACHE读写外存。
如果一个CACHE的line是128字节。这样,如果数据128字节对齐,那么取一个128字节的数据,只使用一个CACHE行就够了。
#prgma DATA_ALIGN(efd, 8)
编译时一定会把efd变量的地址安排在8字节对齐的位置上,也即efd地址的低3位一定为0。
3:疑问
1:我把程序中的一个数组定义到DSPL2RAM段。不知道怎么回事。该数组的值始终全部为0。定义到SHAREDRAM或者SDRAM就正常了。
2:同样一个程序。昨天那一块算法执行时间为6ms。今天却跑了18ms。很奇怪。谁能帮我解释一下呀?
DSP 知识点的更多相关文章
- DSP开发资源总结,经典书籍,论坛
OMAP4开发资源总结: 一.TI OMAP4官网介绍: http://www.ti.com.cn/general/cn/docs/wtbu/wtbuproductcontent.tsp?templa ...
- 2019t1_sumdoc_list.txt aa.docx acc baidu v2 sbb.docx Acc jindon v2 sbb.docx assetsList.html Atiitt 日本刑法典读后笔记.docx Atiti 遇到说花心的时候赞美应对.docx Atitit lesson.docx Atitit malye主义、mzd思想和dsp理论的区别和联系.docx Ati
2019t1_sumdoc_list.txtaa.docxacc baidu v2 sbb.docxAcc jindon v2 sbb.docxassetsList.htmlAtiitt 日本刑法典读 ...
- 【知识点】H264, H265硬件编解码基础及码流分析
前言 音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,start code以及基本的工作原理,而大 ...
- DSP开发笔记一
前言 本笔记首先对DSP的特点及其选型进行了描述,然后重点记录DSP开发环境的搭建及基础工程示例,对为DSP开发新手有一定的指导作用. 1. DSP简介 1.1 主要特点 在一个指令周期内可完成一 ...
- VoIP语音处理流程和知识点梳理
做音频软件开发10+年,包括语音通信.语音识别.音乐播放等,大部分时间在做语音通信.做语音通信中又大部分时间在做VoIP语音处理.语音通信是全双工的,既要把自己的语音发送出去让对方听到,又要接收对方的 ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
- ASP.NET MVC开发:Web项目开发必备知识点
最近加班加点完成一个Web项目,使用Asp.net MVC开发.很久以前接触的Asp.net开发还是Aspx形式,什么Razor引擎,什么MVC还是这次开发才明白,可以算是新手. 对新手而言,那进行A ...
- UWP开发必备以及常用知识点总结
一直在学UWP,一直在写Code,自己到达了什么水平?还有多少东西需要学习才能独挡一面?我想对刚接触UWP的开发者都有这种困惑,偶尔停下来总结分析一下还是很有收获的! 以下内容是自己开发中经常遇到的一 ...
- C#高级知识点&(ABP框架理论学习高级篇)——白金版
前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...
随机推荐
- 关于Laravel 迁移数据库的问题
今天在Homestead 中用 php artisan migrate 迁移数据库时出现了拒绝的情况: ***之后发现只要修改项目文件夹下面的database.php 和.env 文件中的数据库配置, ...
- id特性
每一个HTML元素都可以附带id特性,id特 <!DOCTYPE html> <!-- To change this license header, choose License H ...
- linux下mysql 5.7.22 安装
二进制安装 1.下载https://dev.mysql.com/downloads/mysql/5.6.html#downloads 2.官方文档https://dev.mysql.com/doc/r ...
- Linux用户组相关指令
⒈增加用户组 ①groupadd 用户组名 ⒉删除用户组 ①groupdel 用户组名 ⒊修改用户所在的用户组 ①usermod -g 用户组 用户名 ★用户和用户组的相关文件 ①/etc/passw ...
- SpringBoot使用thymeleaf模板引擎
(1).添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...
- Codeplex最流行25个开源项目
1. VMukti富媒体协作平台 2. Microsoft SQL Server Product Samples: Engine 3. Patterns & Practices: Enterp ...
- ubuntu16.04安装opencv2.4.13
1.更新 sudo apt-get update sudo apt-get upgrade 2.安装关联库 2.1 搭建C/C++编译环境 sudo apt-get install build-ess ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- 如何在Linux下写无线网卡的驱动【转】
转自:http://www.crifan.com/files/doc/docbook/linux_wireless/release/html/linux_wireless.html 版本:v0.3 H ...
- MISC混杂设备 struct miscdevice /misc_register()/misc_deregister()【转】
本文转自:http://blog.csdn.net/angle_birds/article/details/8330407 在Linux系统中,存在一类字符设备,他们共享一个主设备号(10),但此设备 ...