Модераторы: PILOT, ManiaK, Mazzi
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нарушение памяти, не проходит инициализация переме, Повреждаются текстовые строки. 
V
    Опции темы
Курсант
Дата 14.5.2015, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Здравствуйте! Столкнулся со следующей проблемой: при работе программы нарушаются текстовые строки, предназначенные для вывода в COM-порт через printf (для отладки). Т.е. вместо сообщений в терминале я вижу "кракозяблы". Причём это происходит в зависимости от количества данных в памяти. Т.е. если я подключаю к проекту нагруженные данными модули, то вместо текстовых строк через COM-порт поступает какой-то мусор. Попытка установить прерывание на запись в ячейку памяти (т.к. я посчитал, что какой-то фрагмент кода, использующий указатели или массивы, записывает данные не туда, куда это следует делать, и затирает строки) привела к тому, что запись отлавливается только при выгрузке данных из flash-памяти в startup-e. Т.е., с одной стороны, если startup считать верным, компилятор и линковщик считать не имеющими ошибок, а мой код не записывает в память никаких кракозябл, то не понятно, откуда эти кракозяблы берутся...

Кто-нибудь сталкивался с подобным? Можете подсказать в чём проблема, хотя бы в общих чертах? Может быть какая-то проблема с выгрузкой этих строк при больших объёмах данных? Замечено, что некоторые массивы в программе тоже не инициализируются (а может быть затираются после инициализации) при большом количестве подключенных модулей.
PM ICQ Skype   Вверх
xvr
Дата 14.5.2015, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Варианты (выбирай на вкус  smile )
  • Разрушена куча
  • Переполнился стек
  • Переполнился сегмент данных (что очень маловероятно)
  • Висящие указатели в программе и записи по ним
Попробуйте для разнообразия строки не копировать в память, а использовать напрямую из FLASH

Цитата(Курсант @  14.5.2015,  08:34 Найти цитируемый пост)
Попытка установить прерывание на запись в ячейку памяти (т.к. я посчитал, что какой-то фрагмент кода, использующий указатели или массивы, записывает данные не туда, куда это следует делать, и затирает строки) привела к тому, что запись отлавливается только при выгрузке данных из flash-памяти в startup-e.

Чем ставили прерывание? Данные после начально записи из FLASH были привильными? Проверьте откуда идут данные в COM - чудес не бывает, либо данные испортились (а прерывание не сработало), либо сама процедура вывода в COM была убита и выводила данные не оттуда

PM MAIL   Вверх
Курсант
Дата 20.8.2015, 09:07 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Цитата(xvr @ 14.5.2015,  15:47)
Варианты (выбирай на вкус  smile )[LIST]
[*]Разрушена куча
[*]Переполнился стек
[*]Переполнился сегмент данных (что очень маловероятно)
[*]Висящие указатели в программе и записи по ним

Проблема была тривиальная - скрипт прошивки микроконтроллера для JLink.exe записывал во Flash не всю прошивку. Коллега для экономии времени решил, что прошивка не будет весить более 40 кБ, и сделал скрипт, который пишет только первые 40 кБ прошивки. Таковы издержки использования бесплатного ПО (в нашем случае это eclipse).
PM ICQ Skype   Вверх
xvr
Дата 20.8.2015, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(Курсант @  20.8.2015,  09:07 Найти цитируемый пост)
Коллега для экономии времени решил, что прошивка не будет весить более 40 кБ, и сделал скрипт, который пишет только первые 40 кБ прошивки. Таковы издержки использования бесплатного ПО (в нашем случае это eclipse). 

'Коллега' входил в состав 'бесплатного ПО' ?  smile Или все же это последствия кривых рук (которые сделали хак и не удосужились это хотя бы задокументировать)  smile 

PM MAIL   Вверх
Курсант
Дата 14.9.2015, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

Репутация: нет
Всего: 4



Цитата(xvr @ 20.8.2015,  09:50)
Цитата(Курсант @  20.8.2015,  09:07 Найти цитируемый пост)
Коллега для экономии времени решил, что прошивка не будет весить более 40 кБ, и сделал скрипт, который пишет только первые 40 кБ прошивки. Таковы издержки использования бесплатного ПО (в нашем случае это eclipse). 

'Коллега' входил в состав 'бесплатного ПО' ?  smile Или все же это последствия кривых рук (которые сделали хак и не удосужились это хотя бы задокументировать)  smile

Извините что не сразу отвечаю smile

Коллега не входил в состав "бесплатного ПО", проблема бесплатного ПО в том, что для него нужно писать скрипты и всячески подстраивать под себя, а это увеличивает разрушительность человеческого фактора... Конечно, на мой взгляд, это последствия кривых рук, но все мы несовершенны smile
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)"
PILOT ManiaK
UniBomb Mazzi

На данный раздел помимо Правил форума распространяются текже следующие правила:


  • Прежде чем создать тему воспользуйтесь поиском или посмотрите в faq. Возможно на форуме уже есть ответ на ваш или близкий к вашему вопрос.
  • В заголовке темы в квадратных скобках обозначьте используемое семейство микроконтроллера: [avr],[pic],[arm].
  • При создании темы с вопросом указывайте участок кода с ошибкой, версию компилятора, схемы подключения, fuse биты и прочие данные, которые помогут найти правильный ответ. Для форматирования текста программ используйте кнопку код.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Для флуда, просьб выполнить задание, поиска партнёров или исполнителей существуют свои разделы.
  • Если вы заметили несовместимое с правилами сообщение, то можете уведомить об этом модератора раздела нажав кнопку Репорт у соответствующего сообщения.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема »


 




[ Время генерации скрипта: 0.1313 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.