pkernel kai clock()/malloc()/free() tailoring

Christos Houtouridis hoo2.ch.pub at gmail.com
Fri Mar 22 13:15:30 EET 2013


Χαιρετώ ξανά και as i promise: http://hg.chania-lug.gr/hoo2

Βέβαια είναι ακόμα υπό ανάπτυξη, αλλά τουλάχιστον δουλεύει για Cortex-M3/4
που το δοκίμασα μέχρι στιγμής όχι όμως για M4F.  Αυτό θέλει διαφορετικό
context_switching για τους FP registers + ένα πονοκέφαλο το lazy stacking
και δεν το έχω κάνει ακόμα.

Τώρα μερικά συμπεράσματα που άργησαν λιγάκι γιατί έλειπα και που δεν ξέρω
αν είναι αυτονόητα για κάποιους:
Οι δοκιμές έγιναν με την libc (base) και με την newlib (aka nano libc
http://sourceware.org/newlib/)
Επίσης σε καμία περίπτωση, τουλάχιστον με το CooCox που δουλεύω προς το
παρόν δεν χρειάστηκε να "πω" στον Linker να πάρει τις δικές μου συναρτήσεις
αντί αυτών μέσα στη libc.

Base: (size -O0 ~ 25K)
1) Αν δεν παρέχουμε κάποια συνάρτηση από τις malloc/free κτλ τότε ο
compiler γκρινιάζει [cc] sbrkr.c:(.text._sbrk_r+0xc): undefined reference
to `_sbrk'
2) Αν του τη δώσεις αλλά δεν κάνεις τίποτε άλλο τότε οι κλήσεις πάνε ως
εξής:
   malloc() -> _malloc_r() -> _sbrk_r() -> _sbrk()
  Δηλαδή με ένα απλό tailoring της _sbrk() καθάρησες.
3) Αν του δώσεις και τις malloc/free πέρα από την _sbrk() τότε οι κλήσεις
πάνε
   malloc()-> your way
αλλά οι _malloc_r() -> _sbrk_r() -> _sbrk() παραμένει.

Γενικά απλά κάνοντας μια υλοποίηση τις _sbrk() να παίρνει και να δίνει heap
είσαι ΟΚ. (Βέβαια εγώ δεν έκανα αυτό)

NewLib: (size -O0 ~ 6K --> καμία σχέση)
1) Αν δεν παρέχουμε κάποια συνάρτηση από τις malloc/free κτλ τότε ο
compiler γκρινιάζει [cc] sbrkr.c:(.text._sbrk_r+0xc): undefined reference
to `_sbrk'
2) Αν του τη δώσεις αλλά δεν κάνεις τίποτε άλλο τότε οι κλήσεις πάνε ως
εξής (ομοίως με base libc):
   malloc() -> _malloc_r() -> _sbrk_r() -> _sbrk()
  Δηλαδή και εδώ με ένα απλό tailoring της _sbrk() καθάρησες.
3) Αν του δώσεις και τις malloc/free πέρα από την _sbrk() τότε οι κλήσεις
πάνε
   malloc()-> your way
αλλά οι _malloc_r() -> _sbrk_r() -> _sbrk() παραμένει.

Τώρα για την _malloc_r() αυτή είναι μια "και καλά" reentrant έκδοση της
malloc και όχι απλά thread safe. αλλά χρησιμοποιεί ένα struct "τόσο" με το
συμπάθιο, το struct reent.

Αυτά προς το παρόν.

Φιλικά
Χρήστος
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20130322/22216e93/attachment.html>


More information about the Linux-greek-users mailing list