|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
|
||||||
Искажение массивов04.06.2020, 21:56. Показов 1455. Ответов 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).Найти произведение массивов. определение произведения двух массивов оформить в виде процедур искажение окон Искажение изображения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO
Апнулись до NET10.
Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта
так и в интерактивном режиме. из сложностей - чисто функциональный подход.
Решил. . .
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|