'); }
'); }
수업 내용
1. ADS(Code Warrior , AxD Debugger)
2. H-JTAG(open되어있는 무료 JTAG프로그램(USB는 유료))
3. ARM9 실습보드 세팅
4. ARM instruction 이해
1. JTAG 설치 (H-JTAG, H-Flash(boot rom 굽는 프로그램)
2. boot rom fusing(Firmwre boot code 넣음)
3. AxD Debugger 연결
4. DNW(Hyper terminal) serial
int a = 10; // RW
int b = 0 ; // ZI
int c ; // ZI
func()
{
int d = 20; //stack
c ++ ;
d = d + c;
printf(___); // RO
}
ZI_LIMIT -----------------------------
ZI : BSS(Block storage start 영역)
RW_LIMIT-----------------------------
RW : DATA(RAM 영역)
RO_LIMIT-----------------------------
RO : TEXT, CODE 영역(RAM/ROM)
RO_BASE-----------------------------
functor를 이용한 함수 매크로
매크로도 return을 가지는 함수처럼 구현이 가능하다
괄호안에 , 로 구분되어있는 expr은 하나하나 실행 후에 마지막 expr값을 assign함
(개발 편의를 위해 사용가능)
#define function(pfun, num, str) (printf("[%s]\n", str), pfun[num])
int Add(int x, int y) ;
int Sub(int x, int y) ;
int Mul(int x, int y) ;
int Div(int x, int y) ;
void main()
{
int a = 10, b = 20, c ;
int (*pfun[4])(int,int) = { Add, Sub, Mul, Div } ;
c = function(pfun, 2, "multiply")(a, b) ;
printf("[ %d * %d = %d ]\n", a, b, c) ;
}
int Add(int x, int y) { return (x+y) ; }
int Sub(int x, int y) { return (x-y) ; }
int Mul(int x, int y) { return (x*y) ; }
int Div(int x, int y) { return (x/y) ; }
#include <stdio.h>
#include <stdlib.h>
int add_int(int x, int y) { return (x+y) ; }
int sub_int(int x, int y) { return (x-y) ; }
int mul_int(int x, int y) { return (x*y) ; }
int div_int(int x, int y) { return (x/y) ; }
float add_float(float x, float y) { return (x+y) ; }
float sub_float(float x, float y) { return (x-y) ; }
float mul_float(float x, float y) { return (x*y) ; }
float div_float(float x, float y) { return (x/y) ; }
#define fun(name0, name1, x, y) name0##_##name1(x, y)
#define out(name0, name1, data) out_##name1(name0, name1, data)
#define out_int(name0, name1, data) \
printf(#name0"_"#name1" : [ %d ]\n", data)
#define out_float(name0, name1, data) \
printf(#name0"_"#name1" : [ %f ]\n", data)
void main()
{
int a = 100, b = 20, c ;
float fa = 50.2, fb = 20.4, fc = 0.0 ;
c = fun(add, int, a, b) ; out(add, int, c) ;
c = fun(div, int, a, b) ; out(div, int, c) ;
c = fun(mul, int, a, b) ; out(mul, int, c) ;
fc = fun(add, float, fa, fb) ; out(add, float, fc) ;
fc = fun(div, float, fa, fb) ; out(div, float, fc) ;
fc = fun(mul, float, fa, fb) ; out(mul, float, fc) ;
}
=====================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if 0
struct sData
{
char *pstr, str[24] ;
int b ;
} ;
int add(int x, int y) { return (x+y) ; } ;
int sub(int x, int y) { return (x-y) ; } ;
void main()
{
sData m = {"GL-209" };
*(((int (**)(int, int))m.str)+0) = add ;
*(*(((int (*(*)[2])(int, int))m.str)+0)+1) = sub ;
*(((int *)m.str)+2) = 100 ;
*(((int *)m.str)+3) = 20 ;
m.b = (*(*(((int (*(*)[2])(int, int))m.str)+0)+0))
(*(((int *)(m.str))+2), *(((int *)(m.str))+3)) ;
printf("[ %d ]\n", m.b) ;
m.b = (*(((int (**)(int, int))(m.str))+1))
(*(((int *)(m.str))+2), *(((int *)(m.str))+3)) ;
printf("[ %d ]\n", m.b) ;
for(int u=0 ; u< 7 ; *(m.str+16+u) = *(m.pstr+u++));
printf("[ %s ]\n", m.str+16) ;
strcpy(m.str, "Arminia-209 Ellias-404") ;
printf("[ %s ]\n", m.str) ;
}
#endif
struct sData
{
char *pstr;
union {
int (*fun[2])(int, int);
int a[4] ;
char str[24];
};
int b;
} ;
int add(int x, int y) { return (x+y) ; } ;
int sub(int x, int y) { return (x-y) ; } ;
void main()
{
sData m = {"GL-209" };
m.fun[0] = add ;
m.fun[1] = sub ;
m.a[2] = 100 ;
m.a[3] = 20 ;
m.b = m.fun[0](m.a[2], m.a[3]) ;
printf("[ %d ]\n", m.b) ;
m.b = m.fun[1](m.a[2], m.a[3]) ;
printf("[ %d ]\n", m.b) ;
for(int u=0 ; u< 7 ; u++)
m.str[16+u] = m.pstr[u] ;
printf("[ %s ]\n", &m.str[16]) ;
strcpy(m.str, "Arminia-209 Ellias-404") ;
printf("[ %s ]\n", m.str) ;
}
'Tech & IT > 프로그래밍' 카테고리의 다른 글
Layer를 다루는 C프로그래밍으로 단계별 개선 (0) | 2009.12.10 |
---|---|
C++에서 this에 대해 알아보자 (0) | 2009.12.10 |
CreateThread 와 CRT함수들과의 위험성 여부 (0) | 2009.12.04 |
fopen(CRT) 사용시 멀티스레드(multithread)문제? (0) | 2009.12.01 |
멀티스레드에서 모니터의 개념 (0) | 2009.11.20 |