|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
||||||
Искажение массивов04.06.2020, 21:56. Показов 1459. Ответов 30
Метки нет (Все метки)
Здравствуйте. Раньше писал под пк, теперь есть проект, который нужно сопровождать на c под микроконтроллер, и в общих чертах столкнулся с проблемой искажением данных:
Когда я вывожу на экран первый массив, выводится все корректно. Второй массив почему-то искажается: в первой половине массива появляется какое-то значение 32, которое я не указывал. Вообще, массив портится именно значением 32. Что это за магическое число? Пробовал переставлять массивы местами, ситуация меняется: тот, который объявлен первым выводится без проблем, тот который вторым - искажается. Почему это может быть. Есть у кого идеи?
0
|
||||||
| 04.06.2020, 21:56 | |
|
Ответы с готовыми решениями:
30
Искажение дискретных сигналов Искажение формы сигнала Искажение данных из-за пульсо мера |
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||
| 05.06.2020, 06:03 | ||||
|
посему главный вопрос что за камень? второй вопрос: Что за компилятор? ибо
1
|
||||
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
|
| 05.06.2020, 09:41 [ТС] | |
|
За ответ спасибо. Хорошо, что есть хоть объяснение. А то бред такой пишешь одно значение - он тебе другое подставляет.
Среда разработки Atmel Studio 7.0.
0
|
|
|
|
||
| 05.06.2020, 11:40 | ||
|
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 05.06.2020, 12:12 | ||
|
за атмел студио ничего не могу сказать, давно не работаю но по моему раньше для размешения во флеше(тоже ПЗУ) нужно было писать ключевое слово PROGMEM
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||||
| 05.06.2020, 17:59 | ||||
|
Не по теме: (gcc может скопировать значения массива сама из FLASH в RAM, но учитывать что это константа).
0
|
||||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 05.06.2020, 18:28 | ||
|
массив лежит в флеш но при старте переносит это в RAM нужно чтобы всегда лежало во флешь и по коду обращалось к нему ключевое слово PROGMEM так и позволяет сделать но я не помню к какому компилятору это относится
0
|
||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 05.06.2020, 20:33 | ||
1
|
||
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
|
| 06.06.2020, 12:20 [ТС] | |
|
ValeryS, мне больше всего понравилась версия про нехватку памяти. Хотелось бы как-то убедится или опровергнуть эту версию, так как если памяти действительно не хватает или она в притык, то в принципе код нужно будет переписывать, чтобы не было сюрпризов в других местах. По сему вопрос: Как можно ррасчитать , сколько памяти задействовано при работе моей программы? Можно ли как то вручную это сделать, даже если это муторно?
Всего доступно 4 кб оперативной памяти.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 06.06.2020, 12:58 | |
|
minore, при компиляции программы пишется все ресурсы flech eeprom ram
но у каждого компилятора это по своему еще раз повторю: Atmel Studio я не знаю
1
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 07.06.2020, 19:44 | ||
|
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||||||
| 07.06.2020, 19:49 | ||||||
|
minore, хочешь покажу как можно испортить второй массив
0
|
||||||
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
||
| 09.06.2020, 09:29 | ||
|
Это я к тому, что результат может быть не таким как ожидается ). Для этого есть более надежные способы...
0
|
||
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
|
| 09.06.2020, 09:52 | |
|
0
|
|
|
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
|
|
| 09.06.2020, 13:13 | |
|
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
|
||
| 09.06.2020, 14:02 | ||
|
UB - undefined behavior (Неопределенное поведение)
выход за пределы массива чистое UB https://habr.com/ru/post/216189/ и тут такое заявление
1
|
||
|
|
|||
| 09.06.2020, 20:05 | |||
|
0
|
|||
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
|
| 09.06.2020, 20:14 [ТС] | |
|
Контроллер: риалабовский MC12D8O .
Проверил занятую память: память программ 28% память данных 67%. Отказался от массивов, переписал логику без них. Стала затираться переменная, которая была выше массивов. И тоже либо значением 0 либо 32. Ушел от проблемы следующим образом: из Main все объявления переменных перенес в глобальную область. Все заработало, ничего не затирается. Объясните, почему в локальной и глобальной области работает по-разному. Человек, который до меня вел проект ппредложил смотреть Map проекта, сопоставлять адреса переменных, потому что одна может затирать другую. Почему это может быть? Как одна переменная может затереть другую? Простите за нубские вопросы, но очень хочу разобраться, если есть , что почитать на эту тему - буду благодарен. Но то, что если я из локальной области перенес в глобальную и все заработало говорит о том, что ошибка точно не в алгоритме/ коде. Добавлено через 6 минут """Он похоже использует sprintf """ в точку. Но только для отладки, когда уже все сломалось. А 32 - это код пробела?
0
|
|
|
|
||
| 09.06.2020, 20:20 | ||
|
Заполняют всю ОЗУ паттерном, через линкер скрипт или программно. Запускают программу. Смотрят, какие области озу были перезаписаны в ходе её работы. Обычная проблема - стек задачи слишком мал и при помещении в него данных они вылезли за пределы выделенной стеку области, да затёрли то, что лежало ниже (глобальные переменные). Добавлено через 2 минуты Чуть более продвинуто - прямо в ходе работы программы она проверяет, что нижняя граница стека имеет заданный паттерн и не была затёрта. Если таки была - падаем и вопим о вопиющей ошибке дизайна.
0
|
||
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
|
| 09.06.2020, 20:24 [ТС] | |
|
Rius , Ровно наоборот. Когда я описание переменных из main убрал в глобальную область - все заработало. Затиралось то, что в main. загадка, но факт.
0
|
|
| 09.06.2020, 20:24 | |
|
Помогаю со студенческими работами здесь
20
Искажение аудиосигнала при ресемплинге Ланцоша Что вызывает искажение нижних и верхних пиков сигнала? Даны пять массивов А(4,4),В(4,4),С(4,4),D(4,4)F(4,4).Найти произведение массивов. определение произведения двух массивов оформить в виде процедур искажение окон Искажение изображения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|