mrKirill 1 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба С WinAVR я, к сожалению, не знаком. Если действительно стек установлен на последний байт ОЗУ (а похоже, что это так), и оперативки задействовано всего лишь 953 байта, то не должно быть никаких проблем с выделением 512 байт на стеке... Непонятненько... :( Вот и у меня не складывается, про стек Вы мне с АНТОХ'ой как сказали - все что знал проверил, все вроде бы нормально и размеры верные и адреса указателей...В отличие от IAR, у WinAVR один стек, нужно лишь указать верхний адрес его в линковщике...Что я в общем и сделал. Можете привести карту памяти после компиляции? Вас это интересует 008004b6 B __bss_end 00800206 B __bss_start 000001cc T __ctors_end 000001cc T __ctors_start 00800206 D __data_end 00800100 D __data_start 00000000 W __heap_end 000010ff W __stack Или это? Device: atmega128 Program: 25014 bytes (19.1% Full) (.text + .data + .bootloader) Data: 950 bytes (23.2% Full) (.data + .bss + .noinit) EEPROM: 6 bytes (0.1% Full) (.eeprom) А то чую терминология у нас разница немного :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба 008004b6 B __bss_end 00800206 B __bss_start 00800206 D __data_end 00800100 D __data_start 00000000 W __heap_end 000010ff W __stack[/code] Тут нужен комментарий тех, кто работает с AVR и WinAVR в частности. Заметьте, адреса для областей BSS и данных начинаются с 0x00800000, а стек и куча с 0x0. Не в этом ли проблема? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Насколько я могу сказать - эти цифры там верные, просматривал все значения, все сходилось. Ведь кроме FATFS у меня вся система работает исправно и стабильно (обмен по RS485, куча периферии на i2c, spi, ногодрыганье, динамическая индикация, кое-какая математика не самая сложная). Будь что-то не ладно в адресах - точно бы где-то всплыло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Тогда остаётся одно предположение - в вашей программе слишком много массивов, и они все вместе не помещаются на стеке. Получается, что один массив перезаписывает другой или затирает какие-то другие переменные. Посмотрите внимательнее исходники, и постарайтесь все массивы\объёмные структуры (подобные FIL dataFile) объявить статическими\вынести как глобальные. Так, чтобы память под них резервировалась ещё на этапе компиляции, а не в рантайме. Тогда после компиляции в строке (.data + .bss + .noinit) будет виден реальный размер требуемой оперативной памяти. Динамического выделения памяти (malloc() и т.п.), случайно, в программе нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Массивы есть, но в основном они статические глобальные...не мало локальных...Внимательнее просмотрю этот момент. Динамического выделения точно нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 23 февраля, 2011 Опубликовано 23 февраля, 2011 · Жалоба Насколько я разбираюсь в WinAVR, стека действительно много. Но всё же для проверки наверное надо сделать всё статическим, как сказал sonycman. Добавлю контрольных вопросов. Чему равно _USE_LFN в ffconf.h? Чему равны _MAX_LFN и _FS_REENTRANT? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба Длинные имена мне не требуются, потому #define _USE_LFN 0 При такой первой настройке этот пункт уже не актуален #define _MAX_LFN 255 Касательно этой части, насколько понял, мне это тоже не требуется #define _FS_REENTRANT 0 UPD. Проштудировал все массивы и прочее, изменений в работе FatFS нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 15 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба Понятно... Всё вроде в порядка, всё должно работать. Но не работает... А сами процедуры низкоуровневые вы откуда брали? Или может карточка дурит? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба За основу взял примеры Chan'а, пример с MMC картой, сначала карта никак не отвечала, потом немного откорректировал и все заработало как следует. А тут сейчас выходит 2 варианта: либо проблемы на верхнем уровне, либо на нижнем. Косвенно получается, что верхний уровень в порядке, остается низкий. Что и как проверить на низком уровне? Ведь в общем-то верхние функции благодаря нижним работают, только не полноценно :) Карточки несколько разных, объем только одинаковый, 2Гб. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sonycman 0 24 февраля, 2011 Опубликовано 24 февраля, 2011 · Жалоба Что и как проверить на низком уровне? Проверьте чтение\запись секторов драйвером, что же ещё :) Как по одному, так и сразу группу секторов. В различных местах карты. К примеру, записывайте некую последовательность или прогрессию байт так, чтобы потом считать и сверить на предмет ошибок. У вас есть отладчик? Типа J-Link? Проще всего найти проблему - продебажить запись и чтение по шагам. Это долго - зато вникнете во все нюансы и воочию увидите проблемы :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smk 0 19 июля, 2023 Опубликовано 19 июля, 2023 · Жалоба Вот та-же проблема. Не дописывает в конец, а переписывает. Контроллер H743. Как и что проверять? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться