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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> LPC23XX. Запуск программы в RAM
Troll
сообщение May 27 2009, 08:31
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 104
Регистрация: 30-06-05
Из: С-Петербург
Пользователь №: 6 406



Цитата(Step_ARM @ May 27 2009, 12:56) *
Как запустить в RAM , используя всю оперативку 8кБ + USB(8кБ) +Ethernet (16кБ)???
Если в USB и Ethernet располагаются только данные исполняемой программы, то как KRS уже советовал Вам написать свои XCL файлы.. В скриптах определить секции (RAM, USB_RAM, ETH_RAM), которые будут располагаться по нужным адресам.

Если требуется, чтобы там располагался исполняемый код. Отдельные функции исполняемой программы расположить в секциях USB_RAM, ETH_RAM и загрузчик должен будет считывать и копировать несколько бинарников по требуемым адресам. Ну или как вариант загрузчик копирует только первый бинарник и передает управление исполняемой программе, а сама программа уже подгружает в USB_RAM и ETH_RAM требуемые функции.


--------------------
Hemos Pasado
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 27 2009, 08:53
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Troll @ May 27 2009, 11:31) *
..а сама программа уже подгружает в USB_RAM и ETH_RAM требуемые функции.

Зачем все эти пляски с бубном, если всем этим прекрасно по жизни занимается линкер, только ему надо сказать, какой памятью он может располагать. Только в скрипте загрузчика еще надо, естественно, надо вдарить по регистрам, дабы память была доспупна, да errata почитать - там по крайней мере в первых ревизиях были ограничения на использования памяти для исполняемого кода.

А вообще сам подход к делу неверен - совершено незачем мучительно впихивать для отладки слона в посудную лавку sad.gif. Если уж совсем без отладчика думалка не думает, то отдаживайтесь во Flash - ресурс у него большой, а если и помрет (у меня еще за пяток лет ни один еще не помер в боевых отладочных платах), то цена вопроса замена контроллера. В дополнение, если уж возникает необходимость мучительно отлаживать всего-то десяток килобайт программы, тогда до прояснения прямой путь в симуляторы и/или кроссотладку кусков исходников на PCшке.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение May 27 2009, 09:58
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ May 27 2009, 12:53) *
Зачем все эти пляски с бубном, если всем этим прекрасно по жизни занимается линкер, только ему надо сказать, какой памятью он может располагать. Только в скрипте загрузчика еще надо, естественно, надо вдарить по регистрам, дабы память была доспупна, да errata почитать - там по крайней мере в первых ревизиях были ограничения на использования памяти для исполняемого кода.

А вообще сам подход к делу неверен - совершено незачем мучительно впихивать для отладки слона в посудную лавку sad.gif. Если уж совсем без отладчика думалка не думает, то отдаживайтесь во Flash - ресурс у него большой, а если и помрет (у меня еще за пяток лет ни один еще не помер в боевых отладочных платах), то цена вопроса замена контроллера. В дополнение, если уж возникает необходимость мучительно отлаживать всего-то десяток килобайт программы, тогда до прояснения прямой путь в симуляторы и/или кроссотладку кусков исходников на PCшке.

zltigo в своем репертуаре :-)))
Вопрос-то и был в том как рассказать линкеру о доступной ему памяти. Тут перед этим кто-то показал как на сегменты бить. Проверим.Просто не нашел описания этого дела.

Подход к делу вещь индивидуальная. При чем тут вообще отладчик? Задача-то с довольно приятными последствиями. Например, можно не писать свой нестандартный загрузчик на флэш. Можно еще писать дополнительные программки и загружать их с внешнего носителя в память. Разве не в кайф?

Результаты: Написал программу загрузчик с SD карты. Хранение в dataflash. Из основной программы загружается с dataflash в Ethernet RAM. INTVEC в 0х40000000 -- 0х4000003F. Ремап. Выводит на экран запрос карты и состояние загрузки. Длина кода ~ 5600 байт , DATA -- ~4200 байт. Стирает flash. Затем с SD карты записывает нужный файл. Ремап и переход на старт адрес. Вроде работает -- ищу глюки. Вот еще разберусь с сегментами памяти и можно довольно большие проги в RAM запускать(если получится).

Проблема же с загрузчиком была в том, что COPY_RAM_TO_FLASH не хочет копировать из старших областей RAM. Буфер пришлось размещать в основной памяти через указатель. И еще не инитится основная память нулями, но это поправимо.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 27 2009, 11:02
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Step_ARM @ May 27 2009, 12:58) *
zltigo в своем репертуаре :-)))

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

Ответ был - это получится, только в документацию заглянуть. Узнав о самом факте существования документации и возможности управлять линкером не только из более, чем убогой IDE жизнь становится веселее.
Цитата
Задача-то с довольно приятными последствиями. Например, можно не писать свой нестандартный загрузчик на флэш.

Толку в мелких программах мало, как и в цеплянии дополнительно флеша в такой ситуации. С другой стороны для контроллеров с внешней 32bit RAM уже тупо грузить по фиксированным адресам неразумно. Правильный путь загрузка перемещаемого кода.
Цитата
Можно еще писать дополнительные программки и загружать их с внешнего носителя в память. Разве не в кайф?

С таким-же успехом их можно в Flash подгружать.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение May 27 2009, 13:50
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ May 27 2009, 15:02) *
Вы правы - люблю давать наводки для самостоятельного поиска а не "нажми на кномку". Иначе поток вопросок "где кнопка" не иссякнет.

Ответ был - это получится, только в документацию заглянуть. Узнав о самом факте существования документации и возможности управлять линкером не только из более, чем убогой IDE жизнь становится веселее.

Толку в мелких программах мало, как и в цеплянии дополнительно флеша в такой ситуации. С другой стороны для контроллеров с внешней 32bit RAM уже тупо грузить по фиксированным адресам неразумно. Правильный путь загрузка перемещаемого кода.

С таким-же успехом их можно в Flash подгружать.

Все замечательно, но ведь HELP у IARa -- полный отстой. По крайней мере я ничего не нашел об этом. Помоги с доками, zltigo?

Ни фига себе мелкая -- около 30 кБ за минусом стеков. При желаниии много чего можно впихнуть.
А о внешней RAM и говорить не стоит -- цена проекта вырастает и размеры платы не позволяют. Да и медленновато работает с внешней RAM.

Конечно, можно и во флэш грузить... Только для этого надо держать ДЛИ-И-И-ИННЫЙ загрузчик на флэш, у которого есть интерфейсы для внешних носителей , что тупо, говоря языком zltigo.

А в принципе все ясно. Глюков не нашел. Все отлично работает. Спасибо.
Go to the top of the page
 
+Quote Post
meister
сообщение May 27 2009, 14:25
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Step_ARM @ May 27 2009, 17:50) *
около 30 кБ за минусом стеков


Я бы стэки разместил в USB, данные загрузчика в ETH и посмотрел бы на скорость... возможно не изменится. Будет полных 32к на программу.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 27 2009, 18:17
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Step_ARM @ May 27 2009, 16:50) *
Все замечательно, но ведь HELP у IARa -- полный отстой.

Отнюдь - он ОЧЕНЬ хороший.
Цитата
Конечно, можно и во флэш грузить... Только для этого надо держать ДЛИ-И-И-ИННЫЙ загрузчик на флэш, у которого есть интерфейсы для внешних носителей

Этот загрузчик будет "длиннее" загрузчика в RAM на несколько команд вызова функции системного LPC загрузчика записи во Flash.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение May 28 2009, 05:13
Сообщение #23


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ May 27 2009, 22:17) *
Отнюдь - он ОЧЕНЬ хороший.

Этот загрузчик будет "длиннее" загрузчика в RAM на несколько команд вызова функции системного LPC загрузчика записи во Flash.

Я думаю -- это просто слова... Укажите , в подтверждение своих слов, название раздела помощи и стр.

Насчет загрузчика. Ну зачем же так? Сейчас я использую переделанный немного загрузчик через USB AN10759. Весит он около 6500 байт. Добавляешь всякие пользовательские опции -- клавиатура, вывод на графику, декодер ПО. Получается уже 10200(THUMB , min LIB). Если добавить SD Card(SSP1) ,dataflash(SSP0), FAT16/32 b и др. сопутствующее, то размеры его будут слишком уж большие.
Не надо забывать о том, что загрузчик в RAM хранится на внешнем носителе достаточного объема и "жрать не просит"...
В принципе и загрузчик через USB можно переписать для RAM. Дальше вообще дело техники -- в основной программе в меню выбор -- загрузить с USB или с карты. Загружается соответствующая программа и перезаписывает флэш.
Может быть господин модератор скажет , что не прав? :-)))



Цитата(meister @ May 27 2009, 18:25) *
Я бы стэки разместил в USB, данные загрузчика в ETH и посмотрел бы на скорость... возможно не изменится. Будет полных 32к на программу.

Настолько ли критична скорость при загрузке с внешнего носителя? 32к никогда не будет всего у 2364 32к. Минус стеки и дата. Я думаю где-то 28кБ кода.
Ну еще можно под DWORD buff использовать батарейную память 2к.

Сообщение отредактировал Step_ARM - May 28 2009, 05:15
Go to the top of the page
 
+Quote Post
meister
сообщение May 28 2009, 05:30
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Цитата(Step_ARM @ May 28 2009, 09:13) *
32к никогда не будет всего у 2364 32к.


Я перепутал с 2366.
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 28 2009, 06:15
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Step_ARM @ May 28 2009, 08:13) *
Я думаю -- это просто слова... Укажите , в подтверждение своих слов, название раздела помощи и стр.

Явки, пароли, ключи от квартиры... smile.gif Flash в LPC действительно программируется посредством вызова штатного bootloader и соответствено размер этого кода ничтожен.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение May 28 2009, 06:19
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ May 28 2009, 10:15) *
Явки, пароли, ключи от квартиры... smile.gif Flash в LPC действительно программируется посредством вызова штатного bootloader и соответствено размер этого кода ничтожен.

Вы , наверное, совсем не читаете мои сообщения... Я понимаю -- при вашей-то божественной сущности. Когда наступает творческая импотенция ВСЕ ведут себя аналогично. Очень надеюсь , что Вы еще не достигли такой стадии...
Go to the top of the page
 
+Quote Post
zltigo
сообщение May 28 2009, 06:29
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Step_ARM @ May 28 2009, 08:13) *
Весит он около 6500 байт. Добавляешь всякие пользовательские опции -- клавиатура, вывод на графику, декодер ПО. Получается уже 10200(THUMB , min LIB). Если добавить SD Card(SSP1) ,dataflash(SSP0), FAT16/32 b и др. сопутствующее, то размеры его будут слишком уж большие.

Для размещения всего этого хозяйства даже в 128K Flash минимального в линейке контроллера - нет.
Если Вам кажется, что Вы рожаете нечто креативное вротивовес "творческим импотентам", то таки нет - Вы рожаете просто обычного кастрированного уродца sad.gif. Вместо утаптывания загружаемых программ целиком в несколько десятков килобайт RAM их совершенно спокойно можно подгружать в имеющиюся даже на Вашем минимальном контроллере сотню килобайт Flash и использовать RAM по назначению.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Step_ARM
сообщение May 28 2009, 09:18
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870



Цитата(zltigo @ May 28 2009, 10:29) *
Для размещения всего этого хозяйства даже в 128K Flash минимального в линейке контроллера - нет.
Если Вам кажется, что Вы рожаете нечто креативное вротивовес "творческим импотентам", то таки нет - Вы рожаете просто обычного кастрированного уродца sad.gif. Вместо утаптывания загружаемых программ целиком в несколько десятков килобайт RAM их совершенно спокойно можно подгружать в имеющиюся даже на Вашем минимальном контроллере сотню килобайт Flash и использовать RAM по назначению.

Странно, как же все поместилось + десяток протоколов и многоуровневое меню и еще место осталось? Вы,дорогой товарищ, так ничего и не поняли... Ну что ж -- выше головы не прыгнешь.
Хам... просто какой-то... , а не модератор.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jun 8 2009, 15:50
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Подниму тему.

Скажите, а как красиво расположить вектор IRQ в ОЗУ?
Вот эту конструкцию надо как-то отвязать от PC:
LDR PC, [PC, #-0x0FF0] ; Vector from VicVectAddr


Хотя и остальные вектора сделал как-то коряво...
В стартапе вместо LDR PC, Addr сделал
Код
LDR        R0, =0x40000000
LDR        R1, Reset_Addr
STR        R1, [R0, #0x00]


Надо бы какие-нибудь асмовые исходники почитать на досуге...
Компилятор кейл, камень - 2138 (впрочем, это влияет только на расположение VicVectAddr).


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jun 8 2009, 16:59
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



В очередной раз сработала примета "напиши о проблеме, она сама решится" smile.gif

Банально вынес объявление векторов в отдельную процедурку, сказал "положить в ОЗУ" и кейл сделал всё самостоятельно. Чудеса smile.gif
Код
AREA VECTORS_TBL,    CODE,    AT 0x40000000
VECTORS_TABLE        PROC    ARM

Vectors:        LDR     PC,Reset_Addr        
                LDR     PC,Undef_Addr
                LDR     PC,SWI_Addr
                LDR     PC,PAbt_Addr
                LDR     PC,DAbt_Addr
                NOP                            /* Reserved Vector */
                LDR     PC,[PC, #-0x0FF0]      /* Vector from VicVectAddr */
                LDR     PC,FIQ_Addr
                            

Reset_Addr:     DD      Reset_Handler
Undef_Addr:     DD      Undef_Handler?A
SWI_Addr:       DD      SWI_Handler?A
PAbt_Addr:      DD      PAbt_Handler?A
DAbt_Addr:      DD      DAbt_Handler?A
FIQ_Addr:       DD      FIQ_Handler?A

                    ENDP


AREA   STARTUPCODE, CODE, AT 0x00002000

       PUBLIC  __startup
__startup       PROC    ARM


Reset_Handler:  

// дальше совсем неинтересно :)


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 13:39
Рейтинг@Mail.ru


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