ARM 플랫폼 상에서 전력 효율적인 소프트웨어 시스템 개발



http://www.eetkorea.com/ART_8800609804_1103011_NT_4dccfb11.HTM?click_from=8800053702,9949901117,2010-07-07,EEKOL,ARTICLE_ALERT

'Embedded > Softwares' 카테고리의 다른 글

inline function  (0) 2010.05.16
유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 매크로  (0) 2010.05.05
유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

inline function

Embedded/Softwares 2010. 5. 16. 16:47
From : http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/gcc/inline.html

inline 함수란 간단히 말해서 함수 call 없이 함수의 code 를 호출한 부분에 그대로 넣어주는 것이다.

inline 함수에 대해서 잘 설명한 글이다. 실제로 MSDN 을 보면 __inline 으로 쓰이고 함수의 주소를 컴파일러가 갖고 있거나 너무 inline 으로 쓰기에 크면 inline 함수가 되지 않는다 정도인데 역시 gcc 에서 찾아봐야 한다.

위의 링크에 있는 내용을 간략히(?) 내맘대로 정리하면 다음과 같다.

일 단 inline function 은 ISO C99 표준에 포함된다. 그전에는 없다는 애기다~. 하지만 GCC 상의 inline 과 ISO C99 표준의 inline 함수의 구현에 상당히 다른 점이 있다고 하니 VS2005 환경에서의 inline 함수는 많이 다를 수 있다는 점을 생각해 둬야 겠다.

이 글에서 눈에 띄는 점은 static / extern keyword 를 inline 과 썼을 때의 효과이다.
먼 제 static / inline 조합을 보면, 일반적으로 생각하면 static 이란 scope 를 명시적으로 그리고 제한하는 효과가 있고 이 것이 inline과 조합을 하면 왠지 inline 이 forced 되지 않을 까 (좀 더 효과적으로 동작) 하는 생각이 든다. 실제 위의 글에서도 호출자(caller) 에 inline 함수의 모든 호출이 통합된다고 하니 (함수의 주소 참조가 없고, 함수의 어셈블러 코드가 참조되지 않을 때) 효과가 있음을 알 수 있다.
단, 주의해야 할점은 inline 함수가 정의하기 전의 그것을 호출하는 함수가 있다거나 recursive 함수의 형태의 inline 함수라면 inline 효과가 사라진다는 점이다.

inline 함수인데 static 으로 선언하지 않는 경우는 거의 inline 효과가 없다고 볼 수 있다. 이 경우에는 이 함수가 다른 sources 파일에서 사용 될 수 있다고 가정하기 때문에 (컴파일러가) 일반적인 방식의 함수로 컴파일이 되기 때문에 "통합"이 되지 않는다.

extern / inline 의 조합의 경우 효과가 좋다. 이 두개의 조합은 함수의 정의를 오직 inlining 을 위해서만 사용한다. 실제 함수의 주소를 참조하거나 함수를 선언한다 해도, extern 이므로 직접적으로 참조되지 않고 또한 정의되지 않는 것 처럼 보인다. extern inline 의 경우 거의 macro 에 준하는 효과를 보여준다.

.....

inline 의 세계도 심오하다는 것을 느낄 수 있는 글인거 같다. 시간 날 때 한 번 읽어보고 google codesearch 같은 곳에서 예제를 찾아보면 좀 더 쾌적한 코딩을 할 수 있을 것이다. :-)


출처 : http://songhl1.tistory.com/entry/Inline-Function

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

유용한 ARM Assembly

정리: 이채원 (ichijo99@hanmail.net)
Homepage: http://user.chollian.net/~hebb
Date: 2004.12.27.

본 문서의 내용은 ARM System Developer’s Guide의 Ch. 5, 6 의 일부분에서 발췌한 것임을 밝힙니다.

[1] Conditional Execution

(A)
// Converts an unsigned int i(0 <= i <= 15) to a hexadecimal character c

if(i<10)  c = i + '0';
else  c = i + 'A' - 10;

.......................................................................
c RN 0  ; Assign c to r0
i RN 1  ; Assign i to r1

 CMP i, #10
 ADDLO c, i, #'0'      ; == ADDCC   c, i, #’0’
 ADDHS c, i, #'A'-10   ; == ADDCS   c, I, #’A’-10
 
(B)
// If c is either 'a', 'e', 'i', 'o', or 'u', then vowel increases

if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u')  vowel++;

.......................................................................

c RN 0  ; Assign c to r0
vowel RN 1  ; Assign vowel to r1

 TEQ c, #'a'
 TEQNE c, #'e'
 TEQNE c, #'i'
 TEQNE c, #'o'
 TEQNE c, #'u'
 ADDEQ vowel, vowel, #1

.......................................................................
 
(C)
// If c is a letter, increase letter

if ( (c>='A' && c<='Z') || (c>='a' && c<='z') ) letter++;

.......................................................................

c RN 0  ; Assign c to r0
temp RN 1  ; Assign temp to r1
letter RN 2  ; Assign temp to r2

 SUB temp, c, #'A'
 CMP temp, #'Z'-'A'
 SUBHI temp, c, #'a'
 CMPHI temp, #'z'-'a'
 ADDLS letter, letter, #1

.......................................................................


 
[2] Loop

(1)
//Loop from 10 to 1
for(i=10; i>=1;i--) ...;

.......................................................................

i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV N, #9
 MOV i, N
loop
 ; TODO: Loop body should be placed here...

 SUBS i, i, #1
 BGT loop

.......................................................................


(2)
// Loop from 9 to 0

for(i=9; i>=0;i--) ...;
.......................................................................
i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV N, #9
 SUBS i, N, #1
loop
 ; TODO: Loop body should be placed here...

 SUBS i, i, #1
 BGE loop
 
(3)
// Loop from 0 to 9 => NOT efficient!
for (i=0; i<10; i++) …;

.......................................................................
i RN 0; Assign i to r0
N RN 1; Assign N to r1

 MOV i, #0  ; i = 0
loop
 ; TODO: Loop body should be placed here...

 ADD i, i, #1
 CMP i, #10
 BCC loop  ;  == BLO   loop  == BLT   loop

이 루틴은 앞서의 (2)번의 예제에 비해 3줄로 1줄이 더 추가되었다. 따라서 이런 비효율적인 방법보다 앞서의 (2)번 예제처럼 Counting down 하는 경우의 예제가 더 바람직하다.


(4)
//DO~WHILE
do
{
   …
}while(--N != 0);

.......................................................................
N RN 1; Assign N to r1

loop
 ; TODO: Loop body should be placed here...

 SUBS N, N, #1
 BNE loop  ;  == BLO   loop
 
[3] Switches on the range 0 <= x <= N

(1)
Switches to the absolute blocks (Position dependent)

switch(x){
 case 0: return method_0();
 case 1: return method_1();
 case 2: return method_2();
 default: return method_d();
}

.......................................................................

x RN 0 ; Assign x to r0

switch_absolute
 CMP x, #3
 LDRLT pc, [pc, x, LSL #2]
 B method_d
 DCD method_0
 DCD method_1
 DCD method_2

.......................................................................


 
(2)
Switches to the relative blocks (Position independent)

switch(x){
 case 0: return method_0();
 case 1: return method_1();
 case 2: return method_2();
 default: return method_d();
}

.......................................................................

x RN 0 ; Assign x to r0

switch_relative
 CMP x, #3
 ADDLT pc, pc, x, LSL #2
 B method_d
 B method_0
 B method_1
 B method_2

.......................................................................


☞ CMP, TST, TEQ에 대한 부연 설명
(1) CMP   r0, r1
“r0–r1”를 한다. “r0-r1”은 내부적으로 “r0 + ~(r1) + 1”로 처리된다.
이 때 “r0 >= r1”이면 “r0 + ~(r1) + 1” 이 overflow를 일으키고 Carry가 발생한다.

(2) TST    r0, r1;   r0 & r1
“r0 & r1”을 한다. 예를 들어 TST r0, #0x10 은 r0 & 0x10을 하여
그 결과가 ‘1’이면 (r0의 4번 비트가 ‘1’이면) Z = 0으로 만든다.
그리고 그 결과가 ‘0’이면 (r0의 4번 비트가 ‘0’이면) Z = 1 로 만든다.

(3) TEQ    r0, r1;   r0 ^ r1
r0 ^ r1을 한다. (^는 XOR)
r0와 r1이 같으면 결과가 0이므로 Z = 1로 만든다.
r0와 r1이 다르면 결과가 1이므로 Z = 0으로 만든다.

CMP 대신 TEQ를 쓰면 C플래그에 영향을 주지 않고 Z플래그 만으로 같은지 아닌지를 판별할 수 있다.


 
☞ Condition Code 표

출처 : http://www.aesop.or.kr

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

이 문서는 2004년 이채원님이 정리해 주셨던 문서 입니다.

본 문서의 내용은 Red Hat GNUPro Toolkit의 Manual 자료 중 하나인 GNUPro Auxiliary Development Tools 문서의 Using as 부분에서 8장 Assembler Macro Directives의 내용을 참조 및 발췌한 것임을 밝힙니다.

또한 일부분에 예제로 사용된 Macro 예제의 일부는 CLABSYS (http://www.clabsys.co.kr)의 자료실에 공개된 소스에서 발췌한 것임을 밝힙니다.
 
[1] ADS, SDT에서의 MACRO

 MACRO
 WR32 $ADDR, $DATA  ; [ADDR]=DATA

 LDR r0, =$ADDR
 LDR r1, =$DATA
 STR r1, [r0]
 MEND
;………………………………………………………….

WR32  INTMSK, 0xFFFFFFFF


[2] GNU AS에서의 MACRO

.macro   WR32  addr, data
   ldr      r0, =\addr
   ldr      r1, =\data
   str      r1, [r0]
.endm

@………………………………………………………….

WR32  INTMSK, 0xFFFFFFFF


 
[3] ADS, SDT에서의 Data Memory 세팅 반복 처리
- 특정 영역에 0 ~ 5의 값을 DCD로 할당하는 예제
(MMU 세팅 등에 이용할 수 있음.)

 GBLA count

 AREA    |Data$$PageTable|, DATA, READONLY, ALIGN=14

 EXPORT  PageTable

PageTable

count SETA 0
 WHILE count <= 5
 DCD count
count SETA count + 1
 WEND

 END



출처 : http://www.aesop.or.kr

'Embedded > Softwares' 카테고리의 다른 글

inline function  (0) 2010.05.16
유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

[유용한 ARM 분기 명령어와 숫자 라벨 이용법]


/** 여기서 b는 back이며 숫자 label이 앞부분에 있음을 나타낸다.
그리고 f라고 하면 forward이며 숫자 라벨이 뒷부분에 있음을 나타낸다. **/


[EX1]
;이 명령은 r1의 값이 5면 LABEL로 가서 반복하고, 아니면 빠져 나간다.

LABEL
   cmp r1, #5
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   beq 0b


 
[EX2]
;이 명령은 r1의 값이 5가 아니면 LABEL로 가서 반복하고, 5면 빠져 나간다.

LABEL
   cmp r1, #5
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   cmp r1, #5
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   cmp r1, #5
   bne 0b


 
[EX3]
;이 명령은 r1의 8번 비트가 ‘0’이면 LABEL로 가서 다시 반복하고, ‘1’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   beq LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   beq %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   beq 0b


 
[EX4]
;이 명령은 r0의 8번 비트가 ‘1’이면 LABEL로 가서 반복하고, ‘0’이면 빠져 나간다.
LABEL
   tst r1, #0x00000100
   bne LABEL

이는 ADS나 SDT에서 다음과 같이 다시 쓸 수 있다.
0
   tst r1, #0x00000100
   bne %b0

그리고 Linux GCC에서는 다음과 같이 쓸 수 있다.
0:
   tst r1, #0x00000100
   bne 0b

[EX5]
LABEL
 tst r0, #0xff
 beq LABEL
 
; r0의 하위 8비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 8비트 값이 모두 1이면 빠져나간다

[EX6]
LABEL
 tst r0, #&0x03
 beq LABEL

; r0의 하위 0번, 1번 비트 값이 하나라도 0이면 LABEL로 되돌아가 반복하고
; r0의 하위 0번, 1번 비트 값이 모두 1이면 빠져나간다



출처 : http://www.aesop.or.kr/

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 (if, for, do_while, switch)  (0) 2010.05.05
유용한 ARM 어셈블리 매크로  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,
리눅스 모듈에 관련된 명령어.
1.1.8 insmod, lsmod, rmmod

insmod
insmod 는 로드 할 수 있는 모듈을 실행중인 커널에 설치한다. Insmod 는 커널에서 제출한 외부 심벌 표로부터 모든 심벌을 분석함으로써 모듈을 실행중인 커널에 링크하려고 한다. 만약 오브젝트 파>
일의 이름이 확장자가 없이 주어졌다면, insmod는 어떤 공통의 기본 디렉토리에서 그것을 찾을 것이다. 이 기본값을 무시하기 위해 MODPATH 환경 변수를 사용할 수 있다.

lsmod
lsmod는 모든 로드된 정보를 보여준다. 포멧은 이름, 크기, 사용수카운트, 언급된 모듈의 리스트이다. 이 정보는 /proc/modules과 동일한 정보를 표현하고 있다. 만약 모듈의 제어 이것을 로딩하지 않은
것과 로드할수 없는 루틴 사용수카운트의 표현을 항상 -1로 표현되며, 실제 사용수와 관계 없이.

Lsmod shows information about all loaded modules. The format is name, size, use count, list of referring modules. The information displayed is identical to that available from /proc/modules. If the module controls its own unloading via a can_unload routine then the user count displayed by lsmod is always -1, irrespective of the real use count.

rmmod
rmmod는 동작중인 커널로 부터 로딩된 모듈을 언로드한다. rmmod는 커널로 부터 모듈로 설정된 그들은 사용하지 않거나 다른 모듈로 부터 언급되지 않은것에 대하여 언로드 한다.
만약 하나이상의 모듈이 커맨드라인으로 부터 명명되고, 그 모듈은 주어진 순서에 의하여 제거될 수 있다.
이러한 차곡차곡 쌓여진 모듈의 언로드에 대하여 지원한다. -r옵션과 함께 모듈의 재귀적인 제거를 시도 하게 될것이다. 이것의 의미는 만약 스택안에 있는 최상의 모듈이 커멘드 라인에서 명명되었을때
, 이 모듈에 의해 사용된 모든 모듈은 같이 제거 된다는 것이다.

1.1.9 diff
간단한 예로, diff 는 from-file 와 to-file 의 두파일의 내용을 비교한다. - 의 파일명은 표준입력으로부터 읽어들여 내용을 나타낸다. 특별한 경우로, diff - - 는 자기 자신을 표준입력으>
로 비교한다. If from-file 이 디렉토리이고, to-file 이 아니라면 diff 는 to-file의 파일과 from-file안의 파일을 비교한다. from-file 과 to-file 이 모두 디렉토리라면, diff 는 알파벳 순서로 두
디렉토리 안의 상응하는 파일을 비교한다; 이 비교는 -r이나 -recursive옵션이 주어지지 않으면 재귀적이 아니다. diff 는 파일인양 실제 디렉토리를 비교하지는 않는다. 표준입력은
같은 이름을 가진 파일개념을 적용하지 않기때문에 꽉찬 파일은 표준입력되지 않을 수 있다. diff 은 -, 로 시작된다, 그래서 대게 from-file 과 to-file 은 - 로 시작되지 않을런지 모른다.

1.1.10 patch
원본 파일에 차이점을 적용한다.
patch는 diff프로그램에 의하여 생성된 패치파일을 하나 혹은 그 이상의 오리지널 파일에 적용시키기 위해 사용하는 프로그램 이다.

예를들어 패치의 적용은 다음과 같이 할 수 있다.
# gzip -cd ../patch-2.4.10-ac11.gz | patch -p1
# gzip -cd ../patch-2.4.10-ac11-rmk1.gz | patch -p1
# gzip -cd ../diff-2.4.10-ac11-rmk1-np1.gz | patch -p1

# gzip -cd ./patch-2.4.10-ac11.gz | patch -p0
# gzip -cd ./patch-2.4.10-ac11-rmk1.gz | patch -p0
# gzip -cd ./diff-2.4.10-ac11-rmk1-np1.gz | patch -p0

여기서 patch다음에 나오는 옵션중 -p0와 -p1 옵션이 있는데 이 옵션은 p1은 상위 디렉토리에서 패치하는 것이고, p0는 현재 디렉토리에서 패치하는 것이다.

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 매크로  (0) 2010.05.05
유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03
Code V  (0) 2009.05.25

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

minicom

Embedded/Softwares 2009. 6. 3. 18:18

미니컴은 윈95의 하이퍼터미널과 유사한 리눅스용 통신 프로그램이다. (UNIX 버전도 있다)
비록 텍스트 방식이지만 모뎀 제어, 파일 업로드 다운로드, 다이얼링 디렉토리 등 통신에 필요한 중요한 기능은 거의 포함되어있는 좋은 프로그램이다.

미니컴의 용도는 다양하지만 우선 리눅스에서 하이텔이나 천리안 등의 BBS를 연결할 때 가장 좋다.
콘솔에서 한글을 쓰려면 han 같은 콘솔용 한글을 뛰우거나 한글 X-window를 뛰우면 된다.

윈95에서 리눅스로 login하여 minicom을 가동해도 한글이 지원된다. 따라서 랜에 연결된 리눅스 서버에 모뎀과 전화선을 연결하면 그 랜의 모든 피시에서 리눅스에 login해서 minicom을 가동해서 통신을 할수 있으므로 가장 손쉬운 모뎀 공유 방법이기도 하다.

다른 용도로는 PPP 연결에서 사용한다. 보통 PPP 연결은 쉘스크립트를 쓰지만 쉘스크립트를 쓸 경우 PPP 연결이 잘 안되어도 어느 부분이 문제인지 파악이 어렵다. 이 경우는 일단 minicom으로 먼저 상대 모뎀과 연결을 한 후 통신 연결을 유지한채 minicom을 빠져나와 ppp 데몬을 실행하는 방법으로 접근하면 쉽게 어느 부분에서 문제가 있는지 파악이 가능하다.

1. 통신을 하기 전에 알아야 할 사항

1.1 장치명

우선 시리얼 통신을 하려면 시리얼포트와 모뎀이 필수적이다.
피시는 4개의 시리얼포트를 지원하므로 이 네개의 시리얼 포트 중 어디에 모뎀이 연결되어 있는지를 알아야한다.

아래 예를 우선 보자

Serial driver version 4.13 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16550A
tty01 at 0x02f8 (irq = 3) is a 16550A

위는 dmesg 명령으로 출력한 내용 중 일부이다.

위에서는 시리얼 포트가 두개가 인식되었다. com1과 com2이다. 즉 tty00 옆에 0x03f8은 IO Address 이고 irq= 옆의 4는 인터럽트이다. 그 옆의 16550A 는 UART 칩을 표시한다. 아래는 com 포트 별 IO Address와 IRQ 번호이다.

com1  3f8      4
com2 2f8 3
com3 3e8 4
com4 2e8 3

내장 모뎀을 사용한다면 com3나 com4가 나올수도 있다. 또 CMOS 셋업에서도 com 포트 IO address를 변경할수 있으므로 피시의 마더보드에 내장된 com 포트가 항상 com1 과 com2 로만 설정되지 않는다는걸 알아야한다.

왜 위의 지식이 필요한가하면 시리얼포트 를 사용하려면 시리얼포트 장치명을 알아야하기 때문이다. 아래는 각 com 포트 별 리눅스의 장치명이다.

com1  :  /dev/ttyS0
com2 : /dev/ttyS1
com3 : /dev/ttyS2
com4 : /dev/ttyS3

예를들어 minicom에서 셋업에 아래 부분이 있다.

A - Serial Device : /dev/ttyS1

여기에 /dev/ttyS1 은 com2를 가르킨다. 가끔 시리얼 디바이스명에 /dev/modem이라고 넣어야 하지 않느냐는 질문을 받는데 /dev/modem 이란 장치는 없다. 단지 리눅스 설치시 모뎀 포트를 묻는 부분이 있는데 이 대답에 따라 /dev/ttyS?를 /dev/modem 이란 장치에 링크 해 놓았기 때문이다.

따라서 만약에 설치 후에 모뎀이 연결된 포트가 바뀌면 /dev/modem이란 장치는 인식이 되지 않으므로 ttyS? 장치명을 쓰는게 좋다.
(리눅스 커널 2.0에서는 dial-in 과 dial-out에 따라 ttyS? 장치명과 cua? 장치명을 구분해 썼으나 2.2부터는 ttyS? 장치로 통일되었다.)

1.2 통신속도

요즘 나오는 56k 모뎀을 사용하려면 피시의 시리얼 포트 속도가 115,200bps는 되야한다. 이는 모뎀에 데이터 압축 기능이 있어 시리얼포트 속도(DTE 속도라고도 함)는 선로속도(DCE 속도라고도 함)의 2배 내지 4배를 잡아주는게 좋기 때문이다.

통신 프로그램에서 포트에 지정하는 속도는 선로속도가 아니고 시리얼포트 속도이다. 선로속도는 통신프로그램에서는 지정할 수 없고 두 모뎀이 처음 연결될때 두 모뎀간의 핸드쉐이킹(handshaking) 과정에서 결정된다.
(모뎀으로 처음 접속시 나는 이상한 소리가 바로 두 모뎀의 핸드쉐이킹 과정이다. )

com2의 시리얼 포트 속도를 115,200bps롤 주고 싶으면 setserial 명령을 써야한다.

/bin/setserial /dev/ttyS1 spd_vhi

위의 명령을 주면 com2의 시리얼포트 속도가 115,200bps로 바뀐다.(57,600 bps라면 spd_hi 를 쓴다)
다음에 이를 확인하려면 setserial -a /dev/ttyS1 명령을 주라.
아래는 출력 결과이다.

churlsu:~$ setserial -a /dev/ttyS1
/dev/ttyS1, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
Flags: spd_vhi skip_test auto_irq session_lockout

위에서 Flags가 spd_vhi 로 바뀌었으므로 이제 시리얼포트 속도는 115200bps를 지원한다.
(물론 통신프로그램에서 지정해야 효력이 있다)

setserial 명령은 리눅스 시스템을 리부팅하면 효력이 사라진다. 따라서 부팅과 동시에 이 명령을 실행하려면 rc.local 스크립트나 rc.boot 디렉토리에 넣으면 된다.

1.3 com 포트의 IRQ를 비표준 irq로 쓰려면

com포트는 보통은 2개 밖에 쓸수 없다. 이유는 com포트에 할당된 irq가 4와 3 2개 이기 때문이다.
일부 내장모뎀은 irq를 바꿀수 있다. 따라서 irq만 여유가 있으면 4개의 모뎀을 리눅스에서 동시에 사용할수 있다. 이때는 setserial에서 수동으로 해당 포트의 irq를 지정해야한다.

1.4 시리얼포트의 FIFO 버퍼 문제

피시의 시리얼 포트 UART 칩에는 여러 종류가 있다. 8250, 16450, 16550 등이다.
그 런데 UART 칩이 8250이나 16450일 경우 버퍼의 문제로 인해 시리얼 포트 속도를 19,200bps 이상으로 올리기 힘들다. 이른바 데이터 오버론 현상(또는 CRC 에러)이 발생할수 있기 때문이다. 그러나 16550칩은 버퍼가 16바이트이므로 적절한 플로우 컨트롤을 사용하면 115,200bps에서도 별로 문제가 없다.

하지만 요즘 고속의 시리얼 데이터 전송이 등장하므로서 피시의 시리얼 포트는 16바이트 버퍼로도 부족할수 있어 새로 16650, 16750 UART 칩이 등장하였다. 16650은 32바이트 16750은 64바이트 버퍼를 갖고 있다. 리눅스에서 시리얼 포트의 UART 칩을 확인하려면 dmesg 명령을 써서 부트 때의 메시지를 보면 된다.

1.5 230k , 460k 시리얼 포트 속도

모뎀통신을 하는 경우 피시의 시리얼포트 속도를 115.2k 이상으로 할 필요는 없다. 56k 모뎀이라 할지라도 실제 선로 속도는 50k 수준으로서 극히 일부 데이터를 제외하고는 2배 이상의 압축이 이루지지 않으므로 115.2k 로 충분하다.

그러나 ISDN의 경우는 다르다. ISDN 라인은 선로 속도가 128k이다. 그런데 ISDN 외장형 TA나 ISDN 모뎀을 쓸 경우 128k 속도를 피시의 시리얼 포트가 지원하지 못하므로 이를 115.2k로 낮추어 피시의 시리얼 포트로 보낸다. 즉 10% 가량의 속도를 손해보고 있다.

일부 업체서 230.4k를 지원하는 시리얼포트 및 멀트포트를 생산하고 있다. 460k 심지어는 920k를 지원하는 멀티포트도 있다. 그러나 이런 속도를 피시의 시리얼포트에서 사용하려면 업체서 제공하는 드라이버나 프로그램을 사용하여야한다.

ISDN에서 피시와 연결하는 포트 속도를 230k로 하려면 ISDN 장비 자체도 이에 맞게 조정해야하고 피시의 시리얼포트, 드라이버 및 통신 프로그램도 230k를 지원하도록 바꾸어야한다. 리눅스에서 시리얼 포트에서 230k를 쓰려면 setserial 명령으로 가능하다. (물론 시리얼포트가 230.4k를 지원해야한다)

1.6 플로우컨트롤

고속모뎀에서는 시리얼포트 속도와 선로속도가 다르므로 모뎀에 버퍼를 사용하여 데이터를 임시로 저장한다. 따라서 피시에서 모뎀으로 데이터를 넘겨 줄 때 모뎀의 버퍼가 다 차면 모뎀은 피시로부터 데이터를 받는걸 중단해야한다. 이를 제어하는 방식에는 두 가지가 있는데 xon/xoff 와 rts/cts 이다.

xon/xoff 흐름제어를 소프트웨어 플로우컨트롤이라고도 하는데 데이터 내에 애스키 콘트롤캐릭터를 넣어 데이터 흐름을 제어하는 방식이므로 모뎀에서 바이너리 데이터를 전송하는 경우 즉 파일 업로드 다운로드시에는 데이터 송수신이 중단된다.
(바이너리 데이터에는 xon/xoff 문자가 들어 있으므로 이를 데이터로 인식하지 않고 흐름제어로 인식하여 송수신을 중단한다)

rts/cts는 하드웨어 플로우 컨트롤이라고도 하는데 rs-232 포트의 rts/cts 라인을 흐름제어로 사용하므로 바이너리 데이터 전송시에도 문제가 발생하지 않는다. 따라서 고속모뎀에서는 무조건 RTS/CTS 를 사용해야한다.

그러면 xon/xoff는 어떤 경우에 사용하는가?
예를들면 단말기를 RX, TX, Ground 3개의 선으로 연결하여 연결하는 경우는 rts와 cts 신호는 사용할 수 없으므로 이 경우 흐름제어를 하려면 Xon/Xoff를 쓸 수밖에 없다. 또는 통신 프로그램에서 RTS/CTS 를 지원하지 않는 경우도 마찬가지다.

리눅스 통신에서 흐름제어에 rts/cts를 쓰려면 stty 명령을 주어야한다. 물론 통신프로그램에서도 지정할수 있다. 그러나 양쪽에 모두 주는게 보다 확실하다.
아래는 stty 명령으로 com2포트의 특성을 확인한 결과이다.

churlsu:~$ stty -a < /dev/ttyS1

speed 9600 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

이부분은 현재 com2 포트의 특성을 보여주고 있다. 너무 복잡해 설명하기가 힘드나 위에서 6번째 줄 끝에 crtscts라고 나와있다. 이는 이 포트에 현재 rts/cts 플로우컨트롤이 사용된다는 뜻이다. 여기에 -crtscts라고 나오면 rts/cts 플로우컨트롤이 사용되지 않는다는 뜻이다. 이포트에 rts/cts를 쓰려면 아래 명령을 준다.

stty crtscts < /dev/ttyS1

이부분도 시스템 부팅시마다 가동되야하므로 rc.local이나 rc.boot 디렉토리에 넣는다.

2. 미니컴 환경설정(configuration)

미니컴은 가동시 옵션을 붙일수 있는데 형식은 아래와 같다.

minicom [-somlz] [-c on|off] [-d entry] [-a on|off] [-t term] [configuration]

미니컴을 처음 사용할 때는 사용 환경을 맞추어야한다. 우선 가동시 -s 옵션을 주어 configuration 메뉴를 가동해 환경 설정부터 해야한다.

minicom -s 명령을 주면 아래 화면이 뜬다.

            [configuration]
Filenames and paths
File transfer protocols
Serial port setup
Modem and dialing
Screen and keyboard
Save setup as dfl
Save setup as..
Exit

위의 메뉴에서 상하 화살표키를 이용해서 메뉴를 선택하면 다음메뉴가 나온다. 여기에서 우선 가장 필수적으로 지정해야하는 부분을 위주로 아래에 설명한다.

2.1 Filenames and paths

파일 업로드와 다운로드에서 사용하는 디렉토리를 지정한다. 별도 지정이 없으면 현행 디렉토리가 사용된다.

2.2 Serial port setup

가장 중요한 부분이다. 아래에 서브메뉴를 보면 다음과같다.

A -    Serial Device      : /dev/ttyS1 
B - Lockfile Location : /var/lock
C - Callin Program :
D - Callout Program :
E - Baud/Par/Bits : 115200 8N1
F - Hardware Flow Control : Yes
G - Software Flow Control : No

2.2.1 serial device

위의 1.1을 참고

2.2.2 Lockfile Location : /var/lock

리눅스는 멀티유저 시스템이므로 한 개의 통신포트를 다른 프로그램에서 동시에 사용을 시도할수 있다. 이를 예방하기위해 통신포트를 특정 프로그램이 사용하면 특정 디렉토리에 파일을 만들어 그 포트가 사용중임을 표시한다. 파일 이름은 보통 LCK..tty?? 이다.

이 파일 내에는 그 포트를 사용중인 프로그램의 PID가 ascii 또는 바이너리로 저장되므로 다른 프로그램은 이 파일을 체크해서 그 포트가 사용 가능한지를 알수 있다. LCK..tty?? 파일을 lock 파일이라 부르는데 이 파일의 위치가 통일되야 포트 사용여부를 다른 프로그램에서 파악이 가능하다. 리눅스에서는 /var/lock 디렉토리를 사용한다.

2.2.3 Baud/Par/Bits : 115200 8N1

이부분은 위의 1.2를 참조

2.2.4 Hardware Flow Control : Yes
2.2.5 Software Flow Control : No

위의 1.6를 참조

2.3 Modem and dialing

이부분에서 중요한건 모뎀초기화 스트링을 넣는 부분이다.

A - Init string ......... ~atz^M~

여기서 tilde(~)은 1초 정도 지연을 발생시킨다. ^M은 리턴키를 누른다는 뜻임. 어느 경우든 모뎀의 초기값은 모뎀에 내장될수 있으므로 여기에 모뎀 초기화 스트링을 넣을 필요성은 없으나 혹시 다른 사람이 모뎀을 사용하면서 모뎀 설정 값을 바꾸어 놓을수 있으므로 여러 사람이 모뎀을 사용하는 경우라면 초기화 스트링에 e1q0v1&c1&d2 정도를 넣어주는게 좋다. 혼자서만 쓴다면 atz면 충분하다.(뒤에 꼭 ^M을 넣어야한다.)

P - Auto baud detect .... No

이부분은 특별한 경우가 아니면 no로 해야한다. Auto baud 란 선로속도와 시리얼포트를 자동으로 일치시킨다는 의미인데 데이터 압축이 지원되는 모뎀(9600bps 이상의 모든 모뎀)은 시리얼 포트 속도가 선로속도보다 높아야하므로 auto baud를 지정하면 안된다.

대충 이정도만 지정하고 configuration 메뉴로 돌아와(서브메뉴에서 ESC키를 누른다) " Save setup as dfl" 를 선택하고(enter를 누른다) "Exit from Minicom"을 선택하면 환경 설정이 완료되었다.

*. 혹시 미니컴 사용 도중 위의 환경 설정을 바꾸려면 ctrl+a o 를 누른다.
(ctll 키와 a 키를 동시에 누른후 o 키를 누른다.)

2.4 가동시에 사용되는 다른 옵션

-l
한글을 사용하려면 필히 지정해야한다. 이는 미니컴이 확장아스키코드를 그래픽문자로 표시하지 않게 하는 옵션이다.

-d
전화번호부를 지정한다. 즉 미니컴에서 ctrl+a d 를 눌러 설정한 전화번호부( 상대전화번호 터미널 타입 등이 저장돼 있다) 의 디폴트네임은 홈디렉토리의 .dialdir 인데 이를 사용하지 않고 다른 파일을 쓸 때 사용한다.

3. 명령어(키)

위의 절차를 마치고 미니컴을 가동하면 (minicom -l) "Initializing Modem.." 이란 메시지가 뜨고 텅빈 화면이 나온다. 그리고 25번째 라인에는 아래의 상태라인이 나온다.

CTRL-A Z for help |115200 8N1 | NOR | Minicom 1.75 1996 | VT102 | Offline

이글의 의미는 사용법을 알려면 ctrl+a z 를 누르고 통신속도(시리얼포트 속도)는 115200 터미널 타입은 vt-102 라는 뜻이다.

한글을 사용하려면 필히 ctrl+a t 키를 눌러 터미널 타입을 ansi로 바꾸어야한다.

Ctrl+a z 를 누르면 아래 화면이 나온다.

Commands can be called by CTRL-A                    

Main Functions Other Functions

Dialing directory..D run script (Go)....G Clear Screen.......C
Send files.........S Receive files......R cOnfigure Minicom..O
comm Parameters....P Add linefeed.......A Suspend minicom....J
Capture on/off.....L Hangup.............H eXit and reset.....X
Send break.........F initialize Modem...M Quit with no reset.Q
Terminal settings..T run Kermit.........K Cursor key mode....I
lineWrap on/off....W local Echo on/off..E Help screen........Z
scroll Back........B
 

위에서 D S P L .. 등으로만 표시했는데 반드시 ctrl+a를 먼저 누르고 해당 문자를 눌러야한다.
여기에서 중요한 메뉴를 보면

S
하이텔같은곳에 파일을 업로드 할 때 저쪽에서 zmodem을 가동하시오 라고 나왔을 때 이 키를 누른후 zmodem을 선택한다.

P
전송속도, 패리티 비트등을 고칠수 있다.

L
화면 내용을 파일로 저장할 때 쓴다. 토글키이다.

F
중단 신호를 모뎀으로 보낸다.

T
터미널 타입을 선택할수 있다.(한글을 쓸려면 ansi로 지정하시오.)

W
linewrap on/off

G
스크립트 구동

R
파일을 다운로드 할 때 쓴다.

A
라인 피드 on/off

H
전화를 끊는다.

M
모뎀을 초기화 한다.

E
local echo on/off, 1:1 통신에서 씀.

C
화면을 지움.

O
Configuration 메뉴가 나옴

X
모뎀을 리셋하고 종료

Q
모뎀의 리셋없이 종료한다. 즉 전화 연결이 끊기지 않는다. PPP 연결시 모뎀 연결을 종료하지 않고 PPP 데몬을 가동할 때 사용한다.

J
잠시 쉘프롬프트 상태로 빠질 때 사용한다. 다시 돌아 올 때는 쉘에서 fg 명령을 쓴다.

Z
도움말

4. 전화 걸기

전화를 걸려면 두가지 방법이 있다.

4.1 수동 연결

미니컴 가동후 텅빈 터미널 화면에서 atdt014XX 하면 된다.

4.2 전화번호부 사용

미니컴 가동후 ctrl+a d 키를 누르면 전화번호부 메뉴가 나온다. 이 메뉴에서 좌우 화살표키를 눌러 아래를 선택한다.

Dial  :  지금 선택한 번호로 전화를 건다.
Add : 전화 번호 등록
Edit : 항목 수정
Remove : 항목 제거

한글을 쓰려면 터미널 타입을 필히 ansi로 지정하기 바람. 전화번호 등록후 해당 전화번호에 커서를 위치하고 (상하 화살표) 좌우 화살표를 사용 dial을 선택후 하면 전화가 걸린다. 전화번호부 내용은 사용자 홈디렉토리에 .dialdir 파일에 저장된다.

5. 기타

minicom을 root외의 사용자가 사용할수 있으려면 minicom 파일의 허가모드를 setuid root 즉 4555로 해야한다. 그러면 누구나 minicom을 사용할수 있으나 특정 사용자만 사용을 허가하려면 minicom.users에 사용자를 지정한다.

minicom.users를 위치시킬 디렉토리를 알려면 minicom -h 를 준다. 그러면 마지막 줄에 디렉토리 위치를 알려준다.
아래는 minicom -h 의 출력이다. 디폴트 디렉토리가 /etc이다.

 
These options can also be specified in the MINICOM environment variable.
This variable is currently unset.
The LIBDIR to find the configuration files and the
access file minicom.users is compiled as /etc.
 

미니컴의 명령키를 ctrl+a 대신 alt 키를 쓰려면(즉 ctrl+a d 대신 alt+d) 가동시 -m 옵션을 준다. 그러나 이 옵션은 콘솔에서 미니컴을 쓰는 경우에만 가능하다. 다른 통신 프로그램이나 telnet으로 login 한 경우 alt 키를 누르면 그 프로그램에서 alt키를 가로채어 minicom으로 전달되지 않기 때문이다.

미니컴의 디폴트 셋업 즉 "save setup as dfl" 로 저장한 내용은 디폴트 디렉토리에 minirc.dfl로 저장된다.(위의 경우 /etc)

글쓴 이 : 배철수 <bae@linuxlab.co.kr>
이글은 리눅스 월드 1999년 4월호에 실려 있습니다.



[출처] minicom|작성자 spirit0305

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
mobm 이 뭔가요?  (0) 2009.06.03
Code V  (0) 2009.05.25
ADS (ARM Developer Suite (v 1.2)소프트웨어  (0) 2009.05.25

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

>pxa320 보드를 사용한데..

>부트로더 의 mobm 의 역할이 정확이 이해가 안가네여...

>질문 올립니다.



mobm 자체가 뭘 말하는지는 모르겠지만

답변 달아주신 분들의 말씀을 종합해보면 한가지로 집중되는군요...

 

바로 NAND Boot Loader입니다.

 

왜 이게 필요하냐! NAND는 실행할 수 없는 메모리 이기 때문입니다.

뭔말이고 하니, NAND로 부팅하려면 NAND에 PC(프로그램 카운터)를 보내야 된다는 말인데

NAND라는건 주소와 데이터버스로 이루어진 디바이스가 아니거든요-_-;;;

그래서 "주소" 라는 개념이 없고 "블럭/페이지"의 개념이 있습니다.

 

그래서 어떻게 하느냐...

NAND의 특정블럭(대부분 0번 블럭)부터 "일정량만큼"

내부DRAM이나 외부 SDRAM/DDRRAM 등에 복사를 한 후 (H/W적으로 하는겁니다)

그 코드를 RAM에서 수행하는 겁니다.

 

mobm이라는게 바로 이 "H/W적인 로직" 을 말하는 것인지

아니면 그렇게 들어갈 "코드" 를 말하는 것인지는 잘 모르겠네요.

이부분은 다른 분들이 답변 달아주실테고

 

하튼, 그럼 "일정량 만큼" 복사를 하게 되므로 용량 제한이 굉장히 강해집니다.

아무리 커도 Small block NAND의 경우에는 16KB

Large block NAND의 경우에는 64KB 를 넘지 못하게 되는거죠

(블럭을 넘어서 읽지는 않을껍니다. 0번 블럭은 Bad로부터 자유로운 블럭이지만 나머지는 아니니까요)

그러다보니 160KB에 육박하는 부트로더를 통채로 0번 블럭에 넣을 수는 없는겁니다.

아마 리눅스의 부트로더도 마찬가지겠지요

 

그래서 필요한게 NAND Boot Loader입니다.

이녀석의 역할은 딱 하나입니다

(물론 부가기능 몇가지 넣은 부트로더들도 있지만... 이론적으로...)

뭐냐! 바로 "진짜부트로더"를 NAND에서 읽어다가 SDRAM에 적재시키고 실행하는 겁니다.

물론 이를 위해서는 SDRAM을 초기화 하고 몇몇 H/W도 초기화 시켜야겠죠

그리고 "진짜부트로더"를 "업데이트" 하는 알고리즘도 들어가 있어야 할테구요

 

하여튼, 이런 "기본적인" 기능만 넣으면 수KB에도 구현이 가능합니다.

이것을 NAND Boot Loader라고 합니다.

용어는 매우 많습니다.

Loader, Boot, NBoot, stbloader 등등...

CPU벤더마다 부르는 방법이 거의 다 다르다고 보시면 됩니다.

하지만 하는 일은 딱 하나죠.



원문 : http://cafe.naver.com/wincepro/11557

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
Code V  (0) 2009.05.25
ADS (ARM Developer Suite (v 1.2)소프트웨어  (0) 2009.05.25

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

Code V

Embedded/Softwares 2009. 5. 25. 02:43
CODE V - Optical Design & Analysis Software for Imaging and Telecommunication Optics

CODE V is the industry-leading optical design software. CODE V is used to model, analyze, optimize, and provide fabrication support for the development of optical systems with diverse applications. It provides a powerful, yet easy-to-use toolkit of optical techniques and calculations. For a more detailed look at technical features of the program, please see the technical description, or contact ORA.

Key Features

In addition to such basic capabilities as lens modeling and spot diagrams, CODE V has a vast array of technical, graphical, and ease-of-use features. The following list of "key features" is just a small subset of what is available. See the technical description for a more detailed look at capabilities.

  • Optimization (including Global Synthesis)
  • Ease of use (GUI interface and commands)
  • Extensive built-in libraries of optical system models (patents, etc.), components, and optical glass
  • Extensive graphics (pictures, data plots, shaded displays), including 3D visualizations and diffraction-based image simulations
  • Database/modeling Features
  • Tolerancing (including extremely fast and accurate wavefront differential tolerancing)
  • Interferogram interface (supports computer-aided closed-loop alignment)
  • Non-sequential surface modeling for unusual systems
  • Powerful command language (with Macro-PLUS programming)
  • Fast 2D Image Simulation with an input bitmap file (including diffraction)

CODE V is the most comprehensive "tool box" for optical modeling, design and analysis available today.


Innovation

CODE V is the most comprehensive optical design and analysis program in the world. For nearly thirty years, it has led the way with a long series of innovations. These include:

  • Zoom/multi-configuration optimization and analysis
  • Environmental/thermal analysis
  • Fast wavefront differential tolerancing for MTF, RMS wavefront error, fiber coupling efficiency, polarization dependent loss, and Zernike wavefront coefficient performance metrics
  • User-defined constraints in optimization
  • Interferometric interface and optical alignment
  • Non-sequential surface modeling
  • Vector diffraction calculations including polarization
  • Global Synthesis®, the first practical global optimization method for optical design
  • And many more

Recent improvements include extensions to the powerful Macro-PLUS programming language, a graphical user interface (GUI), and several new features for analysis of illumination in optical systems. As with all features of CODE V, these new capabilities offer outstanding depth, generality, and applicability to real-world problems.

 

Quality

ORA is large enough to devote resources to all aspects of software development, from planning to algorithm development to implementation. This includes the all-important discipline of testing to assure quality. We know that our customers count on us for correct results to critical problems, and CODE V has an excellent reputation for accuracy in the many critical optical calculations it performs. To maintain this quality, extensive testing is required,and this important work is a multilevel process at ORA.

  • Test cases developed in parallel with code
  • Automatic test-case checking during development
  • In-house testing by technical staff, including use by ORA's engineering staff
  • Beta test periods at selected customer sites

Complex engineering software is a challenge to develop and test. ORA works hard at all levels to assure a quality product for its customers.

 

Superior Productivity

CODE V helps its users to obtain accurate results quickly and easily - the very essence of productivity. Ease-of-use is an important factor in productivity. A simple graphical user interface (GUI) allows novice and occasional users to get basic results quickly with familiar pulldown menus and other simple mouse operations. Frequent users find that the logical command structure and intelligent default assumptions help them to solve problems with efficiency and confidence. Advanced users appreciate CODE V's completeness and the built-in Macro-PLUS programming language that allows them to customize CODE V output easily.

 

First-Class Support


Use of the Airborne Infrared Echelle Spectrometer model is courtesy NASA Ames Research Center.

Even with an easy-to-use program such as CODE V, engineering can be a complex and sometimes difficult task. ORA is well-known for its excellence and responsiveness in providing technical support by phone, fax, and e-mail. With over 50 person-years of real-world engineering experience, our tech support team provides expert answers to customers' questions, helping them to make the best possible use of the program. Updates are another important aspect of support. With one or more major updates per year, CODE V users always have the latest available technology. Newsletters, training seminars, and complete documentation round out the support picture.

 

 

 

Experience and Commitment

 

 

 

ORA was founded in 1963 as an engineering services company, serving the optical design needs of customers in aerospace and other demanding industries. Now more than forty years later, engineering continues to be an important part of ORA's business, helping our clients, but also helping to make sure CODE V remains the most capable and best-tested optics program available.


'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03
ADS (ARM Developer Suite (v 1.2)소프트웨어  (0) 2009.05.25

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,

2009/05/08 19:42

복사 http://blog.naver.com/labview2004/100066609143

ARM Developer Suite (ADS) v.1.2       옛날에는 팔백~천만원인네 사용 않아서~

ADS1.2 (ARM Developer Suite (ADS) 1.2) 중고 재고가격으로 드려요

ADS(ARM DeveloperSuite)는 ARM사의 C Compiler, Debugger, Assembler, ARM Emulator, ARM Instruction Set 등을 지원하고, RealView DevelopmentSuite 이전 부터 현재에 이르기까지 개발자를 위한 ARM에 기초한 어떠한 ARM 프로세서에서도 동작하도록 하는 효율적인 S/W 개발을 위한 강력한 툴입니다.

< 특징 >

  • Code 생성 툴- C/C++ 컴파일러
  • 강력한 매크로 어셈블러
  • 복잡한 형태의 메모리 맵을 지원하는 링커
  • 윈도우 환경상의 개발환경을 위한 Codewarrior IDE
  • GUI 디버거인 AXD와 ARM symbolic debugger(armsd)
  • Instruction Set Simulator-ARM과 Thumb code Base
  • 지원 Core: ARM7TM, ARM9TM,ARM9ETM,ARM10TM, StrongARM 그리고 IntelXScale
  • 하드웨어디버거(Multi-ICE) 지원
  • 종합적인 온라인 문서

< 지원 플랫폼 >

'Embedded > Softwares' 카테고리의 다른 글

유용한 ARM 어셈블리 분기 명령어  (0) 2010.05.05
모듈명령, diff, patch  (0) 2009.06.08
minicom  (0) 2009.06.03
mobm 이 뭔가요?  (0) 2009.06.03
Code V  (0) 2009.05.25

WRITTEN BY
RootFriend
개인적으로... 나쁜 기억력에 도움되라고 만들게되었습니다.

,