Теория: нехватка озу без програматора

xorkrus
Offline
Зарегистрирован: 22.09.2013

Здравия желаю,

Имею странный, теоретический вопрос.

Написал скетч, который использует много SRAM (ну оперативы) и в итоге получаю как сказано здесь - upload successfully, but not run, or run strangely. Ну это понятно и в принципе логично. Но.

Если я подключаю ISCP програматор (питание не от програматора) - то всё работает нормально. Ну разумеется до ещё большего переполнения SRAM. Почему!? Как-то я не верю, что ардуина от программатора берет память :)

Подопытные USBASP V2 & Arduino Pro Mini 5v\16MHz

С Уважением,

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

я вот нифига не понял. а если отключить програматор то ничего не работает?

xorkrus
Offline
Зарегистрирован: 22.09.2013

Да, начинаются глюки, сбои, зависания и прочая.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

xorkrus пишет:

Да, начинаются глюки, сбои, зависания и прочая.

значит нужно смотреть схему. програматор выдает такт :)

xorkrus
Offline
Зарегистрирован: 22.09.2013

Эм, не догнал. В смысле ардуина тактируется не от своего 16мгц кварца, а от програматорского 12мгц? Или програматор генерирует 16мгц? Так памяти же больше не становится от этого. Вроде.

Схема програматора на странице 6

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

xorkrus пишет:

Эм, не догнал. В смысле ардуина тактируется не от своего 16мгц кварца, а от програматорского 12мгц? Или програматор генерирует 16мгц? Так памяти же больше не становится от этого. Вроде.

Схема програматора на странице 6

а вы напрягитесь и догоняйте. :) програматор задает ТАКТ для slave :)

и нафига мне схема програматора? я и так знаю как он устроен. гораздо интересней куда вы его подключаете.

xorkrus
Offline
Зарегистрирован: 22.09.2013

щас погуглю про такт.

к арудине про мини подключаю, через SPI, как полагается.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

xorkrus пишет:

щас погуглю про такт.

к арудине про мини подключаю, через SPI, как полагается.

а по UART вам религия не позволяет подключать? в общем то полагается именно по UART

xorkrus
Offline
Зарегистрирован: 22.09.2013

UART памяти ещё больше ест :)

У меня и без уарта памяти в притык, а ещё и половины не реализовано :)

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

xorkrus пишет:

UART памяти ещё больше ест :)

У меня и без уарта памяти в притык, а ещё и половины не реализовано :)

я вот щас опять не понял. причем тут загрузчик который позволяет прошивать по UART и оперативная память...

xorkrus
Offline
Зарегистрирован: 22.09.2013

а. ну могу и прошить через уарт, но вопрос ведь не в том. вопрос почему при нехватке озу без програматора сбой, а с програматором все нормально.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

xorkrus пишет:

а. ну могу и прошить через уарт, но вопрос ведь не в том. вопрос почему при нехватке озу без програматора сбой, а с програматором все нормально.

так может это не нехватка ОЗУ?

leshak
Offline
Зарегистрирован: 29.09.2011

Puhlyaviy пишет:

xorkrus пишет:

а. ну могу и прошить через уарт, но вопрос ведь не в том. вопрос почему при нехватке озу без програматора сбой, а с програматором все нормально.

так может это не нехватка ОЗУ?

Есть еще одна вероятность: при програматторе тоже "есть глюки", но выраженные не столь явно.
Скажем у нас есть "нехватка памяти", и в итоге где-то есть выходы за массив, чтение null-указателей и т.п.
Вообщем имеет место быть "начинаем читать/писать куда-попало", а дальше "как повезет".
При отработке бутлоадера, он что-то там меняет/пишет в ту область памяти куда мы полезли "не санкционированно" и мы получаем явно видимый "крах".
А если он не отрабатывал, тот участок памяти остался заполненный нулями и нам просто повезло что мы "краха не наблюдаем" (но это не значит что "все хорошо" и он не может случится "в любом момент").

Но все это конечно... "гадание на кофейной гуще" и притягивание за уши так что "аж уши трещат".
Вероятносто что "что-то не так в схеме/питании", согласен с Пухлявым - гораздо выше.

А еще, есть вероятсноть, что при использовании программатора - используются другие фьюзы. В которых бутлоадер вообще отключен (и память освободилась). Только про это забыли "упомянуть" (или сами не заметили этого).
 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

неси еще гущи :) и хрустальный шар не забудь

vdk
Offline
Зарегистрирован: 14.04.2013

Думаю, надо переходить к экзорцизму

xorkrus
Offline
Зарегистрирован: 22.09.2013

Продолжим спиритический сеанс :) Насколько точна информация, выдаваемая avr-size?

avr-size.exe -C --mcu=atmega328 "C:\Temp.elf"
AVR Memory Usage
----------------
Device: atmega328p

Program:   21036 bytes (64.2% Full)
(.text + .data + .bootloader)

Data:       1809 bytes (88.3% Full)
(.data + .bss + .noinit)

Можно ли верить этой информации о занятом сраме?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Можно.

std
Offline
Зарегистрирован: 05.01.2012

xorkrus

Я имел квест с меню, записью EEPROM, чтением DMX (через сериал) и синтезом софтварного PWM (делаю восьмиканальный DMX диммер, который до кучи имеет кроме DMX встроенные программы, типа чтобы гнать автономно, ну и т. к. он программируемый, т. о. можно редактировать EEPROM, то соответственно имеется экран и кнопки). В итоге поделил надвое, PWM синтюк с приёмником на одной 328, меню с экраном и всякие красивости - на другой, и передача между ними по i2c. Так работает, а всё на одном процессоре не хочет. Причём весь скетч (ваще всё) всего 13 кб, а не пашет. С прерываниями или памятью борода, хз. А по отдельности получается приёмник 8 кб и передатчик 6 кб. Но два кристалла. по другому не захотело.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

О как. Тут пожалуй проще пристрелить , экзорцизм уже поздно.чувака плющит со страшной силой.

xorkrus
Offline
Зарегистрирован: 22.09.2013

Раз можно верить - то я полный лох и задача становится, на данный момент, невыполнима.

Хотя все равно я не совсем понимаю, почему с программатором все работает :)

Всем спасибо, все свободны ;)

leshak
Offline
Зарегистрирован: 29.09.2011

xorkrus пишет:

Продолжим спиритический сеанс :) Насколько точна информация, выдаваемая avr-size?

Точна, но область ее применимости крайне ограничена.
avr-size ничего не знает (и не может знать) о том как и сколько памяти выделяется/освобождается в процессе выполнения програмы. Ничего не знает про то с какими фьюзами вы втолкнете это в камень (будет бутлоадер или нет) и
... главное не знает о ниличии/отсуствии ошибок типа "вышли за границы массива", работаем с нулевыми указателями и т.п. (а при ошибки подобного рода могут проявлятся "как угодно", самым мистическим образом).

xorkrus
Offline
Зарегистрирован: 22.09.2013

В таком случае надо осваивать отладку не на уровне сериал.принт, а глубже. усбасп для таких дел годится?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Таким образом нужно выбирать правильный мк для своих нужд. А если выбрали мк впритык, то осваивайте асм. А то купить программатор и кодить на ардуино иде как то смешно.

xorkrus
Offline
Зарегистрирован: 22.09.2013

Я скорее железячник, нежели программер, но так как нет желающих за просто так написать софт с необходимым функционалом, приходится быдлокодить самому. А иде ардуины с библотеками таймеров и attachinterrupt в стопицот раз более понятна нежели биты регистров, адресов и счетчиков asm c и прочих.

Использование программатора не принципиально, но с ним работают скетчи, которые не работают с сериал-усб и самостоятельно.

__Alexander
Offline
Зарегистрирован: 24.10.2012

не может программатор влиять на работоспособность кода. никак. он может влиять на цепи, питание и еще хрен знает что, но не на программу. вы же железячник, проверяйте.

и кстати да, что за прога так съедает озу? может есть смысл поставить внешнее?

 

 

xorkrus
Offline
Зарегистрирован: 22.09.2013

Может и не может, но факт есть факт. Без программатора девайс зависает после первой итерации. С программатором работает неделю без проблем. Но тема кривого кода не для сего топика, имхо.

Я бы грешил на питание, если бы питал устройство от программатора, но нет - 5V не подключено. Да даже если программатор просто подключить к ардуине (не втыкать в усб), то все становится хорошо.

__Alexander
Offline
Зарегистрирован: 24.10.2012

а может программатор просто хорошо держит ресет, а без него МК тупо ресетится.

xorkrus
Offline
Зарегистрирован: 22.09.2013

мк зависает, а не ресетится