Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Причина повреждения String данных массива?


Причина повреждения String данных массива?

Сообщений 1 страница 9 из 9

1

Хай товарищи! Столкнулся с проблемой повреждения данных всех трёх ячеек в массиве из 3-х ячеек через сутки, другие работы. Меня интересует какие события могу повредить данные? Как может затронуться массив МК mega1284. Длинна строк 11 символов, храниться там 10 символов адреса, он загружается при старте из EEPROM. Но ладно бы 1 ячейка еще можно было а тут целый массив, изменил объявления переменных но тот же эффект но данные там оказываются другие уже.
Как можно попробовать определить проблему? Притом эта же прошивка на mega128 но там проблем не было пока, правда там обмен данными на порядок меньше.

-2

2

Непонятно: код, алгоритм, условия.

0

3

Но я абы спросил про возможность повреждения данных. Тема совсем не о том чем занимаются кошка с котом.
А тема о том кто сталкивался с подобным. Да именно с повреждением данных String. Переполнений быть не может.
Интересует факт при изменении порядка объявления переменных меняются ли адрес памяти если нет то как можно поменять?

Вопросов несколько: при переполнении числовой переменной это опасно для других данных, скажем присваивание запредельного значения из другой переменной большей разрядности. Такого тоже быть не может но я наперёд. У меня значение 16бит таймера при кладётся в переменную типа Word думаю тут не должно переолняться, значение присваивается при возникновении внешних прерываний таймер при это сбрасывается, переменные выбираются тут наименьшей разрядности как частота высокая доходит до 40КГц, то есть частота с приёмника шума до 20КГц прерывание по спаду и по фронту и того в 2 раза больше, но конечно при передачи данных там меньше в разы всего то до 8КГц.

Работа с переменными String из основного потока и прерывания абсолютно разных ясно дело хотя сейчас я это исключил.

В любом случае я не могу показывать код который мог бы раскрыть протокол связи и шифрования. Да и кода под 100Кб.

Отредактировано RadioHAM-433 (2016-04-19 01:31:23)

-1

4

RadioHAM-433 написал(а):

Тема совсем не о том чем занимаются кошка с котом.

Это из серии почему у меня течет унитаз, но я вам его не покажу.
Вы поставили вопрос так, что ответить на него невозможно. Маловероятно, что сбой происходит по аппаратной причине. Скорее всего дело в программе, а без нее анализ сбоя не провести и причину не выявить.

+2

5

sva-don написал(а):

Вы поставили вопрос так, что ответить на него невозможно.


Ну почему же, вопрос вполне конкретный:

RadioHAM-433 написал(а):

кто сталкивался с подобным


В таком ключе, ответ очевидный: таких проблем никогда не испытывал. :D

0

6

Ну да. Каков вопрос, таков и ответ. "Кто сталкивался?" Отвечу: я сталкивался. Стало легче? :)

Смотреть в сторону стеков и преобразования в строки, длина которых может превысить указанную в Dim.

В баскоме где-то есть отчет по проекту, где показывает в числе прочего и адреса переменных.

0

7

Так пока вроде норм после того как запретил запуску обработчика принятого параллельно. Но хз что будет дальше, оно не стразу проявляется а как стимулировать хз, от чего глючило тоже хз. Так что пока погляжу за работой. Но уж переполнение допустить такие вещи не писать. С переполнением string сталкивался когда начинал повреждались другие переменные. На mega1284 переменные с большим запасом на фоне то его SRAM.

Но логический ошибок нет, всё дело чисто в поведении программы на более низком уровне. Наверное дело было когда обработчик запускался принятого по UART и там еще приём идёт. Хотя опять таки это ни как не мой промах а особенность работы чего то, чисто логически они не как не могли привести к таким вещам.

В обще несколько операций со string, сравнение копирование добавление в основном потоке, добавление преобразование binval в прерывании, всё это дело носило абсолютно случайный характер, как попадут передачи. Приём данных да еще и обработка сторонних протоколов немного путаная вещь потому пока не будешь знать всё о протоколе и о работе обработчика то понять что в какой момент вызывается не получится, врятли кому то захочется изучать кучу писанины. Наши протоколы оптимизированы под самые сложные условия.

А кто еще скажет в чём отличие скажем в массиве и отдельных переменных? Но если массив весь летел а переменные наверное не все летели бы?

Вот кто может сказать такую вещь когда происходит прерывание то когда происходит переход, при сравнении переменных string может приходить переход или сравнение завершиться? При копировании тоже самое?

Но а тот кто таких проблем не испытывал повезло вам у всех ведь задачи разные, я тоже до этого проблем не испытывал подобных ни разу, а тут то же ядро по факту а на mega1284 задурило на mega328 и mega128 проблем не было хотя там было пару ляпов которые я нашёл тут уже.

Отредактировано RadioHAM-433 (2016-04-21 10:11:48)

0

8

Если алгоритм "хз", то всё так и работает.
Ясен пень, что перед тем как эксплуатировать, надо убедится, что все блоки программы корректно работают...

-1

9

Но проблема реализовалась сейчас дело было как раз в запуске параллельных операций со string. Не знал что на одном МК так можно а на другом уже нет. Теперь буду осторожнее со string.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Причина повреждения String данных массива?