Alex ma
Aug 19 2006, 06:35
Например CodeVisionAVR,если проект создается в Wizarde, добавляет код очистки ОЗУ:
CLEAR SRAM
000024 e080 LDI R24,LOW(0x400)
000025 e094 LDI R25,HIGH(0x400)
000026 e6a0 LDI R26,0x60
__CLEAR_SRAM:
000027 93ed ST X+,R30
000028 9701 SBIW R24,1
000029 f7e9 BRNE __CLEAR_SRAM
В принципе и добавляет код очистки рабочих регистров:
CLEAR R2-R14
00001e e08d LDI R24,13
00001f e0a2 LDI R26,2
000020 27bb CLR R27
__CLEAR_REG:
000021 93ed ST X+,R30
000022 958a DEC R24
000023 f7e9 BRNE __CLEAR_REG
Проблема в том как запихнуть код очитки ОЗУ в IAR 4.20a, после старта программы с вектора сброса. А нужно ли вообще?
big256
Aug 19 2006, 07:59
Цитата(Alex ma @ Aug 19 2006, 09:35)

Проблема в том как запихнуть код очитки ОЗУ в IAR 4.20a, после старта программы с вектора сброса. А нужно ли вообще?
А смысл в этом то какой ?! Если у вас есть не инициализированые переменные они должны будут отинитится нулями(это сделает компилятор еслы ва конешно там не поставите ноинит

).
Чем вас не устривают "какието" значения в остальной части озу ?
Alex ma
Aug 19 2006, 15:51
Раньше программировал на ассемблере, и один раз долго отлавливал глюк. Оказалось все просто, программа большая(относительно), проблема была и за инициализации переменной в ОЗУ нулями. Тут перешел на СИ CodeVisionAVR(Присматриваюсь к IAR). Действительно если, компилятор отслеживает инициализацию переменных, проблем быть не должно, в общем ассемблер заставляет очень осторожно работать с данными - начинаешь верить в чудеса, перешел на си сомнения остались. Привык просто видеть чистое ОЗУ.
Цитата(Alex ma @ Aug 19 2006, 18:51)

Раньше программировал на ассемблере, и один раз долго отлавливал глюк. Оказалось все просто, программа большая(относительно), проблема была и за инициализации переменной в ОЗУ нулями. Тут перешел на СИ CodeVisionAVR(Присматриваюсь к IAR). Действительно если, компилятор отслеживает инициализацию переменных, проблем быть не должно, в общем ассемблер заставляет очень осторожно работать с данными - начинаешь верить в чудеса, перешел на си сомнения остались. Привык просто видеть чистое ОЗУ.

В соответствии со стандартом языка все статические переменные по умолчанию инициализируются нулями. Обычно это делается в модуле startup, или аналогичном.