malloc, free 구현에 대해 질문 있습니다.

pride4ever의 이미지

s3c2440에 OS 없이 펌웨어로 코딩을 하고 있습니다.
그런데 malloc, free가 아주 초간단 버전으로 스택처럼 동작 되도록 구현되어 있습니다.
아마도 MSTK2440 키트 안에 번들로 들어있던 C 라이브러리가 그렇게 되어 있는것 같습니다.

그런데 이게 속도는 아주 빠르지만 스택 구조라서 순서를 잘 맞춰주어야 합니다.
malloc을 A->B->C 이렇게 했으면 free는 C->B->A 이렇게 해야 한다는 거죠.
만약 순서가 다르면 메모리 주소가 뒤엉켜 버리니 심각한 문제가 생깁니다.

제가 짠 코드는 저렇게 하면 됩니다.
문제는 다른 라이브러리(JPEG 등등)은 그렇게 순서가 맞지 않다는거죠.
(뭐 당연한거죠 ㅠㅠ)
그러니 실행중에 아주 이상한 오동작을 합니다.
몇일동안 왜 그럴까 고민하다가 저놈들이 범인이란걸 알았습니다.

제가 저런 외부 라이브러리를 재구성할수 있을만큼 실력도 없고 시간도 없고 그렇습니다.(ㅠㅠ)
그래서 여기 포럼에 자문을 구해 봅니다.

리눅스의 malloc과 free를 그대로 가져다 쓰면 될까요?
된다면 어떤 걸 가져다 써야 할까요?

도움 부탁드립니다.

익명 사용자의 이미지

사용하시는 컴파일러에서 제공하는 표준C 라이브러리를 사용하면 구현하지 않고도 malloc, free를 사용할 수 있을 것 같은데요.
대신 펌웨어의 초기화 단계에서 해당 표준C 라이브러리에 맞게 초기 설정을 해주거야 하구요.
메모리의 어느 영역을 malloc이 사용하는 heap 영역으로 지정하겠다는 그런 초기화 설정이 필요합니다.

자세한 설정 방법은 사용하는 ARM 컴파일러마다 다르므로 컴파일러 매뉴얼을 보셔야 합니다.

pride4ever의 이미지

아... 찾아보니 관련정보가 있네요.

정말 감사합니다.

나빌레라의 이미지

시간이 없으시다지만, 리눅스의 malloc, free를 포팅하는 시간보단,
KLDP의 제 블로그에 쓴 글을 보고 따라 만드는게 더 빠르실것 같습니다.

http://kldp.org/node/91877

읽어보시면 도움 될겁니다.

더 자세한 내용은 서점에서 "도전 임베디드OS 만들기"라는 책을 보시면 아주 잘 나와 있습니다.

데헷~^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

pride4ever의 이미지

좋은 정보 알려주셔서 감사합니다. ^^

천천히 읽어 보겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.