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

 
 
> ПО для перепрошивки 8051, Дайте мудрый совет
Jevys
сообщение Sep 23 2009, 10:40
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 26-04-06
Пользователь №: 16 503



Встала задача по созданию программного обеспечения для обновления ПО 8051. Особенностью создаваемого устройства является то, что в процессе эксплуатации может потребоваться неоднократное обновление программного обеспечение. В связи с этим хочу спросить две вещи:
1. Можно ли вообще написать модуль ПО перепрошивки на Си? В проекте стоит опция максимальной оптимизации по размеру кода, при которой Кеil по идее может сам находить похожие куски кода и выделять их в подпрограммы. И тогда код, расположенный в ПО перепрошивки, будет вызывать код, который лежит за пределами области памяти программ перепрошивщика, что недопустимо. Остается только ассемблер?
2. Если все же писать на Си, то как жестко разместить программу перепрошивки с заданного адреса? Например 0xF800. И как это сделать в варианте на ассемблере.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Goodvin
сообщение Oct 26 2009, 15:24
Сообщение #2





Группа: Участник
Сообщений: 12
Регистрация: 8-10-09
Из: СПб
Пользователь №: 52 817



Доброго времени суток!!!

Думаю поступить так: bootloader расположить в начальных адресах. В стартапе bootloader'а переопределить все вектора прерывания (кроме тех, что используются в bootloader'е) на адреса, где во флеше будет таблица прерываний прикладной программы. Тогда по прерыванию контроллер идет по адресу прописаному в документации, а там ему говорят иди по новому адресу. Придя по новому адресу он обрабатывает прерывание. Но получается, что если я в bootloader'е буду использовать прерывания по UART'у и таймеру, то в прикладной программе их юзать уже на получится?

Еще вариант расположить bootloader в последних адресах. Тогда прикладная программа при прерываниях не будет скакать по адресам, но там другие загвоздки есть.

Я правильно уловил логику "колдования" со стартапом?

Уважаемый barabek, не могли бы Вы написать о стартапе или дать ссылку.
Go to the top of the page
 
+Quote Post
редактор
сообщение Oct 27 2009, 07:09
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Цитата(Goodvin @ Oct 26 2009, 19:24) *
Еще вариант расположить bootloader в последних адресах. Тогда прикладная программа при прерываниях не будет скакать по адресам, но там другие загвоздки есть.

Я правильно уловил логику "колдования" со стартапом?


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

Код
                EXTRN CODE (?C_START)
                PUBLIC  ?C_STARTUP
// основные изменения сделаны здесь
                CSEG    AT      0
?C_STARTUP:     LJMP    STARTUP1
//                ORG  3H
Offset SET 800H    // адрес основного приложения
                ISR_JMP 0  // int 0
                ISR_JMP 1  // Timer 0
                //ISR_JMP 2  // int 1
                ISR_JMP 3  // Timer 1
                ISR_JMP 4  // uart 0
                ISR_JMP 5  // Timer 2
                ISR_JMP 6  // spi0
                ISR_JMP 7  // SMBus
                ISR_JMP 8  // ADC 0
                ISR_JMP 9  // PCA
                ISR_JMP 10 // Comarator 0
                ISR_JMP 11 // Comarator 0
                ISR_JMP 12 // Comarator 1
                ISR_JMP 13 // Comarator 1
                ISR_JMP 14 // Timer 3
                ISR_JMP 15 // ADC 0
                ISR_JMP 16 // Timer4
                ISR_JMP 17 // ADC2
                ISR_JMP 18 // ADC2
                ISR_JMP 19 // Reserved
                ISR_JMP 20 // UART1

                CSEG AT 0100h          
EXTRN CODE(LoadCode)             // фиксируем адрес для вызова из основной программы

                MOV     SP,#?STACK-1 // установить стек загрузчика
                LJMP LoadCode        // перейти к выполнению функции

                RSEG    ?C_C51STARTUP              
STARTUP1:
        .... // штатные действия


?My_Exit_Func   SEGMENT   CODE
             RSEG   ?My_Exit_Func
PUBLIC exit
exit:                             // вызывается из загрузчика для передачи управления основному приложению
               MOV SP,#7   // значение стека как при сбросе контроллера
               LJMP Offset

               END


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jevys   ПО для перепрошивки 8051   Sep 23 2009, 10:40
- - barabek   Цитата(Jevys @ Sep 23 2009, 20:40) Встала...   Sep 23 2009, 23:59
|- - 62256   Цитата(barabek @ Sep 24 2009, 02:59) Можн...   Oct 5 2009, 22:04
|- - barabek   Цитата(62256 @ Oct 6 2009, 08:04) не можн...   Oct 15 2009, 12:39
- - Jevys   Обновление ПО представляю так: От компьютера по ст...   Sep 24 2009, 06:04
- - редактор   Я размещаю загрузчик с 0 адреса, тогда он гарантир...   Oct 15 2009, 05:49
- - Goodvin   Доброго времени суток!!! Столкнулся с...   Oct 21 2009, 16:33
|- - Палыч   Цитата(Goodvin @ Oct 21 2009, 19:33) Если...   Oct 22 2009, 09:55
- - Goodvin   Доброго времени суток!!! Вчера попроб...   Oct 22 2009, 20:44
|- - Палыч   Цитата(Goodvin @ Oct 22 2009, 23:44) Уваж...   Oct 23 2009, 05:39
- - редактор   Сместить вектора прерывания в программе не проблем...   Oct 23 2009, 04:49
- - Goodvin   Доброго времени суток!!! А может быть...   Oct 23 2009, 16:16
|- - barabek   Цитата(Goodvin @ Oct 24 2009, 03:16) Добр...   Oct 24 2009, 00:27
|- - Палыч   Цитата(Goodvin @ Oct 26 2009, 18:24) Но п...   Oct 26 2009, 16:20
- - Goodvin   Доброго времени суток!!! Цитата...   Oct 26 2009, 18:49
|- - barabek   Цитата(Goodvin @ Oct 27 2009, 05:49) Добр...   Oct 27 2009, 03:38
|- - Палыч   Цитата(Goodvin @ Oct 26 2009, 21:49) В об...   Oct 27 2009, 06:37
- - 62256   Цитата(редактор @ Oct 27 2009, 09:09) Заг...   Nov 6 2009, 19:15


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 01:05
Рейтинг@Mail.ru


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