avr-gcc - velikost stacku v nejhorším případě?

Ondrej Stanek ostan89 na gmail.com
Středa Květen 28 23:41:27 CEST 2014


Děkuji za odpovědi, ze souhrnu metod jsem si zvolil "Stack paint" 
řešení, v podstatě jsem kompletně převzal "InstrumentationCode.c" od 
Deana Camery. (Na tohle jméno narážím často a vždy v souvislosti s 
kvalitním a inspirujícím kódem). Do nějakých hrátek se statickou 
analýzou jsem se pouštět nechtěl, neboť by to mohlo být nechtěně 
zatíženo nějakou chybou nebo opomenutím z mojí strany.

Nechal jsem robota běžet ve všech možných režimech a konfiguracích, a 
nakonec jsem si přes UART vypsal kompletní dump SRAM.
Velice mě překvapilo, že stack ukousl ze "stejku" (0xDEADBEEF) jen 80 
bajtů. Čekal jsem tedy daleko více. Na druhou stranu, nikde v kódu 
explicitně nealokuji paměť na zásobníku, funkce mají střídmý počet 
parametrů, rekurze se nekoná, strom volání je poměrně mělký a interruptů 
je je jen pár a nevolají další funkce.

Buffer jsem přesunul do sekce .noinit, která se skutečně linkuje až za 
.bss sekci, jak jsem si ostatně ověřil z memory dumpu. Takže teď můžu 
vesele nafouknout buffer a přitom klidně spát.. Nechám si tam ještě 
navíc 100B rezervu pro stack, pro případ budoucí změny kódu nebo 
nečekaných událostí.

Ještě jednou díky za rady a odkazy!

Ondra Staněk



On 27.5.2014 00:15, Jan Waclawek wrote:
>> Jeden sposob je taky, ze v startup kode sa naplni cela pamat nejakym vzorom (s oblubou sa pouziva 0xDEADBEEF,
> https://github.com/abcminiuser/stackchecker/blob/master/StackChecker/Resources/InstrumentationCode.c
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list

On 27.5.2014 19:28, Miroslav Mraz wrote:
> command cmd1Buf[BUFLEN]__attribute__((section(".xxx")));


Další informace o konferenci Hw-list