malloc, free 구현에 대해 질문 있습니다.
글쓴이: pride4ever / 작성시간: 화, 2011/04/05 - 9:24오후
s3c2440에 OS 없이 펌웨어로 코딩을 하고 있습니다.
그런데 malloc, free가 아주 초간단 버전으로 스택처럼 동작 되도록 구현되어 있습니다.
아마도 MSTK2440 키트 안에 번들로 들어있던 C 라이브러리가 그렇게 되어 있는것 같습니다.
그런데 이게 속도는 아주 빠르지만 스택 구조라서 순서를 잘 맞춰주어야 합니다.
malloc을 A->B->C 이렇게 했으면 free는 C->B->A 이렇게 해야 한다는 거죠.
만약 순서가 다르면 메모리 주소가 뒤엉켜 버리니 심각한 문제가 생깁니다.
제가 짠 코드는 저렇게 하면 됩니다.
문제는 다른 라이브러리(JPEG 등등)은 그렇게 순서가 맞지 않다는거죠.
(뭐 당연한거죠 ㅠㅠ)
그러니 실행중에 아주 이상한 오동작을 합니다.
몇일동안 왜 그럴까 고민하다가 저놈들이 범인이란걸 알았습니다.
제가 저런 외부 라이브러리를 재구성할수 있을만큼 실력도 없고 시간도 없고 그렇습니다.(ㅠㅠ)
그래서 여기 포럼에 자문을 구해 봅니다.
리눅스의 malloc과 free를 그대로 가져다 쓰면 될까요?
된다면 어떤 걸 가져다 써야 할까요?
도움 부탁드립니다.
Forums:
컴파일러의 표준 C 라이브러리
사용하시는 컴파일러에서 제공하는 표준C 라이브러리를 사용하면 구현하지 않고도 malloc, free를 사용할 수 있을 것 같은데요.
대신 펌웨어의 초기화 단계에서 해당 표준C 라이브러리에 맞게 초기 설정을 해주거야 하구요.
메모리의 어느 영역을 malloc이 사용하는 heap 영역으로 지정하겠다는 그런 초기화 설정이 필요합니다.
자세한 설정 방법은 사용하는 ARM 컴파일러마다 다르므로 컴파일러 매뉴얼을 보셔야 합니다.
ARM 컴파일러에 있는 라이브러리가 제가 말한
아... 찾아보니 관련정보가 있네요.
정말 감사합니다.
시간이 없으시다지만, 리눅스의 malloc,
시간이 없으시다지만, 리눅스의 malloc, free를 포팅하는 시간보단,
KLDP의 제 블로그에 쓴 글을 보고 따라 만드는게 더 빠르실것 같습니다.
http://kldp.org/node/91877
읽어보시면 도움 될겁니다.
더 자세한 내용은 서점에서 "도전 임베디드OS 만들기"라는 책을 보시면 아주 잘 나와 있습니다.
데헷~^^
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
좋은 정보 알려주셔서 감사합니다. ^^ 천천히 읽어
좋은 정보 알려주셔서 감사합니다. ^^
천천히 읽어 보겠습니다.
댓글 달기