(월) - 어셈블리어를 모르고 c만 가지고는 절름발이와 같다. - 어셈블리어는 코딩하자고 배우기 보단 체계, 마인드를 갖추기 위해 배운다고 생각하자. - 보조기억장치(HDD,SSD)에 있는 프로그램은 주기억 장치(RAM)로 로딩되어야 실행할 수 있다. - 레지스터는 CPU 내부에 들어 있다. 단순한 저장장치가 아니라 연산시 필요하다 - MOV R0, #1 // 상수는 #(샾,해시태그)을 사용한다. INSTRUCTION (OP CODE) OPERAND MOV R0 #1 machine code로 바이너리화(32bit) 된다. 이 machine code에는 인스트럭션과 오퍼랜드에 대한게 들어 있다. - 포팅 : 다른 플랫폼에 프로그램을 이식하는 것 - .Aligned access unsigned long *p..
1. MMU는 메모리 관리의 핵심적인 역할(가상 메모리와 실제 메모리사이에서 주소 변환)을 한다. 2. CPU에서 memory를 access하기 위해 virtual address를 발생하면 MMU는 이 virtual address를 받아서 page table(가상과 실제 메모리를 연결하는 table)을 통해 physical address에 access 한다. memory는 해당 physical address안의 data를 출력하여 cpu에게 전달 한다. 2-1. table이 존재하는 위치는 TTB(Translation table base address)라고 해서 MMU의 레지스터 중 하나에 저장되어 있다. table은 외부 memory에 존재 한다. or MCU내부 TCM memory에 위치시킬 수도 있..
(월) - cygwin 밑에 exercise.esu.tar 옮기고 cygwin에서 tar xf exercise.esu.tar 입력 - tar : 파일을 뭉쳐 놓은 것 tar xf exercise.esu.tar : 파일을 푸는 것 tar tf exercise.esu.tar : 내용물을 보는 것 - Makefile 수정 - make clean : 만들어 둔 것을 지움 make -f Makefile : make가 Makefile을 실행 make : 이렇게만 쓰면 기본적으론 makefile or Makefile을 찾음(Makefile이 우선순위가 높다) - . -gcc 컴파일러, -ld는 링커 . .c를 .o로 만듬 -> RAMs.ld, .o를 모아서 image로 만듬 . image에서 image.bin을 추출..
(1) 포인터와 배열 - int a = 7; // xxx번 주소에 인트니까 4바이트를 가지고 7을 저장 - int *a_ptr = &a; // &(ampersand) 주소연산자, *(asterisk) 주소값을 저장하는 변수를 선언할때 사용, int형 변수 a의 주소값을 저장하니까 변수 a_ptr도 int형이 되야 한다. - 굳이 포인터를 사용하는 이유? 데이터를 직접 저장하면 데이터의 중복이 많아진다. 주소를 사용하면 어디있는지만 알면 된다. - *a_ptr = 8; // 8을 a_ptr이 저장한 주소값의 변수 a에 8을 저장, indirection - printf("%d %d", a, *a_ptr); // 둘다 8이 나온다 - int a = 123; int *a_ptr = &a; *a_ptr=456; ..