MicroC/OS-II 3. Memory Management ITISN Technical Lab.

Slides:



Advertisements
Similar presentations
1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형.
Advertisements

1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
C 언어 (STS ) 10. Pointer Applications.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제14장 동적 메모리.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
제 9 장 구조체와 공용체.
-Part2- 제3장 포인터란 무엇인가.
자료 구조: Chapter 3 (2)구조체, 포인터
조 병 규 Software Quality Lab. 한국교통대학교
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Chapter 25. 메모리 관리와 메모리의 동적 할당
Micro C/OS-II 2. Task Management
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제 3장. C보다 나은 C++ II.
07. 디바이스 드라이버의 초기화와 종료 김진홍
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
C 프로그래밍.
Dynamic Memory and Linked List
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
인공지능실험실 박사 1학기 장성만 TCP/IP Socket Programming… 9장 소켓의 다양한 옵션 인공지능실험실 박사 1학기 장성만
임베디드 실습 # LED, 7’Segment 제어
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
자료구조: CHAP 4 리스트 (1) 순천향대학교 컴퓨터공학과 하 상 호.
프로그래밍 랩 – 7주 리스트.
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
컴퓨터 개론 및 실습 11. 동적 메모리 할당.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
메모리 관리 & 동적 할당.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
* 프로그램을 간단히 하기 위해 malloc 성공체크는 안 함
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
5. Semaphores ㈜아이티즌 기술연구소
4. Time Management 아이티즌 기술연구소
Hanoi Tower.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
Canary value 스택 가드(Stack Guard).
데이터 동적 할당 Collection class.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
7주차: Functions and Arrays
Chapter 02. 윈도우 소켓 시작하기.
3. 모듈 (5장. 모듈).
셀프 프로그래밍으로 쓰기 셀프 프로그래밍이란? 프린트포트의 ISP 모듈을 사용하지 않음 부트로더에 의한 펌웨어 다운로드
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
Chapter 11 구조체.
바이트 순서 변환 함수 주소 변환 함수 바이트 조작 함수 원격지 호스트 정보를 얻는 함수
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
제 4 장 Record.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
Pointers summary.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

MicroC/OS-II 3. Memory Management ITISN Technical Lab

메모리 관리의 필요성 필수는 아니다. 단, 효율적인 메모리 관리가 필요할 경우 사용 메모리 단편화 문제 malloc, free(ANSI C)사용시 불규칙한 크기의 메모리 할당 문제 제한된 메모리 사용의 효율성 악화 고정크기 블록을 이용한 해결 크기가 같으므로 할당시간 동일(시간 예측가능) 사용법 os_cfg.h 파일에서 OS_MEM_EN  1로 설정 OSMemCreate(), OSMemGet(), OSMemPut() 사용 가능 단, OSMemQuery()는 별도 ITISN Technical Lab

메모리 컨트롤 블록의 구조 microC/OS-II는 메모리를 파티션단위로 분할하여 관리 각 파티션당 하나의 메모리 컨트롤 블록(MCB)을 가짐 메모리 컨트롤 블록은 파티션 정보를 포함 typedef struct { void * OSMemAddr; void * OSMemFreeList; INT32U OSMemBlkSize; INT32U OSMemBlks; INT32U OSMemNFree; } OS_MEM; // 빈 다음 블록 or 파티션 내의 Free 리스트 // 파티션 생성여부에 따라 다른 용도로 쓰임 // 할당이 시작되는 파티션의 시작번지 // OSMCreate()시 초기화 이후 사용하지 않음 // 파티션 내의 사용 가능한 메모리 블록 개수 // (파티션 생성시 전달인자로 지정가능) // 파티션 내의 메모리 블록 크기 // 파티션 내에 남은 사용 가능한 블록 개수 ITISN Technical Lab

메모리 파티션의 구조 파티션의 최대 개수는 os_cfg.h의 MAX_MEM_PART에서 설정 C:\SOFTWARE\uCOS-II\Ports\AVR\ATmega128\GNU\jlu\DK128 파티션의 최대 개수는 os_cfg.h의 MAX_MEM_PART에서 설정 메모리 컨트롤 블록은 OSMemInit()에서 초기화됨 OSInit()이 해당함수를 자동 호출함 OSMemFreeList 파티션1 파티션2 파티션3 시작주소 osMemAddr OSMemFreeList OSMemblkSize OSMemNBlk OSMemFree osMemAddr OSMemFreeList OSMemblkSize OSMemNBlk OSMemFree osMemAddr OSMemFreeList OSMemblkSize OSMemNBlk OSMemFree 메모리 블록 메모리 블록 OS_MAX_PART = 파티션 최대 개수 (OS_CFG.H에 정의) ITISN Technical Lab

1. 메모리파티션 생성 함수 OS_MEM * OSMemCreate( void * addr, // 파티션용 메모리 영역의 시작주소 INT32U nblks, // 파티션에서 사용할 메모리 블록 수(2이상) INT32U blksize, // 파티션 내 각 메모리블록 크기(바이트) INT8U * err // 에러코드 ); // 리턴: MCB를 가리키는 포인터, NULL(실패) TYPE OS_MEM OS_MEM * CommMem; INT8U CommBuf[16][128]; Void main(void) { INT8U err; OSInit(); CommMem = OSMemCreate(&CommBuf[0][0], 16, 128, &err); OSStart(); } ITISN Technical Lab

2. 메모리블록 할당 함수 void * OSMemGet( OS_MEM * pmem, // 메모리 파티션 EBC 포인터 INT8U * err // 에러코드 ); // 리턴: 메모리 블록을 가리키는 포인터, NULL(실패) OS_MEM * CommMem; Void task(void *pdata) { INT8U * msg; pdata= pdata; for(;;) { msg = OSMemGet(CommMem, &err);//msg 메모리를 가리키는 포 인터 if(msg != (INT8U *) 0) {} // 할당된 메모리 블록 사용 } ITISN Technical Lab

3. 메모리블록 반환 함수 INT8U OSMemPut( OS_MEM * pmem, // 메모리 파티션 ECB 포인터 void * pblk // 반환할 메모리 블록 포인터 ); // 리턴값: 에러코드 1. 에러코드 OS_NO_ERR // 정상 처리 OS_MEM_FULL // 메모리 파티션이 가득 찬 경우 OS_MEM_INVALID_PMEM // pmem이 NULL OS_MEM_INVAlID_PBLK // pblk가 NULL OSMemAddr OSMemFreeList = addr … 메모리파티션 ECB pmem 할당된 메모리 블록 ITISN Technical Lab

예제) 3. 메모리블록 반환 함수 OS_MEM * CommMem; INT8U * CommMsg; Void Task(void * pdata) { INT8U err; pdata = pdata; for(;;) err= OSMemPut(CommMem, (void*) CommMsg); if(Err==OS_NO_ERR) {} // 메모리 블록 반환 성공 } return; ITISN Technical Lab

4. 메모리 파티션의 상태 얻기 INT8U OSMemQuery( OS_MEM * pmem, // 메모리파티션 포인터 OS_MEM_DATA * pdata // 정보를 담아올 구조체 ); //리턴: 에러코드 1. OS_MEM_DATA 구조체 정보 void * OSAddr; // 메모리파티션의 시작 주소 void * OSFreeList; // 자유메모리 블록리스트의 시작 주소 INT32U OSBlkSize; // 각 메모리 블록의 크기(바이트) INT32U OSNBlks; // 파티션에 있는 블록의 총 개수 INT32U OSNFree; // 자유 메모리 블록의 개수 INT32U OSNUsed; // 사용된 메모리 블록의 개수 ITISN Technical Lab

예제) 4. 메모리 파티션의 상태 얻기 OS_MEM * CommMem; Void Task(void * pdata) { INT8U err; OS_MEM_DATA mem_data; pdata= pdata; for(;;) err= OSMemQuery(CommMem, &mem_data); } return; ITISN Technical Lab

실습 예제 1. 256크기의 메모리 블록을 생성하고 0~255까지 저장시킨다. 이 값을 LED에 2진수로 표시하는 프로그램을 작성하시오. ITISN Technical Lab