środa, 26 września 2007

Praca dyplomowa: System czasu rzeczywistego GNU eCos na platformie sprzętowej ARM


Publikacja artykułu w magazynie Elektronika Praktyczna Plus ARM

http://www.avt.pl/pisma.php?id=31









System czasu rzeczywistego GNU eCos na platformie sprzętowej ARM

1. Wstep
Temat ten porusza problemy działania i uruchamiania systemu operacyjnego czasu rzeczywistego w urządzeniu mikroprocesorowym oraz zapoznanie się z coraz popularniejszym procesorem ARM.

2. Opis układu Excalibur oraz procesora ARM922T
Excalibur jest to układ, który zawiera w sobie procesor ARM922T oraz wiele urządzeń peryferyjnych. W rozdziale tym przedstawione zostaną cechy układu Excalibur, architektura i funkcjonalność.

3. Opis procesora ARM922T
Procesor ARM922T jest zintegrowanym elementem układu Excalibur. Procesor ten bazuje na architekturze ARM9 z rozszerzeniem trybu pracy Thumb. W rozdziale tym opisana będzie architekturę procesora, jego cechy i budowę.

4. Opis systemu operacyjnego czasu rzeczywistego

5. Wprowadzenie do systemu eCos
eCos system typu open source jest darmowym, operacyjnym systemem czasu rzeczywistego zgodnym z standardami oprogramowań wbudowanych(ang. embedded). Wspierany jest on przez narzędzia GNU, co sprawia, że testowanie w użytkowaniu tego systemu eCos jest niedrogie. W rozdziale tym umieszczony będzie opis ogólny oraz opis poszczególnych elementów i budowy systemu eCos. Istnieje możliwość rozszerzenia tego tematu o:
- Historie systemu eCos
- Sposób licencjonowania systemu eCos
- Terminologie eCos
- Opis Monitora RedBoot
- Architekture systemu eCos
- Mechanizm planowania systemu eCos (ang. schedulers)
- Mechanizm synchronizacji wątków systemu eCos (ang. thread synchronization)

6. Przedstawienie przykładowych aplikacji wielowątkowych działających pod kontrolą systemu eCos
Najlepiej przedstawić działanie systemu eCos na działających aplikacjach w czasie rzeczywistym Pierwsza z aplikacji Hello pokazuje, że system eCos komunikuje się z użytkownikiem drukując na ekranie monitora tekst powitalny. Opis drugiej aplikacji pokazuje współbieżną pracę systemu eCos. W aplikacji każdy proces z osobna liczy i drukuje wynik liczenia na ekranie monitora. Obie aplikacje prezentują komunikację systemu eCos przez łącze szeregowe z komputerem Host. Rozdział będzie, krótki i będzie on zawierał kod źródłowy aplikacji i skan z ekranu monitora.

7. Testowanie systemu eCos
Rozdział zawierać ma opis testowania systemu eCos dzięki zintegrowanemu oprogramowaniu RedBoot, który wykorzystuje wewnętrzny mechanizm gdb oraz własne komunikaty programu. Rozdział będzie bogaty w skany z pracy programu RedBoot.



10. Linki

[1] A. J. Massa "Embedded Software Development with eCos", New Jersey, 2003.
[2] prof. J. Ober, „Systemy czasu rzeczywistego - stan i kierunki rozwoju w zastosowaniach”.
[3] J. J. Labrosse, „Embedded Systems Building Blocks: Complete and Ready-To-Use Modules in C”.
[4] „Excalibur Hardware Reference Manual”, Altera, dokumentacja układu Excalibur.
[5] „ARM9TDMI Technical Reference Manual”, ARM, dokumentacja procesora ARM922T.
[6] „ARM922T Technical Reference Manual”, ARM, dokumentacja procesora ARM922T.
[7] „GNUPro® Toolkit User’s Guide for Altera for ARM® and ARM/Thumb® Development”.
[8] www.arm.com, źródło danych o architekturze procesora ARM 922T.
[9] www.altera.com, informacje o układzie Excalibur.
[10] www.micrium.com, podstawowe informacje o systemie µCOS-II.
[11] http://ecos.sourceware.org, informacje o systemie eCos.

wtorek, 25 września 2007

Emacs - Tygrys w programowaniu

Emacs - Tygrys w programowaniu

Wsparcie dla profesjonalnego programowania
1.0 CSCOPE

Szybkie i zaawansowanie wyszukiwanie i przechodzenie do kodu c, c++.
Projekt CSCOPE ma dostepna konfigurację dla edytora emacs co sprawia, że cscope całkowicie jest zintegrowany z emacsem.

Włączenie cscope w emacsie:
(require 'xcscope)

Podstawowe skróty klawiszowe dla cscope:
(global-set-key [(control x) (meta n)] 'cscope-set-initial-directory )
(global-set-key [(control x) (meta o)] 'cscope-find-this-symbol )
(global-set-key [(control x) (meta p)] 'cscope-find-global-definition )
(global-set-key [(control x) (meta r)] 'cscope-pop-mark )
(global-set-key [(control x) (meta b)] 'cscope-display-buffer )
(global-set-key [(control x) (meta t)] 'cscope-display-buffer-toggle )




Najwiekszą zaletę czyli szybkie wyszukiwanie proszę spróbować wyszukać dowolny tekst w źródłach kernela linuksa i porównać z wyszukiwaniem np. w Total Commanderze.





2.0 ECB (Emacs source code browser)

Bardzo wygodne i z wieloma możliwościami środowisko dla edycji kodu C, C++ i Java.
Środowisko może nie przypomina swojego konkurenta Microsoftowego edytora czy innego Buildera, bo jest ono zintergrowane z emacsem. Zaleta emacsa i vima jest taka, że w obu wykorzystanie myszki jest minimalne.
Środowisko ECB ma takie możliwości, że trudno od razu poznać wszystkie skróty i udogodnienia.

Oko ECB:










Włączenie środowiska ECB e emacsie:
(add-to-list 'load-path "/tools/emacs/ecb-2.32")
(require 'ecb-autoloads)

Uruchomienie środowiska ECB:
(global-set-key [(control x) (meta z)] 'ecb-activate )

Połączenie obu projektów przy edycji C, C++ to sama przyjemność pracy w C i C++(zapewne też i w Javie).

3.0 Skróty w programowaniu, czyli to co tygryski lubią najbardziej


Można także samemu napisać sobie własne makro i uruchamiać je z zdefiniowanego skrótu:
(defun put-comment-function ()
(interactive)
(insert-string "//******************************************************************\n")
(insert-string "/** ")
(save-excursion
(insert-string "\n * \\param \n")
(insert-string " * \\remarks \n")
(insert-string " * \\return void\n")
(insert-string "*/\n")
(insert-string "//******************************************************************\n")
(kill-region (point)
(progn
(re-search-forward "[^ \t\n]" nil t)
(1- (point)) )) ))

Poniższe makro wstawia komentarz dla funkcji:
//******************************************************************
/**
* \param
* \remarks
* \return void
*/
//******************************************************************


4.0 Konfiguracja emacsa


Konfiguracja dla języka c++ i C

(defun my-c++-mode-hook ()
(setq tab-width 4)
(define-key c++-mode-map "\C-m" 'reindent-then-newline-and-indent)
(define-key c++-mode-map "\C-ce" 'c-comment-edit)
(setq c++-auto-hungry-initial-state 'none)
(setq c++-delete-function 'backward-delete-char)
(setq c++-tab-always-indent t)
(setq c-indent-level 4)
(setq c-continued-statement-offset 4)
(setq c++-empty-arglist-indent 4))

Ustawienie koloru kursora na zielony:

(set-cursor-color "green")

Ustawienie koloru tła i tekstu:
(set-foreground-color "green")
(set-background-color "black")

Ustawienie skrótu do shela
(global-set-key [f3] 'shell)
Emacs umożliwia uruchomienie powłoki shella w sobie. Co to tak naprawdę umożliwia?
To, że możemy cokolwiek uruchamiać i kompilować. Czym się to różni od kompilacji czy uruchamiania w zwykłej powłoce bez emacsa. To, że wynik kompilacji umieszczony jest w buforze. Cokolwiek zostanie wygenerowane podczas kompilacji to z tym możemy robic co chcemy, czyli?
Możemy wyszukiwać błędy kompilacji na przeróżne sposoby. Możemy trzymać ten wynik w buforze, zawsze mamy ten wynik dostepny. Możemy wyszukiwać bardzo zawiłe "warningi" i "errory". Możemy odnosić się do kodu źródłowego bez wklepywania szukanego błędu, albo poprostu kopiować tekst "warninga" czy "errora" z bufora.
Emacs to naprawdę wydajne środowisko. Nie ma żadnych problemów z uruchomieniem kompilacji na 20 minut i przeglądanie oraz przetwarzanie kilkudziesięciu stron tekstu z wynikami. Po prostu proszę samemu spróbować z dużym projektem w emacsie.

Włączenie stylu formatowania dla języka c,C++ na "K&R"
(c-set-style "k&r")

Skrót Meta \ pozwala formatować tekst. Dla mnie była to pierwsza zaleta edytora emacs, która sprawiła, że porzuciłem naukę edytora Vim i rozpocząłem długą wędrówkę z edytorem emacs.

Automatyczne ustawienie odstępu tag na 3:
(setq tab-width 3)

Dodatkowe pakiety, które rozszerzają możliwości emacsa w programowaniu:

emacs-tiny
x-symbol
x-ref
etags
completion
oo-browser
xrefactory
session
ede