Troll 0 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба Как запустить в RAM , используя всю оперативку 8кБ + USB(8кБ) +Ethernet (16кБ)???Если в USB и Ethernet располагаются только данные исполняемой программы, то как KRS уже советовал Вам написать свои XCL файлы.. В скриптах определить секции (RAM, USB_RAM, ETH_RAM), которые будут располагаться по нужным адресам. Если требуется, чтобы там располагался исполняемый код. Отдельные функции исполняемой программы расположить в секциях USB_RAM, ETH_RAM и загрузчик должен будет считывать и копировать несколько бинарников по требуемым адресам. Ну или как вариант загрузчик копирует только первый бинарник и передает управление исполняемой программе, а сама программа уже подгружает в USB_RAM и ETH_RAM требуемые функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба ..а сама программа уже подгружает в USB_RAM и ETH_RAM требуемые функции. Зачем все эти пляски с бубном, если всем этим прекрасно по жизни занимается линкер, только ему надо сказать, какой памятью он может располагать. Только в скрипте загрузчика еще надо, естественно, надо вдарить по регистрам, дабы память была доспупна, да errata почитать - там по крайней мере в первых ревизиях были ограничения на использования памяти для исполняемого кода. А вообще сам подход к делу неверен - совершено незачем мучительно впихивать для отладки слона в посудную лавку :(. Если уж совсем без отладчика думалка не думает, то отдаживайтесь во Flash - ресурс у него большой, а если и помрет (у меня еще за пяток лет ни один еще не помер в боевых отладочных платах), то цена вопроса замена контроллера. В дополнение, если уж возникает необходимость мучительно отлаживать всего-то десяток килобайт программы, тогда до прояснения прямой путь в симуляторы и/или кроссотладку кусков исходников на PCшке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Step68 0 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба Зачем все эти пляски с бубном, если всем этим прекрасно по жизни занимается линкер, только ему надо сказать, какой памятью он может располагать. Только в скрипте загрузчика еще надо, естественно, надо вдарить по регистрам, дабы память была доспупна, да errata почитать - там по крайней мере в первых ревизиях были ограничения на использования памяти для исполняемого кода. А вообще сам подход к делу неверен - совершено незачем мучительно впихивать для отладки слона в посудную лавку :(. Если уж совсем без отладчика думалка не думает, то отдаживайтесь во Flash - ресурс у него большой, а если и помрет (у меня еще за пяток лет ни один еще не помер в боевых отладочных платах), то цена вопроса замена контроллера. В дополнение, если уж возникает необходимость мучительно отлаживать всего-то десяток килобайт программы, тогда до прояснения прямой путь в симуляторы и/или кроссотладку кусков исходников на PCшке. zltigo в своем репертуаре :-))) Вопрос-то и был в том как рассказать линкеру о доступной ему памяти. Тут перед этим кто-то показал как на сегменты бить. Проверим.Просто не нашел описания этого дела. Подход к делу вещь индивидуальная. При чем тут вообще отладчик? Задача-то с довольно приятными последствиями. Например, можно не писать свой нестандартный загрузчик на флэш. Можно еще писать дополнительные программки и загружать их с внешнего носителя в память. Разве не в кайф? Результаты: Написал программу загрузчик с SD карты. Хранение в dataflash. Из основной программы загружается с dataflash в Ethernet RAM. INTVEC в 0х40000000 -- 0х4000003F. Ремап. Выводит на экран запрос карты и состояние загрузки. Длина кода ~ 5600 байт , DATA -- ~4200 байт. Стирает flash. Затем с SD карты записывает нужный файл. Ремап и переход на старт адрес. Вроде работает -- ищу глюки. Вот еще разберусь с сегментами памяти и можно довольно большие проги в RAM запускать(если получится). Проблема же с загрузчиком была в том, что COPY_RAM_TO_FLASH не хочет копировать из старших областей RAM. Буфер пришлось размещать в основной памяти через указатель. И еще не инитится основная память нулями, но это поправимо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба zltigo в своем репертуаре :-))) Вы правы - люблю давать наводки для самостоятельного поиска а не "нажми на кномку". Иначе поток вопросок "где кнопка" не иссякнет. Вопрос-то и был в том как рассказать линкеру о доступной ему памяти. Ответ был - это получится, только в документацию заглянуть. Узнав о самом факте существования документации и возможности управлять линкером не только из более, чем убогой IDE жизнь становится веселее. Задача-то с довольно приятными последствиями. Например, можно не писать свой нестандартный загрузчик на флэш. Толку в мелких программах мало, как и в цеплянии дополнительно флеша в такой ситуации. С другой стороны для контроллеров с внешней 32bit RAM уже тупо грузить по фиксированным адресам неразумно. Правильный путь загрузка перемещаемого кода. Можно еще писать дополнительные программки и загружать их с внешнего носителя в память. Разве не в кайф? С таким-же успехом их можно в Flash подгружать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Step68 0 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба Вы правы - люблю давать наводки для самостоятельного поиска а не "нажми на кномку". Иначе поток вопросок "где кнопка" не иссякнет. Ответ был - это получится, только в документацию заглянуть. Узнав о самом факте существования документации и возможности управлять линкером не только из более, чем убогой IDE жизнь становится веселее. Толку в мелких программах мало, как и в цеплянии дополнительно флеша в такой ситуации. С другой стороны для контроллеров с внешней 32bit RAM уже тупо грузить по фиксированным адресам неразумно. Правильный путь загрузка перемещаемого кода. С таким-же успехом их можно в Flash подгружать. Все замечательно, но ведь HELP у IARa -- полный отстой. По крайней мере я ничего не нашел об этом. Помоги с доками, zltigo? Ни фига себе мелкая -- около 30 кБ за минусом стеков. При желаниии много чего можно впихнуть. А о внешней RAM и говорить не стоит -- цена проекта вырастает и размеры платы не позволяют. Да и медленновато работает с внешней RAM. Конечно, можно и во флэш грузить... Только для этого надо держать ДЛИ-И-И-ИННЫЙ загрузчик на флэш, у которого есть интерфейсы для внешних носителей , что тупо, говоря языком zltigo. А в принципе все ясно. Глюков не нашел. Все отлично работает. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
meister 0 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба около 30 кБ за минусом стеков Я бы стэки разместил в USB, данные загрузчика в ETH и посмотрел бы на скорость... возможно не изменится. Будет полных 32к на программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 27 мая, 2009 Опубликовано 27 мая, 2009 · Жалоба Все замечательно, но ведь HELP у IARa -- полный отстой. Отнюдь - он ОЧЕНЬ хороший. Конечно, можно и во флэш грузить... Только для этого надо держать ДЛИ-И-И-ИННЫЙ загрузчик на флэш, у которого есть интерфейсы для внешних носителей Этот загрузчик будет "длиннее" загрузчика в RAM на несколько команд вызова функции системного LPC загрузчика записи во Flash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Step68 0 28 мая, 2009 Опубликовано 28 мая, 2009 (изменено) · Жалоба Отнюдь - он ОЧЕНЬ хороший. Этот загрузчик будет "длиннее" загрузчика в RAM на несколько команд вызова функции системного LPC загрузчика записи во Flash. Я думаю -- это просто слова... Укажите , в подтверждение своих слов, название раздела помощи и стр. Насчет загрузчика. Ну зачем же так? Сейчас я использую переделанный немного загрузчик через USB AN10759. Весит он около 6500 байт. Добавляешь всякие пользовательские опции -- клавиатура, вывод на графику, декодер ПО. Получается уже 10200(THUMB , min LIB). Если добавить SD Card(SSP1) ,dataflash(SSP0), FAT16/32 b и др. сопутствующее, то размеры его будут слишком уж большие. Не надо забывать о том, что загрузчик в RAM хранится на внешнем носителе достаточного объема и "жрать не просит"... В принципе и загрузчик через USB можно переписать для RAM. Дальше вообще дело техники -- в основной программе в меню выбор -- загрузить с USB или с карты. Загружается соответствующая программа и перезаписывает флэш. Может быть господин модератор скажет , что не прав? :-))) Я бы стэки разместил в USB, данные загрузчика в ETH и посмотрел бы на скорость... возможно не изменится. Будет полных 32к на программу. Настолько ли критична скорость при загрузке с внешнего носителя? 32к никогда не будет всего у 2364 32к. Минус стеки и дата. Я думаю где-то 28кБ кода. Ну еще можно под DWORD buff использовать батарейную память 2к. Изменено 28 мая, 2009 пользователем Step_ARM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
meister 0 28 мая, 2009 Опубликовано 28 мая, 2009 · Жалоба 32к никогда не будет всего у 2364 32к. Я перепутал с 2366. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 28 мая, 2009 Опубликовано 28 мая, 2009 · Жалоба Я думаю -- это просто слова... Укажите , в подтверждение своих слов, название раздела помощи и стр. Явки, пароли, ключи от квартиры... :) Flash в LPC действительно программируется посредством вызова штатного bootloader и соответствено размер этого кода ничтожен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Step68 0 28 мая, 2009 Опубликовано 28 мая, 2009 · Жалоба Явки, пароли, ключи от квартиры... :) Flash в LPC действительно программируется посредством вызова штатного bootloader и соответствено размер этого кода ничтожен. Вы , наверное, совсем не читаете мои сообщения... Я понимаю -- при вашей-то божественной сущности. Когда наступает творческая импотенция ВСЕ ведут себя аналогично. Очень надеюсь , что Вы еще не достигли такой стадии... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 28 мая, 2009 Опубликовано 28 мая, 2009 · Жалоба Весит он около 6500 байт. Добавляешь всякие пользовательские опции -- клавиатура, вывод на графику, декодер ПО. Получается уже 10200(THUMB , min LIB). Если добавить SD Card(SSP1) ,dataflash(SSP0), FAT16/32 b и др. сопутствующее, то размеры его будут слишком уж большие. Для размещения всего этого хозяйства даже в 128K Flash минимального в линейке контроллера - нет. Если Вам кажется, что Вы рожаете нечто креативное вротивовес "творческим импотентам", то таки нет - Вы рожаете просто обычного кастрированного уродца :(. Вместо утаптывания загружаемых программ целиком в несколько десятков килобайт RAM их совершенно спокойно можно подгружать в имеющиюся даже на Вашем минимальном контроллере сотню килобайт Flash и использовать RAM по назначению. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Step68 0 28 мая, 2009 Опубликовано 28 мая, 2009 · Жалоба Для размещения всего этого хозяйства даже в 128K Flash минимального в линейке контроллера - нет. Если Вам кажется, что Вы рожаете нечто креативное вротивовес "творческим импотентам", то таки нет - Вы рожаете просто обычного кастрированного уродца :(. Вместо утаптывания загружаемых программ целиком в несколько десятков килобайт RAM их совершенно спокойно можно подгружать в имеющиюся даже на Вашем минимальном контроллере сотню килобайт Flash и использовать RAM по назначению. Странно, как же все поместилось + десяток протоколов и многоуровневое меню и еще место осталось? Вы,дорогой товарищ, так ничего и не поняли... Ну что ж -- выше головы не прыгнешь. Хам... просто какой-то... , а не модератор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 8 июня, 2009 Опубликовано 8 июня, 2009 · Жалоба Подниму тему. Скажите, а как красиво расположить вектор 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). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 8 июня, 2009 Опубликовано 8 июня, 2009 · Жалоба В очередной раз сработала примета "напиши о проблеме, она сама решится" :) Банально вынес объявление векторов в отдельную процедурку, сказал "положить в ОЗУ" и кейл сделал всё самостоятельно. Чудеса :) 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: // дальше совсем неинтересно :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться