ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
52156 Топик полностью
il-2 (25.02.2006 12:50, просмотров: 1) ответил Sergey_from_Kharkov на Контроль переполнения памяти и стека в AVR
Ответ: Я определяю на практике... Включаю в проект нижепреведенный исходник. _InitStacks вызывается в самом начале для обнуления памяти в стеках возврата и данных. _CalcculateRStack и _CalcculateCStack вызываются из любого места для определения размера неиспользованной (обнуленной) области. PUBLIC _InitStacks PUBLIC _CalcculateRStack PUBLIC _CalcculateCStack ; Forward declarations of segments used in initialization RSEG CSTACK:DATA:NOROOT(0) RSEG RSTACK:DATA:NOROOT(0) RSEG CODE _InitStacks: LDI R18,0 LDI R26,LOW(SFB(RSTACK)) LDI R27,HIGH(SFB(RSTACK)) LDI R24,LOW((SIZEOF RSTACK)-10) LDI R25,HIGH((SIZEOF RSTACK)-10) ; CLI RCALL _FillStackArea LDI R26,LOW(SFB(CSTACK)) LDI R27,HIGH(SFB(CSTACK)) LDI R24,LOW(SIZEOF CSTACK) LDI R25,HIGH(SIZEOF CSTACK) RCALL _FillStackArea ; SEI RET _FillStackArea: ST X+,R18 SBIW R24,1 BRNE _FillStackArea RET _CalcculateRStack: PUSH R18 PUSH R24 PUSH R25 PUSH R26 PUSH R27 LDI R26,LOW(SFB(RSTACK)) LDI R27,HIGH(SFB(RSTACK)) RJMP calcspace _CalcculateCStack: PUSH R18 PUSH R24 PUSH R25 PUSH R26 PUSH R27 LDI R26,LOW(SFB(CSTACK)) LDI R27,HIGH(SFB(CSTACK)) calcspace: LDI R24,0xFF LDI R25,0xFF loop: ADIW R24,1 LD R18,X+ CPI R18,0 BREQ loop MOVW R16,R24 POP R27 POP R26 POP R25 POP R24 POP R18 RET END