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

 
 
> 2 прошивки в памяти, Странное поведение
qVlad
сообщение Apr 25 2011, 10:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Хочу записать во флешку две прошивки и при необходимости грузиться либо с одной, либо с другой. Первая прошивка пишется с начала флешки. Все нормально работает. Вторую прошивку пишу с адреса 0x8000. с середины флешки. если ее записывать на пустую флешку, все тоже нормально работает. если записать обе прошивки, то не работают.

Файл конфиг для IAR
Прикрепленный файл  cfgxm64a3_.txt ( 3.36 килобайт ) Кол-во скачиваний: 271


Прошивка с 0 адреса
Прикрепленный файл  Flash.txt ( 191.32 килобайт ) Кол-во скачиваний: 115


Прошивка с 0х8000 адреса
Прикрепленный файл  FLASHdef.txt ( 101.42 килобайт ) Кол-во скачиваний: 123


Подскажите что я делаю не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Палыч
сообщение Apr 25 2011, 11:07
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Вы бы сами на файлы поглядели бы: неиспользованная память - заполнена FF
Go to the top of the page
 
+Quote Post
qVlad
сообщение Apr 25 2011, 11:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Цитата(Палыч @ Apr 25 2011, 15:07) *
Вы бы сами на файлы погляlели бы: неиспользованная память - заполнена FF

А чем ее нужно было заполнять?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 25 2011, 11:12
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(qVlad @ Apr 25 2011, 15:08) *
А чем ее нужно было заполнять?
Её, как раз, ничем заполнять не нужно
P.S. Скорее всего, в Вашем случае это заполнение вредно: заполненное кодом FF "перетирает" полезное содержимое другого файла... Слово "флешка" в первом посте - это ведь не flash-память программ Вашего МК?
Go to the top of the page
 
+Quote Post
qVlad
сообщение Apr 25 2011, 11:17
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Цитата(Палыч @ Apr 25 2011, 15:12) *
Её, как раз, ничем заполнять не нужно


Пересобрал прошивки без заполнителя. Результат тот же. При считывание памяти МК неиспользуемая память все равно заполнена FF
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 25 2011, 11:26
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(qVlad @ Apr 25 2011, 15:17) *
При считывание памяти МК неиспользуемая память все равно заполнена FF
Ага, значит записываете, всё-така в память программ... FF - это, нормально, стёртая память читается как FF
Цитата(qVlad @ Apr 25 2011, 15:17) *
Пересобрал прошивки без заполнителя. Результат тот же.
А у Вас начало памяти программ заполнено разными данными в обоих файлах!
Go to the top of the page
 
+Quote Post
qVlad
сообщение Apr 25 2011, 11:31
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Цитата(Палыч @ Apr 25 2011, 15:26) *
А у Вас начало памяти программ заполнено разными данными в обоих файлах!


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

Допустим начало памяти разное, сначала я записываю прошивку,которая начинается с 0х8000 адреса. потом записываю прошивку которая начинается с 0 адреса, по идеи хотя бы та что с нулевого должна же грузится. А у меня контроллер не подается признаков того что прошивка начинает работу
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 25 2011, 11:40
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(qVlad @ Apr 25 2011, 15:31) *
Допустим начало памяти разное, сначала я записываю прошивку,которая начинается с 0х8000 адреса. потом записываю прошивку которая начинается с 0 адреса, по идеи хотя бы та что с нулевого должна же грузится. А у меня контроллер не подается признаков того что прошивка начинает работу
Каждый файл начинается с расположенной по адресу 0 команды перехода на начало программы: 0C94624B или 0C949551. Первые два байта - одинаковые, а вот адреса переходов - разные. при программировании в предварительно стёртой памяти (содержит FF) "прописываются" нолики, при записи второго файла - эти ячейки уже не будут содержать FF, но "добавятся" нолики из другого файла.
И, вообще, - не понятно: как вы собираетесь запускать программу из второй половины памяти? Вектора у Вас разделятся между программами как будут?
Go to the top of the page
 
+Quote Post
qVlad
сообщение Apr 25 2011, 11:45
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Цитата(Палыч @ Apr 25 2011, 15:40) *
Каждый файл начинается с расположенной по адресу 0 команды перехода на начало программы: 0C94624B или 0C949551. Первые два байта - одинаковые, а вот адреса переходов - разные. при программировании в предварительно стёртой памяти (содержит FF) "прописываются" нолики, при записи второго файла - эти ячейки уже не будут содержать FF, но "добавятся" нолики из другого файла.
И, вообще, - не понятно: как вы собираетесь запускать программу из второй половины памяти? Вектора у Вас разделятся между программыми как будут?


Это все равно не объясняет проблемы что не грузиться даже прошивка расположенная в начале памяти. Ведь получается все данные для нее верные. Или я что-то не понимаю?

Помимо двух прошивок еще есть бутлоадер, который собственно и будет указывать с какого адреса стартовать программе. Сейчас он не используется.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Apr 25 2011, 12:04
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(qVlad @ Apr 25 2011, 15:45) *
Или я что-то не понимаю?
Ещё раз: при программировании - "прошиваются" нолики. У Вас в первых четырех байтах одной прошивки 0C94624B, второй - 0C949551... После прошивки памяти этими двумя прошивками: первые четыре байта будет содержать 0С940041 (нолики из обоих файлов - сложатся, добавятся к содержимому ячеек памяти)...
Цитата(qVlad @ Apr 25 2011, 15:45) *
Помимо двух прошивок еще есть бутлоадер, который собственно и будет указывать с какого адреса стартовать программе. Сейчас он не используется.
А откуда BootLoader узнает стартовые адреса ваших программ. При "нормальной"(раздельной) загрузке Ваших файлов вектор 0 содержит команду перехода на "стартовый" адрес (у Вас там ещё какой-то вектор используется, и, может, - не один). Вектора всегда (за исключением BootLoader'а) используют фиксированные адреса для векторов прерываний. Они то и портятся при "заливке" двух прошивок одновременно...

То, что под вторую программу Вы отвели вторую половину памяти, не означает, что "стартовый" адрес второй программы = 8000. С этого адреса распологаются команды, но, команда, которая должна выполнится первой - совсем не с этого адреса!
Go to the top of the page
 
+Quote Post
qVlad
сообщение Apr 25 2011, 12:15
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 10-01-11
Из: Санкт-Петербург
Пользователь №: 62 125



Цитата(Палыч @ Apr 25 2011, 16:04) *
Ещё раз: при программировании - "прошиваются" нолики. У Вас в первых четырех байтах одной прошивки 0C94624B, второй - 0C949551... После прошивки памяти этими двумя прошивками: первые четыре байта будет содержать 0С940041 (нолики из обоих файлов - сложатся, добавятся к содержимому ячеек памяти)...
А откуда BootLoader узнает стартовые адреса ваших программ. При "нормальной"(раздельной) загрузке Ваших файлов вектор 0 содержит команду перехода на "стартовый" адрес (у Вас там ещё какой-то вектор используется, и, может, - не один). Вектора всегда (за исключением BootLoader'а) используют фиксированные адреса для векторов прерываний. Они то и портятся при "заливке" двух прошивок одновременно...

Спасибо. С этим теперь стало понятно.

Цитата(Палыч @ Apr 25 2011, 16:04) *
То, что под вторую программу Вы отвели вторую половину памяти, не означает, что "стартовый" адрес второй программы = 8000. С этого адреса распологаются команды, но, команда, которая должна выполнится первой - совсем не с этого адреса!


А как же мне тогда быть. Нельзя ли команду перехода перенести из начала памяти в заданную область опять же в 8000 чтобы при переходе туда можно было загрузить вторую программу.
Или тут есть какое-то иное, более правильное решение?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- qVlad   2 прошивки в памяти   Apr 25 2011, 10:59
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 16:15) Или ту...   Apr 25 2011, 12:32
|- - qVlad   Цитата(Палыч @ Apr 25 2011, 16:32) 1. Одн...   Apr 25 2011, 12:41
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 16:41) Такой ...   Apr 25 2011, 12:52
||- - qVlad   Файлы Flash.txt и FlashDef.txt содержат код одной ...   Apr 25 2011, 12:57
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 16:41) А вот ...   Apr 25 2011, 13:02
|- - qVlad   Цитата(Палыч @ Apr 25 2011, 17:02) ...   Apr 25 2011, 13:15
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 17:15) Неужел...   Apr 25 2011, 14:29
|- - qVlad   Цитата(Палыч @ Apr 25 2011, 18:29) Э-э-э-...   Apr 25 2011, 14:45
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 18:45) ... Пр...   Apr 25 2011, 15:12
|- - qVlad   Цитата(Палыч @ Apr 25 2011, 19:12) Другим...   Apr 25 2011, 15:19
|- - Палыч   Цитата(qVlad @ Apr 25 2011, 19:19) Это я ...   Apr 25 2011, 16:01
- - Schulz_K   Насколько я понимаю - тут должны быть два разных п...   Apr 26 2011, 09:28
- - defunct   ЦитатаНо это не гарантирует 100% работу. это призн...   Apr 29 2011, 16:09


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 15:45
Рейтинг@Mail.ru


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