реклама на сайте
подробности

 
 
> Пересечение адресов переменных
Wano
сообщение Jan 3 2009, 20:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Обнаружил странную проблемку. В прожке есть глобальный массив char[2000]. При вызове функций записи в файл командами FatFS, все переменные в функциях своими адресами влазать в массив. Менял размер массива - никакого толку не даёт. Все локальные переменные в функциях именно FatFS своими адресами пересакают конец массива, отсюда значения в массиве заолняются мусором. Прога в uVision, проц LPC2478. Может кто такое наблюдал? Как вариант думал всё стереть и начать заново, но если есть проблема,как бы не вылезла в другом месте. Число портящихся байт ~300.
Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rimpocha
сообщение Jan 3 2009, 21:56
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 6-03-07
Из: Новосибирск, Seattle
Пользователь №: 25 935



Это точно стек переполняется.

Попробуйте оптимизировать использование стека с помощью динамического выделения памяти под локальные переменные из кучи (malloc) или уменьшив глубину вложенности функций. Ну или увеличте стек smile.gif
Обращайте внимание сколько отжирают от стека библиотечные функции.


--------------------
НГТУ, Физико-технический факультет, кафедра Лазерных систем
Go to the top of the page
 
+Quote Post
Wano
сообщение Jan 5 2009, 14:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Кароче проблема решается объявлением переменной файла как глобальной. Подобно FatFS либа EFSL также не пашет с локальными файловыми переменными.
Может что-то делаю не так, но если создавать в своей функции записи локальную переменную типа FIL, то при вызове любых функций FatFS происходит пересечение адресов. Странно но факт.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 5 2009, 15:37
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Wano @ Jan 5 2009, 16:46) *
Подобно FatFS либа EFSL также не пашет с локальными файловыми переменными.
Вот так всегда: в первую очередь "либа кривая". Почему-то у остальных "пашет", у вас нет, и виновата, конечно же, либа.
Цитата(Wano @ Jan 5 2009, 16:46) *
Может что-то делаю не так
100%. Если вы объявляете переменную глобально, память под нее выделяется на этапе линковки. Если локально - она размещается на стеке. Если стека не хватает - естественно, будут затираться какие-то другие данные, на которые наползет стек. Переменная типа FIL кроме 40 байтов данных содержит еще и буфер на 512 байт. Итого 542 байта. А сколько стека у вас выделено всего?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Wano   Пересечение адресов переменных   Jan 3 2009, 20:12
- - sergeeff   Недостаточно выделено места под стек. Попробуй выд...   Jan 3 2009, 21:01
|- - rimpocha   Цитата(Wano @ Jan 5 2009, 20:46) Кароче п...   Jan 5 2009, 15:41
- - sergeeff   Ну еще не ясно, товарищ откравает файл - пишет/чит...   Jan 5 2009, 16:07
|- - Wano   Цитата(sergeeff @ Jan 5 2009, 18:07) Ну е...   Jan 6 2009, 13:13
|- - Сергей Борщ   Цитата(Wano @ Jan 6 2009, 15:13) Хороший ...   Jan 6 2009, 14:22
|- - Wano   Цитата(Сергей Борщ @ Jan 6 2009, 16:22) Т...   Jan 6 2009, 15:09
|- - Сергей Борщ   Цитата(Wano @ Jan 6 2009, 17:09) А где мо...   Jan 6 2009, 15:38
- - sergeeff   А разве не в startup'e задается размер стеков?   Jan 6 2009, 16:55
|- - HARMHARM   Цитата(sergeeff @ Jan 6 2009, 18:55) А ра...   Jan 6 2009, 20:24
|- - defunct   Цитата(HARMHARM @ Jan 6 2009, 22:24) Нет....   Jan 6 2009, 21:19
- - Wano   ))) ннда приплыл. Больше глупых постов делать не б...   Jan 6 2009, 18:00


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 10:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016