이번에는 조건부 분기문을 한번 보도록 하겠습니다.
C 코드는 아래와 같습니다.

typedef long TYPE;

TYPE foo( TYPE i , TYPE j )
{
  if ( i > j ) return i ;
  else  return j;
}


나중에 타입을 바꿀 경우를 생각해서 typedef로 선언했습니다.
비교해서 큰 값을 반환하는 것이 요지입니다.

        .file   1 "test.c"
        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 1
        .text
        .align  2
        .globl  foo
        .set    nomips16
        .ent    foo
        .type   foo, @function
foo:
        .frame  $sp,0,$31               # vars= 0, regs= 0/0, args= 0, gp= 0
        .mask   0x00000000,0
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro

        slt     $2,$5,$4
        movz    $4,$5,$2
        j       $31
        move    $2,$4

        .set    macro
        .set    reorder
        .end    foo
        .size   foo, .-foo
        .ident  "GCC: (GNU) 4.4.2"


$4와 $5를 비교해서 그 결과를 $2에 저장합니다.
여기서 새롭게 등장하는 명령어가 movz입니다. 이 명령어는

if (GPR(rt) == 0 then rd <- rs

인 명령어입니다. 즉 주어진 값이 0 이면 이동 동작을 수행하라는 명령이죠.

위의 코드를 다시보면
slt 명령으로 set less then으로 세팅하고, 그 결과가 0 이면 $5를 $4로 아니면 그대로 진행합니다.
최종적으로 $4를 반환 레지스터인 $2로 이동함으로서 그 반환 값을 설정하도록 되어 있습니다.

ARM은 Instruction에 Condition Code를 넣어서 동작할 수 있도록 한 반면
MIPS는 Condition Code를 만들지 않고, 명령어를 운용하여서 분기문 내지 판단문을 처리할 수 있도록 하였는데, 위의 코드에서는 비교문을 SLT라는 명령어로 해결해서 다음 명령어에서 분기문의 효과를 내도록 되어 있습니다.

이럴때는 ARM Style이 더 낳을 것 같습니다.




2009/12/30 17:09 2009/12/30 17:09
GUNDAM 이 작성.
TAGS , ,

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
앞서에 이어서  64비트 덧셈 코드를 테스트 해봅니다.

1. 64비트 덧셈

long long  foo( long long i ,  long long  j)
{
  return i + j ;
}

../local/bin/mips-elf-gcc -S test4.c -o test4.S -O2 -march=mips32

        .file   1 "test4.c"
        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 1
        .text
        .align  2
        .globl  foo
        .set    nomips16
        .ent    foo
        .type   foo, @function
foo:
        .frame  $sp,0,$31               # vars= 0, regs= 0/0, args= 0, gp= 0
        .mask   0x00000000,0
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro

        addu    $3,$7,$5
        addu    $4,$6,$4
        sltu    $2,$3,$7
        j       $31
        addu    $2,$2,$4

        .set    macro
        .set    reorder
        .end    foo
        .size   foo, .-foo
        .ident  "GCC: (GNU) 4.4.2"


64비트 덧셈은 뭐, 좀 쉽습니다.

             [$4 : $5]
   +       [$6 : $7]
-------------------
   

재미있는것은 캐리를 발생시키는 방식인데요 위의 어셈블러 코드를 보면
sltu가 있습니다. 이것은 두 수를 비교해서 앞에 수가 작으면 1을 세팅하다는 의미입니다.
캐리를 직접 계산하는 것으로 사용하는 명령어입니다.

비교하는 수를 보면 $5+$7을 더한 결과값 $3과 그 인자인 $7을 비교하는 것입니다.
즉 더해서 얻는 값이 인자보다 작다면 이는 자리수가 한자리 커졌다는 것을 의미합니다.

쉽게 정리하면
     5
+  7
-----
1  2

입니다. 이때 비교 하는 것은 7과 결과 2 입니다. 결과값 2가 7보다 작으므로 캐리가 발생한것으로 알 수 있다는 의미입니다.  (그냥 캐리를 발생시키는게 더 빠를것 같기도 합니다.)


2009/12/29 14:58 2009/12/29 14:58
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
굳은 머리 돌리기 위한 간단한 어셈블러 해석입니다.
오래간만에 어셈블러 한번 볼려고 하니 힘드네요
MIPS에서 어셈블러와 C의 연결을 볼려고 간단한 테스트를 해보는 것을 정리하였습니다.

1. 간단한 함수


int foo( int i , int j )
{
  return i * j;
}

위 코드를 컴파일 해서 어셈블러를 확인합니다.

mips-elf-gcc -S -march=mips32 -O2 test.c -o test.S

그러면

                            LIBCFLAGS="-g -O2 ${flags}" \
        .file   1 "test.c"
        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 1
        .text
        .align  2
        .globl  foo
        .set    nomips16
        .ent    foo
        .type   foo, @function
foo:
        .frame  $sp,0,$31               # vars= 0, regs= 0/0, args= 0, gp= 0
        .mask   0x00000000,0
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro

        j       $31
        mul     $2,$5,$4

        .set    macro
        .set    reorder
        .end    foo
        .size   foo, .-foo
        .ident  "GCC: (GNU) 4.4.2"

과 같은 코드를 얻을 수 있습니다.

코드를 보면 jump 다음에 mul을 하는 것을 알 수 있습니다. 즉 delay slot을 기본적으로 architecture에서 가지고 가므로, jump 명령이 먼저와도 분기를 마칠때에는 레지스터에 값이 기록되게 되어 있습니다.

리턴되는 값은 2번 레지스터에 기록되고
인자는 4번과 5번으로 기록됩니다.

2. unsigned 64비트 곱셈 test


unsigned long long  foo( unsigned long long i , unsigned long long  j)
{
  return i* j ;
}

../local/bin/mips-elf-gcc -S test3.c -o test3.S -O2 -march=mips32
으로 컴파일해서 결과를 보면 아래와 같습니다.

        .file   1 "test3.c"
        .section .mdebug.abi32
        .previous
        .gnu_attribute 4, 1
        .text
        .align  2
        .globl  foo
        .set    nomips16
        .ent    foo
        .type   foo, @function
foo:
        .frame  $sp,0,$31               # vars= 0, regs= 0/0, args= 0, gp= 0
        .mask   0x00000000,0
        .fmask  0x00000000,0
        .set    noreorder
        .set    nomacro

        mul     $2,$4,$7
        multu   $7,$5
        mflo    $9
        mfhi    $8
        mul     $3,$6,$5
        addu    $2,$3,$2
        addu    $2,$2,$8
        j       $31
        move    $3,$9

        .set    macro
        .set    reorder
        .end    foo
        .size   foo, .-foo
        .ident  "GCC: (GNU) 4.4.2"

입력이 64비트 두개의 값이므로,
4개의 레지스터가 입력으로 들어와야 합니다.


$4,
$7
$5
$6이 입력이 됩니다.

64비트 입력은 두개의 레지스터이고 두 64비트의 곱셈은

              A B
x            C D
----------------
         [B x D]
    [A x D]
    [B x C]
[A x C]
-------------
Result

입니다.

그런데 결과값이 64비트만 필요하므로 [A x C]는 불필요 합니다. 따라서 곱셈이 3번만 하면됩니다.
위의 코드에서 곱셈이 3번 나오는 이유입니다.

$7과 $5를 곱하면 그 결과가 Hi,Lo레지스터에 기록됩니다.
이를 $8,$9에 옮겨 두게 됩니다. [B x D]가 $8 $9입니다.

$4 $7을 곱한것은 그 결과로 하위 32비트가 필요하므로 [A x D] 가 됩니다. 따라서 공통으로 쓰이는 $7이 D임을 알수 있고, [ A : B ]는 [$4,$5]임을 알수 있습니다.
나머지 입력인 $6이 [ $6 : $7 ] 입니다.

$6 x $5를 한 하위 32비트를 사용하게 되므로 이 값이 $3에 들어갑니다.

최종적으로는 결과값의 상위 32비트에 해당되는 값은 각각의 덧셈의 결과이므로
$2 + $3 + $8이 그 결과값인 상위 32비트입니다.

이 결과값이 $2에 그리고 [BxD]의 결과값이 $3으로 옮기게 되므로 최종 결과치는
[$2:$3]이 됩니다.




2009/12/26 09:04 2009/12/26 09:04
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
우르과이 출신의 페더 알바레스 라는 프로듀서가 인터넷에 공개한 동영상입니다.

PANIC ATTACK이라는 제목으로 해서 목요일날 공개했는데요 월요일에 자신의 메일 박스가 모두 헐리우드 관계자 메일로 가득 찾다고 합니다.  3000만불로 영화로 만들자는 제안이 들어있었다고 합니다.

제작비 350불 짜리 동영상이 350억짜리 영화로 바뀌는 순간이되었습니다.

예전에는 재능이 있어도 이렇게 기회를 잡기가 쉽지 않았을 텐데 이제는 자신의 꿈이 있다면 기회를 잡을 수 있는 세상이라는 것을 다시금 확인시켜주는 일화가 되었습니다.

물론 그 기회를 잡을 확률이 아주 낮을 수도 있지만, 뭐,  낮으니까 기회이고 꿈인거죠.
높으면 기회라고 보기보다는 마케팅이라고 봐야 하는거라서
음 그럼 이렇게 보는 제 눈이 삐딱한것일런지도..


2009/12/22 08:51 2009/12/22 08:51
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
ASIC/SoC 시뮬레이션을 할 때에는 짧게는 몇시간 걸리고 길게는 하루 넘게 계속 기다려야 하는 경우가 발생합니다.
이를 일일이 창을 열고 기다리는 것 보다는 끝나면 바로 메일로 보내주도록 설정해 놓으면 나중에 시뮬레이션이 끝나면 메일로 해당 결과와 함께 메일로 통보되도록 할 수 있습니다.



Fedora 메일서버 세팅




1. 메일서버


       Fedora Core 2 에서 기본적으로 제공하는 패키지를 이용해 웹메일을
       구축한다.



2. 필요한 패키지


       다음의 패키지가 필요하다.

               sendmail
               sendmail-cf
               dovecot
               squirrelmail
               openssl
               cyrus-sasl
               cyrus-sasl-plain
               cyrus-sasl-md5

       설치하기 전에

               rpm -qa | grep <package-name>

       의 명령으로 우선 위의 패키지가 설치되어 있는지 확인해 본다.
       설치되어 있지 않은 패키지는

               yum install <package-name>

       의 명령으로 설치할 수 있다.



3. sendmail 설정


       sendmail의 설정파일은 /etc/mail에 모여있다.

       1) /etc/mail/access
          메일을 발송할 수 있는 ip의 RELAY를 열어준다.

               localhost.localdomain RELAY
               localhost RELAY
               127.0.0.1 RELAY

          파일을 수정한 후에는

               makemap hash /etc/mail/access < /etc/mail/access
       
          의 명령으로 access.db를 갱신한다. access 파일만 수정한 경우는
          sendmail을 재시작할 필요가 없으며 access.db 파일 갱신만으로
          변경사항이 적용이 된다.

       2) /etc/mail/virtusertable
          가상 사용자 목록을 만든다. 간단한 예로,

               admin@localhost                root

          라고 적으면 실제로 system 내에 존재하지 않는 admin 으로 오는
          메일은 root 계정이 받아보게 된다. 역시 파일을 수정한 후에는

               makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

          의 명령으로 virtusertable.db 파일을 갱신해줘야 한다.

       3) /etc/mail/local-host-names
          서버로 오는 email 중 이 파일에 나열된 주소로 오는 메일만을 받아들인다.

               ns
               example.com
               ns.example.com

          메일 주소로 사용하는 서버 이름들을 여기에 적어 놓는다.

       4) /etc/mail/sendmail.mc
          SMTP 인증 기능을 사용하기 위해서 다음의 라인을 확인한다.

                TRUST_AUTH_MECH(`LOGIN PLAIN EXTERNAL DIGEST-MD5 CRAM-MD5')dnl
                define(`confAUTH_MECHANISMS', `LOGIN PLAIN EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5')dnl

          없다면 물론 추가한다.
          외부메일을 받을 수 있게 하려면 다음의 라인을 찾은 후,

               DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

          다음과 같이 라인 처음에 dnl이라고 적는다.

                dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

          다음의 명령으로 sendmail.cf를 새로 생성한다.

               m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf



4. 나머지 설정


       나머지 설정은 그냥 기본으로 사용했다. 필요에 따라서는 다음 파일들을
       알아서 수정한다.

       1) dovecot

               /etc/dovecot.conf

       2) squirrelmail

               /usr/share/squirrelmail/config/config.php

          직접 수정하지 말고 될 수 있으면,

               /usr/share/squirrelmail/config/conf.pl

          의 명령을 이용해 수정할 것을 권한다. 설정편집시 imap 부분은 others
          로 설정하면 잘 동작한다.



5. 방화벽


       외부 포트가 열리지 않아서 메일이 도착하지 않는 경우가 종종 있다.
       iptables에서 25, 143, 993 (tcp) 포트를 반드시 열어 놓는다.



6. 서비스 시작하기


       각각의 서비스를 다음 명령으로 시작한다.

               service sendmail start
               service dovecot start


7. Perl Script


시뮬레이션은 Perl 스크립트에서 수행하면서 동작시킵니다.

sub send_mail {
  my ($status, $file) = @_;
  $to_user = $user . "\@" . "newtypeunion.com";
  system ("mail -s \"SIMULATION Result : ( $status )\" $to_user < $file");
}
.......
send_mail( "ERROR" , "./sim.log");
......
2009/12/21 12:24 2009/12/21 12:24
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]

[MIPS] Simulator

2009/12/20 19:48 / Embedded
MIPS 아키텍쳐 공부하시는 분들에게 도움 될만한 사이트 하나를 발견했습니다.


http://xavier.perseguers.ch/en/programming/mips-assembler.html

사용자 삽입 이미지

MIPS Assembler and Simulator is a tool for converting MIPS assembly code into MIPS machine code in either hexadecimal or binary output format. Simulation of the execution is also allowed, as seen in the course “Computer Architecture”.


펜티엄 3에서 1초에 약 2500 명령어 정도를 수행할 수 있다고 합니다.
요샌 뭐 더 빠르게 실행하겠죠

다운로드는 이 페이지에서 할 수 있습니다.
http://xavier.perseguers.ch/en/programming/mips-assembler/download.html

소스코드도 오픈해주어서 다운 받을 수 있습니다.
http://xavier.perseguers.ch/nc/en/programming/mips-assembler/download/all-files.html

2009/12/20 19:48 2009/12/20 19:48
GUNDAM 이 작성.
TAGS ,

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
오래간만의 컴파일러 빌드입니다.

1) binutils  설치하기


우선 binutils를 다운 받습니다.
커맨드는 아래와 같습니다.

cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src login
{enter "anoncvs" as the password}
cvs -z 9 -d :pserver:anoncvs@sourceware.org:/cvs/src co binutils
  

빌드는 아래와 같이 합니다.

mkdir build
cd build
 ../binutils-2.20/configure  --target=mips-elf --prefix=/Volumes/ZGUNDAM/usr/lcao --with-gnu-as --with-gnu-ld
make all
make install

설치가 끝나고 확인하면 아래와 같습니다.

GUNDAMMACPRO:build kevinIm$ ls /Volumes/ZGUNDAM/usr/local/bin/
mips-elf-addr2line      mips-elf-ld             mips-elf-ranlib         mips-elf-strip
mips-elf-ar             mips-elf-nm             mips-elf-readelf
mips-elf-as             mips-elf-objcopy        mips-elf-size
mips-elf-c++filt        mips-elf-objdump        mips-elf-strings

패스가 추가되어야 하기 때문에

export PATH=$PATH:/Volumes/ZGUNDAM/usr/local/bin

으로 미리 추가해 둡니다.

2. gcc를 빌드하기



에서 gcc 최신 버전을 다운 받습니다. 이 글을 쓰는 시점에서는 4.4.2입니다.

다운받아서 압축을 풀고 빌드를 합니다.

mkdir build
cd build
../gcc-4.4.2/configure --target=mips-elf --without-headers --with-gnu-as --with-gnu-ld --disable-shared --prefix=/Volumes/ZGUNDAM/usr/local/ --with-newlib --disable-libssp

그러면 아래와 같은 오류가 발생합니다.

....
checking for correct version of gmp.h... no
configure: error: Building GCC requires GMP 4.1+ and MPFR 2.3.2+.
Try the --with-gmp and/or --with-mpfr options to specify their locations.
Copies of these libraries' source code can be found at their respective
hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/.
.......

GMP 4.1과 MPFR2.32 이상 버전이 필요하다는 의미입니다.
MAC에서는 소스를 가지고 와서 빌드하는 것과 fink등을 이용해서 다운 받는것이 가능합니다.
여기선 그냥 다운 받는것으로 하고 진행합니다.

sudo port install gmp
--->  Fetching gmp
--->  Attempting to fetch gmp-4.3.1.tar.bz2 from ftp://ftp.dti.ad.jp/pub/GNU/gmp
--->  Verifying checksum(s) for gmp
--->  Extracting gmp
--->  Applying patches to gmp
--->  Configuring gmp
--->  Building gmp
--->  Staging gmp into destroot
--->  Installing gmp @4.3.1_1
--->  Activating gmp @4.3.1_1
--->  Cleaning gmp

GUNDAMMACPRO:build kevinIm$ sudo port install mpfr
--->  Fetching lzmautils
--->  Attempting to fetch lzma-4.32.7.tar.gz from http://distfiles.macports.org/lzmautils
--->  Verifying checksum(s) for lzmautils
--->  Extracting lzmautils
--->  Configuring lzmautils
--->  Building lzmautils
--->  Staging lzmautils into destroot
--->  Installing lzmautils @4.32.7_1
--->  Activating lzmautils @4.32.7_1
--->  Cleaning lzmautils
--->  Fetching mpfr
--->  Attempting to fetch patch01 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch02 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch03 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch patch04 from http://distfiles.macports.org/mpfr/2.4.1
--->  Attempting to fetch mpfr-2.4.1.tar.lzma from http://distfiles.macports.org/mpfr/2.4.1
--->  Verifying checksum(s) for mpfr
--->  Extracting mpfr
--->  Applying patches to mpfr
--->  Configuring mpfr
--->  Building mpfr
--->  Staging mpfr into destroot
--->  Installing mpfr @2.4.1-p4_1
--->  Activating mpfr @2.4.1-p4_1
--->  Cleaning mpfr


그러면 설치가 된다. 설치된 위치는 /opt/local입니다.
이 위치를 반영하여서 다시 아래와 같이 커맨드를 넣습니다.

GUNDAMMACPRO:build kevinIm$ ../gcc-4.4.2/configure --target=mips-elf --without-headers --with-gnu-as --with-gnu-ld --disable-shared --prefix=/Volumes/ZGUNDAM/usr/local/ --with-newlib --disable-libssp --with-gmp=/opt/local --with-mpfr=/opt/local  --enable-languages="c"

make all

그러면 한참 컴파일을 합니다.

그러다가 다음과 같은 오류를 냅니다.

gcc  -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE  -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wcast-qual -Wold-style-definition -Wmissing-format-attribute   -DHAVE_CONFIG_H  -o cc1-dummy c-lang.o stub-objc.o attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o c-ppoutput.o c-cppbuiltin.o c-objc-common.o c-dump.o c-pch.o c-parser.o  c-gimplify.o tree-mudflap.o c-pretty-print.o c-omp.o dummy-checksum.o \
          main.o  libbackend.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a ../libcpp/libcpp.a ./../intl/libintl.a -liconv  ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a   -L/opt/local/lib -L/opt/local/lib -lmpfr -lgmp
Undefined symbols:
  "_iconv_close", referenced from:
      __cpp_destroy_iconv in libcpp.a(charset.o)
      __cpp_destroy_iconv in libcpp.a(charset.o)
      __cpp_convert_input in libcpp.a(charset.o)
      __nl_free_domain_conv in libintl.a(loadmsgcat.o)
  "_iconv", referenced from:
      _convert_using_iconv in libcpp.a(charset.o)
      _convert_using_iconv in libcpp.a(charset.o)
......


이 오류는 다음과 같이 커맨드를 넣어서 해결한다.

sudo port deactivate libiconv
/sw/bin/fink update libgettext3-dev

이후에 make를 하면 잘 진행된다.

make all
make install

테스트를 하면

GUNDAMMACPRO:build kevinIm$ mips-elf-gcc --help
Usage: mips-elf-gcc [options] file...
Options:
  -pass-exit-codes         Exit with highest error code from a phase
  --help                   Display this information
  --target-help            Display target specific command line options
  --help={target|optimizers|warnings|params|[^]{joined|separate|undocumented}}[,...]
                           Display specific types of command line options
  (Use '-v --help' to display command line options of sub-processes)
  --version                Display compiler version information
  -dumpspecs               Display all of the built in spec strings
  -dumpversion             Display the version of the compiler
  -dumpmachine             Display the compiler's target processor
  -print-search-dirs       Display the directories in the compiler's search path
  -print-libgcc-file-name  Display the name of the compiler's companion library
  -print-file-name=<lib>   Display the full path to library <lib>
  -print-prog-name=<prog>  Display the full path to compiler component <prog>
  -print-multi-directory   Display the root directory for versions of libgcc
.......

3) Newlib 컴파일 하기

다운로드는 다음 커맨드로 받습니다.
  cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src login
  {enter "anoncvs" as the password}
  cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co newlib

../src/configure --target=mips-elf -prefix=/Volumes/ZGUNDAM/usr/local --with-gnu-as --with-gnu-ld

이후에

make all
make install

을 하면 됩니다.


확인은 아래와 같이 합니다.
GUNDAMMACPRO:build kevinIm$ ls /Volumes/ZGUNDAM/usr/local/mips-elf/lib/

cfe.ld          ddb.ld          ldscripts       libidt.a        libnullmon.a    pcrt0.o
crt0.o          el              libc.a          liblsi.a        libpmon.a       pmon.ld
crt0_cfe.o      idt.ld          libcfe.a        libm.a          lsi.ld          soft-float
ddb-kseg0.ld    idtecoff.ld     libg.a          libnosys.a      nullmon.ld
GUNDAMMACPRO:build kevinIm$



 
2009/12/17 13:17 2009/12/17 13:17
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]

MPEG 1/2 Reference Site

2009/12/13 08:13 / Embedded
The reference website for MPEG!
MPEG 1/2에 관한 레퍼런스 사이트입니다.
        TM과 Source code등이 함께 있습니다.

Test Model 5

MPEG2 Test Model 5에 대한 이야기가 있습니다.

MPEG-4 Structured Audio: Developer Tools

        MPEG4-SA에 대한 온라인 북이 있습니다.

Multimedia Presentation about Structured Audio

        MPEG4-SA에 대한 온라인 프리젠테이션이 있습니다.

MPEG-2 Transport Stream packet analyser

  Peter Daniel 이 오픈하고 지원하는 스트림 패킷 분석 소프트웨어 입니다.
    윈도우즈 버전이고, 무료입니다. 사용해 보고 좋으면 10파운드 씩 지원해 돌라고 합니다.
    그리고 툴은 무료이지만, 소스 코드는 무료가 아니랍니다.
    소스 코드를 받기 위해서는 별도의 계약이 필요합니다.
Roy Wang, Ph.D이 만든 MPEG2 파서입니다.
소스코드는 배포하지 않습니다.

P.N. Tudor가 정리한 MPEG2 표준안 설명 자료입니다.
BBC 사이트에 있네요

Beginners Guide for MPEG-2 Standards
MPEG2 비디오와 MPEG2오디오에 대한 설명을 정리한 사이트입니다.

설명이 필요 없습니다.

MPEG-2 Overview and MATLAB code Project

A discussion of MPEG-2 coding techniques and a MATLAB program that demonstrates MPEG-2 style encoding and decoding.


2009/12/13 08:13 2009/12/13 08:13
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]
아이폰이 드디어 나왔습니다.

정말 나올줄이야 하는 생각이 들고, 얼렁 사야 할텐데 하는 생각도 드네요
가장 큰 난제는 지금 가지고 있는 핸펀은  아직 할부가 조금 남아서 고민이 되네요
이래저래 목하 고민 중

그동안 가지고 있던 핸펀에 불만은
   우선 MP3를 핸드폰 벨소리로 지정했으면 좋겠습니다.
   - 업자들 돈 벌려고 이 단순한 기능조차 막아 두었습니다. 에휴~~
   
   이동중에 가끔 메일 체크하는 기능이 있으면 좋겠는데
   - 아주 가끔은 필요해집니다. 그때마다 노트북 키고 보기에는 어렵죠.. 쩝..
   - 이 기능은 아이팟 터치에서 내장되어서 사용하였는데 아주 편리합니다.
   
   PC랑 데이터가 잘 호환되었으면,
   - 핸펀 PC에 붙여서 데이터 백업 받을려면 그때 마다 엄청 공부해야 합니다.
     왕짜증.. 날때가 있죠
 
  하지만 지금 사용하는 아이팟 터치 + 핸펀은 주머니를 불룩하게 보여서 싫어집니다.
 
  사실 제가 가진 문제의 핵심은 이것을 구입함으로서 애플 전도사의 지위를 유지하고 매니아의 지위를 유지하느냐 인데   뭐.. 그닥 이런것은.. 그동안 맥북프로 17"로 엄청 잘 유지했기 때문에  새삼스렇게 할 필요가 없을 듯 하네요

  암튼 지극히 개인적인 이유이지만, 이런 저런 핑계로 아이폰을 사야하나 생각중입니다.
  뭐, 개인적인 취향 + 이유를 다른 사람들에게 설명하고 납득을 구할 필요는 없을 것 이고,
  암튼.. 드디어 나온 아이폰이 고민아이템을 하나 더 올려주네요
 
  원래 계획은 PS3를 사서 건담전기 할려고 했었는데

  글고, 점심에 엘레베이터에서 옆에 탄 분은 아이폰을 자랑하더군요.. 역시 멀리서 봐도 알 수 있는 자체 발광 핸펀이더라구요..  
아이 부러워라

2009/12/09 08:39 2009/12/09 08:39
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]

PERL TIP

2009/12/05 10:29 / ASIC SoC
1. Perl Script에서 환경 변수를 가지고 오기
    많은 파일을 동시에 사용하면서, 설정을 하여야 할 경우 실행 옵션으로 주는 것이 편합니다.
    하지만, 패스같은 것들은 그냥 환경변수에 세팅해 놓고 PERL 스크립트에서 환경 변수를 받아들여서
    패스로 사용하는 것이 편합니다.
    아래는 그에 대한 예입니다.

     $WORK_ROOT = $ENV{"WORK_ROOT"};
     print STDOUT "[MSG AAAA] $WORK_ROOT\n";  

    실행 결과는 아래와 같다.

     [MSG AAAA] /home/GUNDAM/work_code
   
2. 스타트 옵션에서 -I로 패스를 지정할 수 있습니다.
   그런데 이것이 상대 패스로 지정되면, 시작하는 폴더가 유저마다 틀릴 경우,  귀찮게 됩니다.
    그리고 절대 패스로 해두면, 개발 환경을 다른데로 옮겼을때, 다시 귀찮게 됩니다.
   이런것을 해결하는 방법이  환경 변수를 설정해서 지정하면 해결됩니다.

   export PERL5LIB=/home/GUNDAM/PerlScript/
 
위에서 사용하는 환경 변수 PERL5LIB은 PERL 실행시 기본으로 모듈을 검색하는 @INC패스에 포함되지
않은 경우 추가로 찾을 수 있도록 패스를 추가할 수 있는 환경 변수입니다.
3. 문자열 내에 괄호 ( ( ) 가 있을 경우
정규식 표현을 이리저리 해보았지만 잘 안되었는데
[ ]으로 둘러 싸면 인식을 한다.

$target_line2 = "do[(]\"\/check\/tools\/scripts";

으로 설정한다.


요새 뜬금없이 PERL을 쓰면서  정리하고 있는 것입니다.
2009/12/05 10:29 2009/12/05 10:29
GUNDAM 이 작성.

당신의 의견을 작성해 주세요.

[로그인][오픈아이디란?]