Например TDA7294

Форум РадиоКот • Просмотр темы - Mmc/Sd botloader PIC18F47J53
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср май 14, 2025 17:08:12

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Ср фев 06, 2019 12:03:57 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Доброго времени суток, котофаны!

Требуется ваша помощь. Пишу Mmc/Sd bootloader для микроконтроллера PIC18F47J53 c 128 Кб flash памяти. Разработка ведется на microPascal. На данный момент есть загрузчик, который записывает во flash контроллера основную программу с указанного адреса, расположенную на SD карте. Загрузчик расположил в конце памяти по адресу 0x1BFF8, сам загрузчик занимает 16384 байта памяти.
Не могу понять с какого адреса мне записывать основную программу и как на нее перейти?
Что делать с прерываниями, ведь их использует и загрузчик и основная программа?


Буду рад любой помощи.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Ср фев 06, 2019 13:05:24 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Что делать с прерываниями

Вы не имеете права модифицировать область нулевой страницы стирания флеша (первые 512 инструкций). То есть весь загружаемый код должен быть ниже этой страницы, а обработчики прерываний обязаны ремаппироваться к фиксированному адресу функцию реального обработчика в загружаемом коде.
Проще говоря, в нулевой странице, которая никогда не изменяется, находятся функции обоих векторов прерываний. Эти функции адресуют исполнение в тела реальных обработчиков, которые (тела) и нужно фиксировать по адресу флеша. В бутлоадере это происходит автоматически, поскольку он неизменен, а в загружаемой программе функция обработчика собственно и должна быть прибита гвоздями к фиксированному адресу. Абсолютно тоже самое должно быть с main(). Тело main() должно вызывать единственную функцию в загружаемом коде, которая и фиксируется по адресу флеша.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Ср фев 06, 2019 15:41:45 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Попробывал как вы сказали:
Загрузчик:
Код:
program FL2Pascal;

procedure interrupt(); org 0x43A0;
begin
end;

procedure interrupt_low(); org 0x43D0;
begin
end;

procedure StartGo();
begin

end;

procedure ProgrammGo(); org 0x04400;
begin

end;

  if CheckUpdate <> 1 then
      begin
          StartGo();
      end
      else
         ProgrammGo();

end.


и основная программа:
Код:
program FL2Pascal;

procedure interrupt(); org 0x43A0;
begin
end;

procedure interrupt_low();org 0x43D0;
begin
end;

procedure Programm();
Label Menu,Menu2,Menu3,Menu4,Main,NastrMSHU,NastrBP,NastrChastota,QuickMenu_Sett,QuickMenu1,QuickMenu,st_bluetooth;
begin
  InitMain();
    while (1) do
  begin
  end;
end;

begin org 0x4400;    // main
     orgall(0x43A0);
     Programm();
end.


//и в загрузчике и в основной программе прописал конкретные адреса в памяти для обработчика прерываний. В flash данные зашиваются с нужного адреса, проверял считыванием прошивки и анализировал hex файл, но вот почему то ничего не работает. Основная программа не запускается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Ср фев 06, 2019 15:57:21 
Друг Кота
Аватар пользователя

Карма: 139
Рейтинг сообщений: 2916
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 23675
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Написана какая то ерунда.
На каком основании у Вас два тела обработчика? Вы понимаете как устроена система прерываний у PIC18?
Есть ДВА вектора - 8 и 18. По этим векторам должны находиться либо переходы на тела обработчиков (goto или bra), либо их вызовы (call). Само тело обработчика может быть ТОЛЬКО ОДНО на каждый вектор. Поскольку код бутлоадера неизменен, а код приложения может модифицироваться, то ОСНОВНОЕ тело обработчика обязано быть в нестираемой области. И оттуда по условию (бут или приложение) выходить либо в фиксированный адрес бута, либо в фиксированный адрес приложения.
ЗЫ. Кстати, забыл один нюанс. Кроме самого исходного кода, компилятор вставляет инициализацию переменных. И место размещения этой инициализации определяет линкер. Линкеру нужно указать, чтобы инициализация попала в нестираемую область, иначе при модификации кода развалится привязка адресов - из фиксированной области будет вызываться изменяемый адрес инициализации. При попытке перешить прежним кодом все будет ОК, а при изменениях все развалится.
ЗЗЫ. Еще можно отказаться от прерываний в буте. Это упростит задачу размещения обработчика. Но из-за нулевого ресет вектора при сбое и рестарте контроллера во время перепрошивки, программа станет нерабочей.


Вернуться наверх
 
Открыт интернет-магазин MEAN WELL.Market – весь ассортимент MEAN WELL, выгодные цены

Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России. На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Ср фев 06, 2019 19:23:57 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1337
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4558
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Загрузчик расположил в конце памяти по адресу 0x1BFF8

Загрузчик нужно располагать в самом начале, а основную программу после него. И никак иначе.
Такое расположение обусловливается фиксированными векторами прерываний, находящимися в самом начале области флеши. А распределять куда посылать обработчик (в бутлодырь или в основное ПО) должен код загрузчика. Ну а в основном ПО просто смещаете все адреса (делается с помощью линкера).


Вернуться наверх
 
LED-драйверы MOSO - надежные решения для индустриальных приложений

Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO подробнее>>
Не в сети
 Заголовок сообщения: Re: Mmc/Sd botloader PIC18F47J53
СообщениеДобавлено: Вт фев 19, 2019 13:27:30 
Встал на лапы

Зарегистрирован: Ср ноя 05, 2014 19:04:31
Сообщений: 114
Рейтинг сообщения: 0
Спасибо за помощь, все получилось!


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y