24小时热门版块排行榜    

查看: 167  |  回复: 1
【奖励】 本帖被评价1次,作者sdlj8051增加金币 0.5
当前主题已经存档。

sdlj8051

金虫 (著名写手)


[资源] [转贴]真情分享!(BlackFin相关,其它平台也适用)

在BlackFin上面关全局中断其实是很麻烦的事.它不是清除或者设置一个全局中断使能位,而是把core中断屏蔽寄存器所有位都清成0,这个时候你需要设置一个变量来保存以前在core中断屏蔽寄存器中的值,以便后面恢复,这里我给出前段时间写的两个函数。由于BlackFin的特殊硬件结构,只要你想,可以优化一下它,使用能并行执行的指令。

static inline void disable_interrupt(void *ptr)
{
    asm("P0 = R0;";
    asm("CLI R0;";
    asm("[P0] = R0;";
     
}


static inline void enable_interrupt(void *ptr)
{
    asm("P0 = R0;";
    asm("R0 = [P0];";
    asm("STI R0;";
     
}


    另外,在系统设计中,我们经常会用到memcpy函数,尤其是在管理循环缓存时(这时可能就没有DMA能给你使用了,呵呵!)。移动的数据量很大,这时高效率的memcpy就很是重要了。对于SDRAM-->SDRAM的数据搬移,当需要memcopy函数传输超过35个字的时候,先把SDRAM中的数据搬到L1中暂存,然后搬到目的SDRAM中,这样效率会更高,这里我提供了一个在C语言级别优化memcpy函数的例子:

void *memcopy(void *dest, const void *src, int size)
{
    #define L1_BUFF 2048
    long temp_array[L1_BUFF/sizeof(long)];
     
    while(size/L1_BUFF){
        memcpy(temp_array, src, L1_BUFF);
        memcpy(dest, temp_array,L1_BUFF);
        size -= L1_BUFF;
    }
     
    memcpy(temp_array, src, size);
    memcpy(dest, temp_array,size);
     
       return dest;
}
    熟悉C的都知道,定义的局部变量数组是在堆栈里面分配内存的,另外为了函数调用和中断的快速上下文切换的快速效率着想,堆栈一般是放在CPU内部的sram里面的,访问速度是core clk,所以temp_array就是在sram里面分配内存的。在使用循环缓存的管理函数的系统中,调用memcopy函数的函数一般都是比较靠顶层的函数,所以你使用了这个函数也不会对你构建的系统的堆栈空间提出更多的要求。(例如我前段日子做的MP4播放器,就几乎没有影响到原来的堆栈空间的size)。下面我来说说这段程序的设计原理: 有BF533硬件参考书的人可以翻到7-11的表,说到:16-bit SDRAM——>L1 Data memory的搬移n字的数据需要n+14个系统时钟周期,而反过来搬移n个字需要n+11个系统时钟周期,SDRAM——>SDRAM n字数据搬移需要10+(17n/7)个系统时钟周期。看到这里大家可以发现,SDRAM到SDRAM的n个字的数据搬移比L1到SDRAM和到L1的数据搬移同样n个字所花的系统时钟周期的总和还多,这样我们可以很方便的建立一个不等式:
    (17/7)n+10 > 2n+25
得n > 35时,对于SDRAM至SDRAM的数据搬移,改成先SDRAM至L1,然后L1至SDRAM的搬移效率会提高一些。这是理论值,实际的有些偏差。

    为什么会出现这种情况呢?感兴趣的可以去查看SDRAM的原理中的突发模式,这里我就不多说了。下面给出我的测试数据:

CCLK=594MHz,SCLK=118.8MHz

在传输10000字节时memcpy函数花费的时间是memcopy的1.92倍;
1000字节时为1.12倍,传输10000字节时更是在2.28倍之多。

可见熟悉了硬件原理,优化真的就是无止尽!
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
简单回复
sinapdb2楼
2007-01-07 20:41   回复  
 
相关版块跳转 我要订阅楼主 sdlj8051 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 274求调剂 +3 cgyzqwn 2026-03-01 7/350 2026-03-02 10:38 by lature00
[基金申请] 成果系统访问量大,请15分钟后再尝试。由此给您造成的不便,敬请谅解。 +4 xhuama 2026-03-02 4/200 2026-03-02 10:28 by 19850826zhao
[考研] 化工270求调剂 +6 什么名字qwq 2026-03-02 6/300 2026-03-02 10:21 by 黑!在干嘛
[考研] 0856材料调剂 +4 沿岸有贝壳OUC 2026-03-02 4/200 2026-03-02 10:19 by 公瑾逍遥
[考研] 材料学调剂 +10 提神豆沙包 2026-02-28 12/600 2026-03-02 09:26 by 李老师!
[考研] 材料工程269求调剂 +3 白刺玫 2026-03-02 3/150 2026-03-02 09:25 by 一休哥FU
[考研] 282求调剂 +3 2103240126 2026-03-02 4/200 2026-03-02 09:25 by 汪!?!
[考研] 279求调剂 +3 dua1 2026-03-01 4/200 2026-03-02 00:23 by 大脸蛋子
[考研] 江苏省农科院招调剂1名 +3 Qwertyuop 2026-03-01 3/150 2026-03-01 23:18 by aaadim
[考研] 265分求调剂不调专业和学校有行学上就 +6 礼堂丁真258 2026-02-28 8/400 2026-03-01 22:50 by jian_
[基金申请] 成果系统访问量大,请一小时后再尝试。---NSFC啥时候好哦,已经两天这样了 +4 NSFC2026我来了 2026-02-28 4/200 2026-03-01 22:37 by 铁门栓
[考研] 0856调剂 +5 刘梦微 2026-02-28 5/250 2026-03-01 22:30 by wang_dand
[考研] 275求调剂 +3 明远求学 2026-03-01 3/150 2026-03-01 22:29 by 刘兵
[考研] 0856求调剂285 +10 吕仔龙 2026-02-28 10/500 2026-03-01 21:37 by 公瑾逍遥
[考研] 295求调剂 +7 19171856320 2026-02-28 7/350 2026-03-01 18:54 by 18137688336
[考研] 328求调剂 +3 aaadim 2026-03-01 5/250 2026-03-01 17:29 by njzyff
[考研] 311求调剂 +6 亭亭亭01 2026-03-01 6/300 2026-03-01 15:41 by 324616
[考研] 材料284求调剂,一志愿郑州大学英一数二专硕 +10 想上岸的土拨鼠 2026-02-28 10/500 2026-03-01 14:12 by yc258
[考研] 寻找调剂 +4 LYidhsjabdj 2026-02-28 4/200 2026-03-01 10:56 by sunny81
[考研] 304求调剂 +3 52hz~~ 2026-02-28 5/250 2026-03-01 00:00 by 52hz~~
信息提示
请填处理意见