RTV forum PL | NewsGroups PL

Rejestracja zdarzeń w STM32F103 przy braku zasilania - jak to zrealizować?

Decyzja zapadła...(mikrokontrolery ST )

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Rejestracja zdarzeń w STM32F103 przy braku zasilania - jak to zrealizować?

Goto page Previous  1, 2

Mario
Guest

Mon Jun 24, 2013 3:33 pm   



W dniu 2013-06-24 17:00, brak pisze:
Quote:
On Monday, June 24, 2013 10:52:50 AM UTC+2, shg wrote:

Poczytaj erraty i dokumentację zanim zaczniesz cokolwiek projektować.
Od tego nalezy zawsze rozpoczac prace.


Nie wiem jak w tym MikroC, ale do gcc w internetach proponują toolchain Code Sourcery, standardowa biblioteka C (newlib) jest tam tragiczna jeżeli chodzi o rozmiar kodu, wygląda jakby była kompilowana z -O3 i dodatkowymi "przyśpieszaczami", w niektórych funkcjach (podstawowych, typu memcpy, strlen) pętle porozwijane są na 16 iteracji, operacje na floatach też jakoś dziwnie spuchnięte. Od jakiegoś czasu noszę się z zamiarem przekompilowania tego z -Os i wyłączonymi turbo optymalizacjami, chyba że ktoś zna jakąś zastępczą bibliotekę.

Czas najwyzszy zapoznac sie z RTOS-ami, np.
eCos -> http://ecos.sourceware.org/
(system jest "wysoce" konfigurowalny i aby uzyc funkcji printf nie trzeba
linkowac calej biblioteki newlib)
ChibiOS -> http://www.chibios.org/dokuwiki/doku.php
itd.


Jest jeszcze FreeRTOS i CooCox. Oba są dostępne w wersji darmowej, która
nie wymusza licencji GPL na aplikację.

--
pozdrawiam
MD

brak
Guest

Mon Jun 24, 2013 5:00 pm   



On Monday, June 24, 2013 10:52:50 AM UTC+2, shg wrote:

Quote:
Poczytaj erraty i dokumentację zanim zaczniesz cokolwiek projektować.
Od tego nalezy zawsze rozpoczac prace.



Quote:
Nie wiem jak w tym MikroC, ale do gcc w internetach proponują toolchain Code Sourcery, standardowa biblioteka C (newlib) jest tam tragiczna jeżeli chodzi o rozmiar kodu, wygląda jakby była kompilowana z -O3 i dodatkowymi "przyśpieszaczami", w niektórych funkcjach (podstawowych, typu memcpy, strlen) pętle porozwijane są na 16 iteracji, operacje na floatach też jakoś dziwnie spuchnięte. Od jakiegoś czasu noszę się z zamiarem przekompilowania tego z -Os i wyłączonymi turbo optymalizacjami, chyba że ktoś zna jakąś zastępczą bibliotekę.

Czas najwyzszy zapoznac sie z RTOS-ami, np.
eCos -> http://ecos.sourceware.org/
(system jest "wysoce" konfigurowalny i aby uzyc funkcji printf nie trzeba
linkowac calej biblioteki newlib)
ChibiOS -> http://www.chibios.org/dokuwiki/doku.php
itd.

shg
Guest

Mon Jun 24, 2013 7:12 pm   



W dniu poniedziałek, 24 czerwca 2013 17:00:54 UTC+2 użytkownik brak napisał:

Quote:
Czas najwyzszy zapoznac sie z RTOS-ami, np.
eCos -> http://ecos.sourceware.org/
(system jest "wysoce" konfigurowalny i aby uzyc funkcji printf nie trzeba
linkowac calej biblioteki newlib)
ChibiOS -> http://www.chibios.org/dokuwiki/doku.php
itd.

Ale co ma system operacyjny do standardowej biblioteki C?
printf() to akurat najmniejszy problem. Potrzebuję małe funkcje standardowe (string.h, stdlib.h itd.). Te nie są w tych OS-ach zrobione na nowo, ani w tych, które proponuje Mario. Wszędzie sugerują linkowanie z newlib.
Całej biblioteki się nigdy nie linkuje (to ma chyba ze 2 MB). Pisanie czegoś na klocki z 64 kB flasha na pokładzie z taką "tłustą" biblioteką jest lekkim nieporozumieniem, bo więcej miejsca zajmują banalne funkcje z bibliotek niż mój kod. Gdybym te funkcje napisał sam i to nawet w C (co zresztą w niektórych przypadkach zrobiłem), to robią się dużo mniejsze, ale zwyczajnie nie chce mi się, za dużo czasu trzeba by na to poświęcić.
OS niczego w tej kwestii nie rozwiązuje.

sundayman
Guest

Mon Jun 24, 2013 8:29 pm   



Quote:
Czas najwyzszy zapoznac sie z RTOS-ami, np.

Na razie na tym poziomie mi to niepotrzebne.
Jak potrzebowałem coś, na czym można zapodać androida, to są fajnie
różne gotowce w postaci np. Samsunga S3C2440 (starawe już), itp ARM9.

Zbynio
Guest

Tue Jun 25, 2013 3:40 pm   



"sundayman" <sundayman@poczta.onet.pl> wrote in message
news:kq05t1$s7h$1@news.task.gda.pl...
Quote:
Pomyślałem sobie, że pora poszukać zastępcy dla AVR.
No i padło na STM32F103.

A czemu nie AVR32 ? A-studio to samo, nawyki te same.

Zbynio
Guest

Tue Jun 25, 2013 3:48 pm   



"sundayman" <sundayman@poczta.onet.pl> wrote in message
news:kqaait$t46$1@news.task.gda.pl...
Quote:

Czas najwyzszy zapoznac sie z RTOS-ami, np.

Na razie na tym poziomie mi to niepotrzebne.
Jak potrzebowałem coś, na czym można zapodać androida, to są fajnie różne
gotowce w postaci np. Samsunga S3C2440 (starawe już), itp ARM9.

Androida to się samemu nie opłaca stawiać.

sundayman
Guest

Tue Jun 25, 2013 4:06 pm   



Quote:
A czemu nie AVR32 ? A-studio to samo, nawyki te same.


o ludzie... przecież już pisałem :)

A tak w ogóle, to żeście mnie skołowali, i zacząłem się ponownie
zastanawiać :)

Na razie to doszedłem do wniosku, że w urządziu, o którym myślę (a w
którym obecnie używam atmega128), to najbardziej by mi się przydała
możliwość lepszej pracy z sygnałem audio - możliwość analizy itp.
Bo na razie wykorzystuję po prostu ADC dość prostą obróbkę, a chciałbym
np. mieć możliwość zrobienia FFT i innych takich rzeczy.

No i do tego celu to chyba fajne są dsPIC, więc trochę im się przyglądam.

brak
Guest

Tue Jun 25, 2013 4:13 pm   



On Monday, June 24, 2013 7:12:15 PM UTC+2, shg wrote:
Quote:
W dniu poniedziałek, 24 czerwca 2013 17:00:54 UTC+2 użytkownik brak napisał:



Czas najwyzszy zapoznac sie z RTOS-ami, np.

eCos -> http://ecos.sourceware.org/

(system jest "wysoce" konfigurowalny i aby uzyc funkcji printf nie trzeba

linkowac calej biblioteki newlib)

ChibiOS -> http://www.chibios.org/dokuwiki/doku.php

itd.



Ale co ma system operacyjny do standardowej biblioteki C?
To iz zwykle jest w jakis sposob dostarczona/zintegrowana oraz przetestowana

i nie ma potrzeby jej "dotykania". Biblioteka C jest jednym z komponetow
systemu i od jej jakosci zalezy jakosc systemu.

Quote:

printf() to akurat najmniejszy problem. Potrzebuję małe funkcje standardowe (string.h, stdlib.h itd.). Te nie są w tych OS-ach zrobione na nowo, ani w tych, które proponuje Mario. Wszędzie sugerują linkowanie z newlib.
Niekoniecznie, np. eCos:

"eCos provides compatibility with the ISO 9899:1990 specification for the standard C library, which is essentially the same as the better-known ANSI C3.159-1989 specification (C-89)."

eCos przekazuje flage -nostdlib do linkera.

Co do newliba to znajomy uzywal jej podobnie tj. startup z "sieci" + wlasny kod
+ newlib. Niestety nie bylo to takie proste (kompliator gcc oczekiwal jakiegos konstruktora) i narzekal, iz po uzyciu funkcji printf rozmiar programu istotnie wzrosl.


Quote:
Całej biblioteki się nigdy nie linkuje (to ma chyba ze 2 MB).
Yyy. Przeciez od dawna juz linker usuwa nie uzywane obj-ty. Tak wiec nie uzywajac "namietnie" biblioteki, likner nie dolaczy jej w calosci.


Quote:
Pisanie czegoś na klocki z 64 kB flasha na pokładzie z taką "tłustą" biblioteką jest lekkim nieporozumieniem, bo więcej miejsca zajmują banalne funkcje z bibliotek niż mój kod. Gdybym te funkcje napisał sam i to nawet w C (co zresztą w niektórych przypadkach zrobiłem), to robią się dużo mniejsze, ale zwyczajnie nie chce mi się, za dużo czasu trzeba by na to poświęcić.

I wynalazl bys kolo, piszac kolejna bibliteke standartowa C dla mikrokontrolerow.


Quote:
OS niczego w tej kwestii nie rozwiązuje.
W przypadku eCos biblioteka C jest jednym z jego komponentow, ktory jest konfigurowalny aby zmniejszyc rozmiar kodu ponad to co jest wstanie zrobic linker - co rozwiazuje problemy z biblioteka C.


Zbynio
Guest

Tue Jun 25, 2013 4:34 pm   



"sundayman" <sundayman@poczta.onet.pl> wrote in message
news:kqcfh1$2jl$1@news.task.gda.pl...
Quote:

Na razie to doszedłem do wniosku, że w urządziu, o którym myślę (a w
którym obecnie używam atmega128), to najbardziej by mi się przydała
możliwość lepszej pracy z sygnałem audio - możliwość analizy itp.
Bo na razie wykorzystuję po prostu ADC dość prostą obróbkę, a chciałbym
np. mieć możliwość zrobienia FFT i innych takich rzeczy.

No i do tego celu to chyba fajne są dsPIC, więc trochę im się przyglądam.

Ale AVR32 ma właśnie rozkazy jak procesory sygnałowe. Tak go zrobili
ciekawie. Skompiluj sobie Speexa i zobacz jak działa na malutkim procku z
tej rodziny.
AtmelStudio jest piękne z tym VAssistX i Visual Studio.

shg
Guest

Tue Jun 25, 2013 6:20 pm   



W dniu wtorek, 25 czerwca 2013 16:13:49 UTC+2 użytkownik brak napisał:

Quote:
Ale co ma system operacyjny do standardowej biblioteki C?
To iz zwykle jest w jakis sposob dostarczona/zintegrowana oraz przetestowana
i nie ma potrzeby jej "dotykania". Biblioteka C jest jednym z komponetow
systemu i od jej jakosci zalezy jakosc systemu.

Zwykle albo nie jest dostarczana a jeżeli jest, to kompilowana z domyślnymi ustawieniami. Integracja polega na tym, że OS używa tej biblioteki..

Quote:
printf() to akurat najmniejszy problem. Potrzebuję małe funkcje standardowe (string.h, stdlib.h itd.). Te nie są w tych OS-ach zrobione na nowo, ani w tych, które proponuje Mario. Wszędzie sugerują linkowanie z newlib.

Niekoniecznie, np. eCos:

"eCos provides compatibility with the ISO 9899:1990 specification for the standard C library, which is essentially the same as the better-known ANSI C3.159-1989 specification (C-89)."

To znaczy tylko tyle, że jest kompatybilny ze standardem, a nie że ma wbudowane wszystkie potrzebne funkcje. Można go skompilować korzystając ze standardowej biblioteki zgodnej z powyższym.


Quote:
Całej biblioteki się nigdy nie linkuje (to ma chyba ze 2 MB).
Yyy. Przeciez od dawna juz linker usuwa nie uzywane obj-ty. Tak wiec nie uzywajac "namietnie" biblioteki, likner nie dolaczy jej w calosci.

W porzedniej wiadomości napisałeś, że "nie trzeba linkować całej biblioteki", rzecz oczywista, ale zabrzmiało to jakby w innych przypadkach trzeba było.

Quote:
OS niczego w tej kwestii nie rozwiązuje.
W przypadku eCos biblioteka C jest jednym z jego komponentow, ktory jest konfigurowalny aby zmniejszyc rozmiar kodu ponad to co jest wstanie zrobic linker - co rozwiazuje problemy z biblioteka C.

Podłubałem trochę. eCos używa newlib jako standardowej biblioteki, ona jest częścią środowiska, nie samego systemu. Na upartego można skompilować z inną (tekst wyżej o kompatybilności), ale trzeba by gmerać w skryptach. Nigdzie w nich nie znalazłem kompilacji newlib z innymi flagami niż domyślne. Domyślne flagi newlib generują kod taki, jak pisałem wcześniej. Żeby uzyskać pożądany efekt, musiałbym ustawić odpowiednie flagi do kompilacji newlib przy budowaniu eCosa, a właściwie toolchaina, a to bez sensu, bo równie dobrze mogę sobie zrobić samą newlib.
Na wszelki wypadek przedstawię to na obrazku:
http://wstaw.org/m/2013/06/25/strcpy.png
Po lewej domyślne flagi, po prawej -Os bez dodatkowych "optymalizacji" i tu leży istota mojego problemu.
Toolchain stąd:
https://launchpad.net/gcc-arm-embedded
Dostępna jest tam libc kompilowana w dwóch wersjach. Zmienny przecinek niestety tylko w jednej wersji.
OS do niczego mi nie potrzebny.

brak
Guest

Thu Jun 27, 2013 4:35 pm   



On Tuesday, June 25, 2013 6:20:29 PM UTC+2, shg wrote:
Quote:
W dniu wtorek, 25 czerwca 2013 16:13:49 UTC+2 użytkownik brak napisał:
snip


Quote:
Podłubałem trochę. eCos używa newlib jako standardowej biblioteki, ona jest częścią środowiska, nie samego systemu.
System RTOS eCos sklada sie z : kernela + driverow + stosow sieciowych oraz roznych biblitek w tym bibliteki standatowej C oraz przeportowanej bibliteki standartowej C++ (uSTL). System eCos moze dzialac bez kernela jak i bez bibliteki standartowej C.


Quote:
Na upartego można skompilować z inną (tekst wyżej o kompatybilności), ale trzeba by gmerać w skryptach.

Trzeba by bibliteke "opisac" w jezyku CDL ->
http://ecos.sourceware.org/docs-latest/cdl-guide/cdl-guide.html
aby stala sie komponentem systemu.

Quote:
Nigdzie w nich nie znalazłem kompilacji newlib z innymi flagami niż domyślne. Domyślne flagi newlib generują kod taki, jak pisałem wcześniej.

Kazdy komponet w systemie eCos jest opisany i konfigurowalny przez skrypty
CDL. Jedna z opcji kazdego komponetu jest zmiana flag kompilatora:

cdl_option CYGPKG_LIBC_STRING_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the C library. These flags are used in addition
to the set of global flags."
}
cdl_option CYGPKG_LIBC_STRING_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the C library. These flags are removed from
the set of global flags if present."
}

Quote:
Żeby uzyskać pożądany efekt, musiałbym ustawić odpowiednie flagi

Dodatkowo w biblitece C eCos jest opcja, ktora rozwiazuje Twoj problem :

cdl_option CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST {
display "Optimize string functions for code size"
flavor bool
default_value 0
description "
This option tries to reduce string function
code size at the expense of execution speed. The
same effect can be produced if the code is
compiled with the -Os option to the compiler."
}

Quote:
do kompilacji newlib przy budowaniu eCosa, a właściwie toolchaina, a to bez sensu, bo równie dobrze mogę sobie zrobić samą newlib.

Trzeba rozroznic budowania toolchaina od budowania systemu. Mieszajac te dwa
zadania doszedles do bednego wniosku iz uzywajac newliba do budowania toolchaina uzyjesz go tez do budowania systemu.

Quote:

Na wszelki wypadek przedstawię to na obrazku:

http://wstaw.org/m/2013/06/25/strcpy.png

Po lewej domyślne flagi, po prawej -Os bez dodatkowych "optymalizacji" i tu leży istota mojego problemu.

Funkcja strcpy z eCosa (opcja CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST
odnosi sie m.in. do to pliku), w ktorej rozwiazany jest Twoj problem !!!
<sciezka do eCosa>/packages/language/c/libc/string/current/src/strcpy.cxx :

externC char *
strcpy( char *s1, const char *s2 ) CYGBLD_ATTRIB_WEAK_ALIAS(__strcpy);

// FUNCTIONS

char *
__strcpy( char *s1, const char *s2 )
{
CYG_REPORT_FUNCNAMETYPE( "__strcpy", "returning addr %08x" );
CYG_REPORT_FUNCARG2( "s1=%08x, s2=%08x", s1, s2 );

CYG_CHECK_DATA_PTR( s1, "s1 is not a valid pointer!" );
CYG_CHECK_DATA_PTR( s2, "s2 is not a valid pointer!" );

#if defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) || defined(__OPTIMIZE_SIZE__)
char *s = s1;

while ((*s1++ = *s2++) != '\0')
;

CYG_REPORT_RETVAL( s );

return s;
#else
char *dst = s1;
const char *src = s2;
CYG_WORD *aligned_dst;
const CYG_WORD *aligned_src;

// If SRC or DEST is unaligned, then copy bytes.
if (CYG_LIBC_STR_UNALIGNED2 (src, dst))
{
while ((*dst++ = *src++) != '\0')
;

CYG_REPORT_RETVAL( s1 );

return s1;
}

aligned_dst = (CYG_WORD *)dst;
aligned_src = (const CYG_WORD *)src;

// SRC and DEST are both "CYG_WORD" aligned, try to do "CYG_WORD"
// sized copies.
while (!CYG_LIBC_STR_DETECTNULL(*aligned_src))
{
*aligned_dst++ = *aligned_src++;
}

dst = (char*)aligned_dst;
src = (char*)aligned_src;

while ((*dst++ = *src++) != '\0')
;

CYG_REPORT_RETVAL( s1 );

return s1;
#endif // not defined(CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST) ||
// defined(__OPTIMIZE_SIZE__)
} // __strcpy()

// EOF strcpy.cxx

dla porownania wersja z newliba:
newlib-1.18.0/newlib/libc/string/strcpy.c :
char*
_DEFUN (strcpy, (dst0, src0),
char *dst0 _AND
_CONST char *src0)
{
#if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
char *s = dst0;

while (*dst0++ = *src0++)
;

return s;
#else
char *dst = dst0;
_CONST char *src = src0;
long *aligned_dst;
_CONST long *aligned_src;

/* If SRC or DEST is unaligned, then copy bytes. */
if (!UNALIGNED (src, dst))
{
aligned_dst = (long*)dst;
aligned_src = (long*)src;

/* SRC and DEST are both "long int" aligned, try to do "long int"
sized copies. */
while (!DETECTNULL(*aligned_src))
{
*aligned_dst++ = *aligned_src++;
}

dst = (char*)aligned_dst;
src = (char*)aligned_src;
}

while ((*dst++ = *src++))
;
return dst0;

Podobne?
Spojrz na adresy URL :
http://sourceware.org/newlib/ i http://ecos.sourceware.org/
Wyjasnienie :

http://en.wikipedia.org/wiki/Cygnus_Support
Cygnus was also the original developer of Cygwin and of eCos, an embedded real-time operating system.
http://en.wikipedia.org/wiki/Newlib
It was created by Cygnus Support as part of building the first GNU cross-development toolchains.


Quote:
OS do niczego mi nie potrzebny.
Tobie nie, ale innym moze istotnie ulatwic wiele spraw a przy okazji moze nauczyc , np. "porzadnego" programowania - trzeba sie dostosowac do standartow kodowania obowiazujacych w danym systemie.


Goto page Previous  1, 2

elektroda NewsGroups Forum Index - Elektronika Polska - Rejestracja zdarzeń w STM32F103 przy braku zasilania - jak to zrealizować?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map