EDN首页   博客首页

最新日志

发表于:2008-5-4 10:55:00
标签:gcc  编译  linux  开源  共产主义  版权  avr  arm  dsp  powerpc  mips  x86  

0

开源

现在我都基本不用windows了, 所以要找相应软件代替. 而且开源的软件有很多比windows下的更好.


住一方地, 吃一方饭, 喝一方水.

gcc是一个统一的编译开发平台, avr arm dsp powerpc mips x86 ....都可以用它来编译. 不用破解不用重新熟识平台, 而且gcc在效率上做得相当不错. 丰富的代码资源.

linux会成为日后嵌入式应用的主流. 主要是它丰富的库和应用资源, 方便开发, 减少开发成本和时间(这个是公司老板最想的), 当然它优秀的性能是很多工程师喜欢的(老板就不太关心了).

开源软件无版权问题. D版是双刃刀, 我们在别人D版你设计的东西时, 其实我们也在用D版或D版别人的东西. 中国有很多软件是死在D版上, 我们在抱怨做技术无钱途, 有没有想过它与D版是有很大联系的. 另外开源是已实现共产主义的一个实例. 开源体现的是把劳动变成人的第一需要, "物资"极大丰富(你copy一份, 别人不会少一份), 这是一种人类社会发展的主方向.

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(231)
发表于:2008-3-14 17:32:40
标签:无标签

0

新劳动法里的无固定合同,一定要执行好,否则日后ZF就麻烦了

新劳动法里的无固定合同,一定要执行好,否则日后ZF就麻烦了

  很多资本家总是以“无固定合同,是养懒人,是恢复旧社会的铁饭碗”为由,说新劳动法不好,要改。而事实上,这些资本家只是想把压榨进行到底,留个烂滩子给未来ZF,想拍拍屁股走人享受去。
  
  中国的劳动力出名廉价。所以外国资本家和国内资本家都在中国开公司设厂,使用这些廉价劳动力挣大钱。他们钱挣了不少,但工人给他们压榨了十年八年甚至二三十年。每月拿的却是基本工资,只能养活自己,就别说有存储养老了。ZF说,为了国家发展没法啦,他们的贡献他们的牺牲是有价值的!好了人总会老的,这群被称为劳民工的人民年纪大了,公司工厂视其为负累,合同到期不续期,他们就自动离职,不用补一分一毫。试想想,他们日后的日子怎么过。而他们跟着要面对的是生活费,医疗费等开支,谁来承担?有人没良心说:哪是他们的事了,谁叫他们以前这么笨!社会财富大部份由他们创造,老来却要面对病死饿死,你不觉得可悲吗?难道我们就这么没良心。不是的,我相信ZF也不希望这样,我相信G C D还是有点良知的,虽然有很多腐败份子在其中。但是如果由ZF全部承担这笔开销,为他们提供生活费和医疗费,ZF也会变得困难和吃力。再者这样不就是资本家拉屎,ZF来擦屁股。这可不行!ZF不会这么笨。如果把劳动力作为工具资源来看,哪就要实行用者自付了。实现另类的退休保险--无固定合同+解雇补尝。这样这些工人在被解雇时就能得到一笔补尝,日后的生活费和医疗费也有一点保障,如果再加上ZF的一点补助,日子就不会过得哪么可怜!所以不求ZF再有什么改进,但一定要把新劳动法做好,如实执行。为中国千千万万的贡献者提供一点保障,他们的牺牲他们的贡献已经很多很多了。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(224)
发表于:2008-3-11 10:47:21
标签:无标签

0

兴趣与钱途

如果讲“钱途”,选择电子行业的技术员,我是失败的。如果说爱好兴趣,还是不错的。

  以我自己为例,相比其它同学朋友,他们做生意,当公务员,做业务,很多都已经身家有几十万,有一两个还上几百万身家(对来我说,这个数比较难相像,但他们却都做到了,对自己真有点失望)。不是说电子行业不挣钱,这个行业还是挺好挣钱的。但是像我这样,打工上班,挣的都是固定工资,真的是太没出色了。
 
  说到爱好兴趣,我可以为让51跑个流水灯而兴奋;可以为让DSP播放mp3 ogg等而连续好几天坐在电脑前调程序。这些东西纯为了满足自己的喜好,只当它们是自己的玩具,玩得开心就行。它们给我带来快乐。就如同其它男人为了满足自己的喜好,可以大散金钱去桑拿(以前我去,有点小白的以为只是洗澡按摩,原来并非这样)。与他们相比,只是喜好不同。如果以道德来说,我比他们好点。但自己还是有些问题,哪就是多对机器少对人,比较封闭自己。

  以功利的现实来说,我是比较失败的了。所以有时也想改变,重新过别的生活。看有很多网友在问这个行业工作好找吗?工资高吗?如果你并不为兴趣,特别是从事纯设计开发,我劝你早点改行,其它行业会比这个好挣钱。有女网友说,女人做技术有这不好有哪不好。其实都不对,其实对男与女都没有什么偏坦。如果你为兴趣,女人还会更有优势,起码很多男网友会热心去帮你。

  对钱的态度是,它是一种“力量”载体。拥有得多,“力量”就大点,但并不代表会带来快乐。如果你追求的是拥有强大的“力量”,哪它就是你的兴趣(相信很多人都有这个兴趣)。如果不是,哪就放松一下,走出哪个枷锁,追求自己所希望的快乐!

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 原创

评论(0) | 阅读(264)
发表于:2008-2-27 14:56:29
标签:yuv  rgb  bf532  blackfin  汇编优化  

0

汇编,对你真是又爱又恨啊!

                                汇编,对你真是又爱又恨啊!

  以下是analog devices的dsp bf532的汇编程序。是YUV2RGB。现在基本上所有图像压缩都是先把RGB转为YUV,然后再进行变换压缩。解压时就要把YUV转回到RGB显示。每个像数都要做这样的处理。所以YUV与RGB的变换的效率直接影响编解码的速度。为了提高速度,很多人想出各种不同的方法,多数是在时间与空间上进行调配。而在一些带有特殊硬件的,就进行特别优化计算(下面的程序就是了)。这优化手段都有一个共同的特点--使用汇编进行编程。因为很难用C进行优化,说句难听的话,基本上是无能为力。看看现在的开源图像编解码器,无一不是使用汇编进行优化。在x86方面,mmx sse sse2 sse3 3DNOW 3DNOWext扩展指令集等基本上C编译器支持很少。虽说支持,但无法真正发挥他们的效能。以下面的为例说,它利用了DSP的地址发生器实现参数循环自动加载和无开销循环,利用了双乘法器同时进行两组16位数据乘法,并行多指令运行方式使它可同时加载参数为下一步计算准备并进行加减法。在保存结果的同时加载新数据,为下一组YUV计算做准备,实现流水线式运算。通过这些优化,使得它进行一个像数的运算只需要13个指令周期(包括取数据,计算,存数据)。比查表方式的计算还要快(网上流行的经典YUVtoRGB程序还要快),不得不佩服其智慧。引用一些人的话:是一门艺术。但是它的设计还可以进一步优化。启发来源于哪个经典YUVtoRGB程序,是根据YUV数据特点而想到的。因为很多解码后得到的数据是以I420或YV12的,简单地说就是四个像数的UV值是相同,只是Y不同。而下面的程序设计是每个像数YUV都不同。而整转换最主要是UV进行计算,而Y就只是进行加法。按这个想法,是不是可以提高三倍的计算速度呢?现在正开始研究如何实现了。

  以上讲了对汇编的爱,恨是。。。不用说就是自己不知如何用。感觉无从入手,自己能力不行。要加倍努力啊。。。

/*******************************************************************************
Copyright(c) 2000 - 2002 Analog Devices. All Rights Reserved.
Developed by Joint Development Software Application Team, IPDC, Bangalore, India
for Blackfin DSPs  ( Micro Signal Architecture 1.0 specification).

By using this module you agree to the terms of the Analog Devices License
Agreement for DSP Software.
********************************************************************************
Module Name     : YCbCrtoRGB.asm
Label Name      : __YCbCrtoRGB
Version         :   1.3
Change History  :

                Version     Date          Author        Comments
                1.3         11/18/2002    Swarnalatha   Tested with VDSP++ 3.0
                                                        compiler 6.2.2 on
                                                        ADSP-21535 Rev.0.2
                1.2         11/13/2002    Swarnalatha   Tested with VDSP++ 3.0
                                                        on ADSP-21535 Rev. 0.2
                1.1         02/28/2002    Raghavendra   Modified to match
                                                        silicon cycle count
                1.0         05/16/2001    Raghavendra   Original

Description     : In this function the range of Y, Cb and Cr is 0 to 255 and the
                  output range of R, G and B is also 0 to 255.

                  The formula implemented is as below:

                     R = Y + 1.402 (Cr - 128)     = Y +(Cr-128) + 0.402(Cr-128)
                     G = Y - 0.34414 (Cb - 128) - 0.71414 (Cr - 128)
                     B = Y + 1.772 (Cb - 128)     = Y + (Cb-128) + 0.772(Cb-128)

Prototype       : void YCbCrtoRGB(unsigned char input[], unsigned char out[],
                                  int N);

                     input[] - Input YCbCr array
                       out[] - Out put  array to store in RGB format
                           N - Number of inputs

Registers used  : A0, A1, R0-R7, I1, B1, L1, P0-P2, LC0.

Performance     :
                Code Size     : 164 bytes
                Cycle count   : 13*N + 31 cycles
                              : 96 Cycles (for N = 5)
*******************************************************************************/
.section    L1_code;
.global     __YCbCrtoRGB;
.align      8;
   
__YCbCrtoRGB:   [--SP] = (R7:4);
                            // Pushing the Registers on stack.
    SP += -8;               // SP modified to store coefficients
    I1 = SP;                //
    B1 = I1;                // Initialize base register B1 and I1  for circular
                            // buffer
    L1 = 8;                 // Initialize length for circular buffer
   
    R6.L = 0x3374;
    R6.H = 0xA498;          // Coefficients 0.402 and -0.34414  are stored in R6
    R7.L = 0xD3F4;
    P0 = R0;                // Address of input YCbCr array   
    R7.H = 0x62D0;          // Coefficients -0.71414 and 0.772  are stored in R7
   
    P2 = R1;                // Address of output array to store RGB values
    P1 = R2;                // Number of inputs N
   
    R4.L = 0xFF;                      
    R4 = PACK(R4.L,R4.L) || R0 = B[P0++](Z) || [I1++] = R6;
                            // Initialize R4.H to 255 and fetch Y value
                            // and store coefficients 0.402 and -0,34414 to
                            // temp. location
    R5 = R7-R7(NS) || R1 = B[P0++] (Z)|| [I1++] = R7;
                            // Clear R5 and fetch Cb  value and store
                            // coefficients
                            // -0.71414 and 0,772 in temp. location
    R7 = 128;               // Initialize R7 to 128
    R1 = R1 - R7(NS) || R2 = B[P0++](Z);
                            // R1 = Cb-128  and fetch Cr value
    R6.L = 0X7FFF;          // Initialize R6 to maximum positive value
   
    LSETUP(YCB_STRT, YCB_END) LC0 = P1;
YCB_STRT:
        R2 = R2 - R7;       // R2 = Cr-128
        A1 = R0.L * R6.L,   A0 = R0.L * R6.L || R3 = [I1++];
                            // Get Y value in A1 and A0  and fetch coefficients
        A1 += R2.L * R3.H, A0 += R2.L * R3.L || R3 = [I1++];
                            // Multiply (Cr -128) value with coefficients 0.402
                            // and -0.71414
        R2.L = (A0 += R2.L * R6.L);
                            // Add (Cr-128) value to A0 to get R value
        R2.H = (A1 += R1.L * R3.L), A0 = R1.L * R3.H;
                            // multiply  (Cb-128) with  -0.34414 and add to A1,
                            // A0= 0.772(Cb-128)
        R2 = MAX(R2,R5)(V); // check if value is within 0 and 255
        R2 = MIN(R2,R4)(V); // R2.L contains R value and R2.H contains B value
        A0 += R0.L * R6.L || B[P2++] = R2;
                            // Add Y value to A0 and store R value
        R2 = R2 >> 16 || R0 = B[P0++](Z);
                            // Leftshift to get B value  in lower half and fetch
                            // next Y data
        R3.L = (A0 += R1.L * R6.L) || B[P2++] = R2;
                            // Add (Cb-128) value to A0 and store B value
        R3 = MAX(R3,R5)(V) || R1 = B[P0++](Z);
                            // Check if value is within the limit 0 to 255 and
                            // fetch next Cb data
        R3 = MIN(R3,R4)(V) || R2 = B[P0++](Z);
                            // fetch next Cr value
YCB_END:
        R1 = R1 - R7(NS) || B[P2++] = R3;
                            // R1 = Cb-128 and store B data
   
    SP += 8;                // Clear temp. location
    (R7:4) = [SP++];        // Pop up the saved registers.
    RTS;
    NOP;                    //to avoid one stall if LINK or UNLINK happens to be
                            //the next instruction after RTS in the memory.
__YCbCrtoRGB.end:                           

点击此处查看原文 >>

系统分类: DSP   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(669)
发表于:2008-2-27 6:29:35
标签:无标签

0

做人就是要响当当的!

 做人就是要响当当的!你又如何看呢?你想吗?我就很想,每天总在思考如何实现! 

       今晚终于明白到,自己为何这几年来,一直很颓废,一无是处。连朋友同学都说我变了。是的,我真的变了,少了年少的
轻狂。记得以前,总有人说我自大,但现在没人说了。不是因为我证明给别人看,我不是自大,是我有实力的。而是我已经失
去实力,话语间也已经失去了哪一份狂。有人说这是好事,但现在发现,这是说明我的自信心和力量已经丢失。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(406)
发表于:2008-2-25 14:45:32
标签:t264  h.264  h264  bf532  移植  

0

弄好T264 for bf532编解码器的移植

开始时,打算从ffmpeg里提出解码器,但是发现需要改动的地方比较多,于是想偷懒了。在网上找一个中国人弄的开源项目
T264编解码器。因为它是纯C+x86优化的,所以编解码器的核心代码都很容易搞点(基本上弄好编译选项就OK了)。跟着就是
写移植测试代码。花了几天时间写简单界面,数据缓冲,优化一点函数(在C使用上根据BF532的特点做些优化)等。今天在我
的BF532板上运行正常。编码器还没试,估计问题不大。哈哈。。。
上传T264的代码给有兴趣的网友玩玩。跟着下来的任务是优化和修正它的编解码器的错误。因为这个项目已经停止,程序有很
多问题,虽然能运行。

t264-src-0.14.zip

点击此处查看原文 >>

系统分类: DSP   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(766)
发表于:2008-2-8 12:08:41
标签:无标签

0

wps仿msoffice 仿制与竖持的选择

  wps软件,现在以仿微软的office习惯作为卖点。也就是做到使用习惯与微软的office差不多(起码大部分功能和使用习
惯差不多)。这个你觉得如何?这段时间我转用wps,不再装微软的。处理一些自己日常的文档,完全没有不习惯的感觉。觉
得与以前使用office2003一样。不知你有没有使用过。你又觉得如何?
  有些人批评金山这种做法是丢脸,没有了自己的风格和原则,更无创新。但我个人认为,现在微软的office市场占有率太
高了,msoffice的使用成了整个中国对文书处理的潜标准。就连计算机考试都是以其为对象。只要与其不一样,用户反而说你
作的不好,而不论你设计多好多有创意。你又是如何看呢?
  再回头看我们做电子技术的,同样也有这个问题。我曾经接过别人的一个项目开发,以仿造为主。因为客户极力要求在使
用上作得与别人的一样(操控方式)。但是在我看来,别人的操控很差劲,烦锁而乱,所以做起来心里很不爽。暗骂客户为什
么这么保守。但回头看wps与msoffice事件,自己作为使用者,发现“上了贼船,下船难”。现在心里头有种,先仿制后求发
展的念头。有点像做屁股虫的感觉。

点击此处查看原文 >>

系统分类: 自由话题   |    用户分类: 无分类    |    来源: 无分类

评论(1) | 阅读(381)
发表于:2008-1-26 21:07:05
标签:gdb  调试  blackfin(bf532)  

0

gdb for blackfin(bf532) 使用感受

    近日在调试bf532的程序,不得不要用仿真器调试。无奈手上并没有支持它的jtag

仿真器,只有一个wiggler并口jtag线。在网上下载支持bf532的调试代理源码,使用

cygwin编译(排除一些错误后可以编译通过)。跟着来是着手gdb的调试。以前因为有

使用gdb调试arm的经验(更多的是使用insight debugger),还是能用了。但因不知如

何看寄存器,sram信息等,感到很X不方便,差点放弃使用。后来在网上查找别人的使

用经验,慢慢明白一些脚本和命令的使用。使用了近一天,基本功能的使用已经了解一

二了,越来越觉得它的强大和方便。与很多网友一样,总认为图形界面才够直观方便(

还是微软给害的)。可能我好点,因为接触linux比较多,所以也不是太抗拒命令界面

。还有一点好处是,gdb对很多芯片支持,转换线支持也多,源码开放,如果有兴趣,

自己也可以设计一条转换线。程序可以预下载(用别的方便下载,我的就是用自己写的

bootloader通过以太网下载,下载速度非常快,有500多k/s,不用受罪,调试时用慢速

的并口线就行)。GDB唯一缺点是,要你花点时间去好好学习。其它的都很好,特别与

GCC一样,统一开发平台。改用不同的芯片,你不用再去熟识另一环境,也不为花高昂

费用买转换线烦恼。更加不用为使用D版软件而烦恼(波解找不到,担心版权费等)。 


   为何开源的大多数是命令界面,不是他们创造不出漂亮的界面,也不是因为他们技

术低,而是因为觉得它更方便。使用简单的命令就能完成很多东西,再加上强大的脚本

功能,配置和备份更方便,使用也更方便。





*************************************************************************
实现以上命令效果的脚本如下,脚本很简单。
**************************************************************************

# PLL control 注解

set $PLL_CTL            = (unsigned short *) 0xffc00000 定义寄存器名和所对应的地址,数据类型
set $PLL_DIV            = (unsigned short *) 0xffc00004
set $PLL_STAT           = (unsigned short *) 0xffc0000c
set $PLL_LOCKCNT        = (unsigned short *) 0xffc00010


define dump_pll 字义脚本命令名称
printf "------- PLL -------\n" 有点像C语言的输出打印
set $p = *$PLL_CTL 定义变量p,把PLL_CTL寄存器的值读出放在p里。
set $d = *$PLL_DIV 定义变量d,把PLL_DIV寄存器的值读出放在d里。
printf "PLL_CTL      : 0x%04x\n", $p 打印出p的值
printf "PLL_DIV      : 0x%04x\n", $d    打印出d的值
printf "PLL_STAT     : 0x%04x\n", *$PLL_STAT 打印出寄存器PLL_STAT的值
printf "PLL_LOCKCNT  : 0x%04x\n\n", *$PLL_LOCKCNT 打印出PLL_LOCKCNT的值。
set $mul = (($p >> 9) & 0x3f) 定义变量mul,把p经过运算的结果给于它。其实下面的都不用注
解了,估计你也开始懂了。

if $mul == 0
set $mul = 64
end
set $mul = (float) $mul / (($p & 1) + 1)
printf "VCO multiplier: %.1f\n", $mul
printf "Sys clock multiplier: %f\n", $mul / ($d & 0xf)
printf "Core clock multiplier: %f\n", $mul / (1 << (($d >> 4) & 0x3))
end

******************************************************************************************

点击此处查看原文 >>

系统分类: DSP   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(668)
发表于:2008-1-25 1:08:35
标签:gcc  win  windows  blackfin(bf532)  

0

使用gcc for win 的blackfin(bf532) 笔记

        近日终于下定决心去弄好blackfin 的gcc for win。在blackfin.uclinux.org上的版本,下载回来后安装,发现不知怎么弄好。没有make,不能直接编译makefile管理的程序。于是从winavr里取出make,放到elf\bin里,发现可行(同时也缺少了ar生成.a库,同样copy一份就行了)。编译系统弄好了,跟着如何弄呢?网上有个shell的gcc例程,于是尝试编译,发现不少错。于是慢慢修正,直到无错并下载调试。经过努力后,例程终于能用了。但是发现程序很乱,它的link脚本和makefile也写得不好。于是另一工作也要开始,哪就是根据我的系统,重写link脚本、makefile和start.S代码。link脚本在其基础上修整而成,makefile则从winavr的makefile模板里改得,使得更方便使用。start.S代码因为原本的不使用cache和堆,所以也要修改,增加cache和堆的初始化。最后还是把例程弄好了。迟点整理好把例程上传。

点击此处查看原文 >>

系统分类: DSP   |    用户分类: 无分类    |    来源: 无分类

评论(0) | 阅读(887)
总共 , 当前 /