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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> startup для lpc1788
kentarchos
сообщение Dec 10 2013, 09:02
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



Здравствуйте!
Подскажите, пожалуйста, где можно взять startup.s для LPC1788. Я думал он должен быть в комплекте с LPC177x_8x CMSIS, но там его не оказалось. На сайте ARM со спецификацией CMSIS-SP-00300-r3p1-00rel0 идет startup_ARMCM3.s, но как я понимаю не для конкретной реализации. Если я правильно понял, то код запуска надо писать самому?

Сообщение отредактировал kentarchos - Dec 10 2013, 09:06
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 10 2013, 10:33
Сообщение #2


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



вот
Прикрепленный файл  startup_LPC177x_8x.txt ( 12.3 килобайт ) Кол-во скачиваний: 356


и переименовать в startup_LPC177x_8x.s



--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 10 2013, 15:55
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



Цитата(megajohn @ Dec 10 2013, 14:33) *
вот
Прикрепленный файл  startup_LPC177x_8x.txt ( 12.3 килобайт ) Кол-во скачиваний: 356


и переименовать в startup_LPC177x_8x.s

Большое спасибо! Только меня больше интересует вопрос, распространяется ли этот файл где-то официально или его надо писать, либо выдергивать откуда-то (из Keil напирмер)?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 12 2013, 15:53
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(kentarchos @ Dec 10 2013, 19:55) *
Большое спасибо! Только меня больше интересует вопрос, распространяется ли этот файл где-то официально или его надо писать, либо выдергивать откуда-то (из Keil напирмер)?

то, что Keil поставляет это дело с демо-версией (точнее, с ограничением кода в 32КБ), уж наверное свободно sm.gif
да и умного там нет ничего, когда разберешься, в концов конце пишется свой стартап под свои нужды.
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 24 2013, 17:21
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



toweroff
Спасибо!

У меня небольшой вопрос не совсем по этой теме.
Я нигде не могу прочесть зачем необходимо область STACK и HEAP выравнивать на границу 8-ми байтов:
Код
Stack_Size      EQU     0x00000200

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp


; <h> Heap Configuration
;   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>

Heap_Size       EQU     0x00000400

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem        SPACE   Heap_Size
__heap_limit

Подскажите пожалуйста, зачем это делается?

Сообщение отредактировал kentarchos - Dec 24 2013, 17:22
Go to the top of the page
 
+Quote Post
megajohn
сообщение Dec 24 2013, 17:47
Сообщение #6


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



вроде, нужно для плавучки


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 24 2013, 18:04
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



Цитата(megajohn @ Dec 24 2013, 21:47) *
вроде, нужно для плавучки

понять бы еще что такое плавучка)
Go to the top of the page
 
+Quote Post
SII
сообщение Dec 24 2013, 18:36
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(kentarchos @ Dec 24 2013, 21:21) *
Я нигде не могу прочесть зачем необходимо область STACK и HEAP выравнивать на границу 8-ми байтов


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

P.S. А плавучка -- это арифметика с плавающей запятой. Вычисления с двойной точностью оперируют 64-разрядными числами, которые естественно выравнивать на границу 8 байтов -- правда, таковые вычисления на микроконтроллерах реализуются лишь чисто программно, когда вполне достаточно 4-байтового выравнивания. Вот на микропроцессорах, где имеется FPU, нужда в 8-байтовом выравнивании может быть реальной -- но я с таковыми пока не сталкивался, поэтому утверждать не буду.

Сообщение отредактировал SII - Dec 24 2013, 18:38
Go to the top of the page
 
+Quote Post
b32b
сообщение Dec 24 2013, 19:57
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 14-01-10
Пользователь №: 54 821



Цитата(kentarchos @ Dec 24 2013, 21:04) *
понять бы еще что такое плавучка)

это как бы точка,- то плавает то фиксируется - ну вы поняли sm.gif а по иноземному - float point

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

Для микропроцессоров то же самое, и в особенности такое выравнивание рекомендуется (а иногда императивно требуется) для операций с SIMD командами. Можно конечно использовать команды и без выравнивания, но они и выполняются медленнее.

Вот где-то так.

Сообщение отредактировал b32b - Dec 24 2013, 20:05
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 25 2013, 11:34
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



Спасибо всем! Впервые слышу такое название для чисел формата/стандарта 754. Но у меня возникает тогда вопрос: зачем выравнивать стек, если в стеке хранятся 32-битные регистры, а в куче могут храниться данные разных типов? И потом этоже выравнивание всего сегмента целиком.
Или я все неправильно понимаю?
Go to the top of the page
 
+Quote Post
SII
сообщение Dec 25 2013, 12:54
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(kentarchos @ Dec 25 2013, 15:34) *
Спасибо всем! Впервые слышу такое название для чисел формата/стандарта 754. Но у меня возникает тогда вопрос: зачем выравнивать стек, если в стеке хранятся 32-битные регистры, а в куче могут храниться данные разных типов? И потом этоже выравнивание всего сегмента целиком.
Или я все неправильно понимаю?


Если посмотрите описание языка ассемблера KEIL, то обнаружите там две директивы -- кажется, PRESERVE8 и REQUIRE8, точно не помню. Они соответственно указывают, что данный модуль на языке ассемблера гарантирует сохранность 8-байтового выравнивания стека или требует, чтобы стек был выровнен на 8-байтовую границу (без них считается, что стек выровнен только на 4-байтовую границу). Компиляторы языков высокого уровня вроде бы порождают код, гарантирующий такое выравнивание (специально я этим вопросом не интересовался; при желании можно порыться в документации). Компоновщик же, собирая программу из объектных файлов, проверяет атрибуты выравнивания для каждого файла. Если окажется, что некий файл требует 8-байтового выравнивания стека, а входящие в его состав подпрограммы вызываются из файла, не гарантирующего такое выравнивание, он выдаст ошибку и откажется собирать программу. Таким путём обеспечивается контроль правильности выравнивания стека -- ну а нужно ли оно реально, решать программисту и компилятору (например, если при трансляции программы последний не использует команды, требующие 8-байтового выравнивания, то протранслированному модулю таковое и не требуется).

Каждый выделяемый элемент кучи также должен быть выровнен на границу 8 байтов, поскольку заранее нельзя сказать, как он будет использоваться: а вдруг к нему будут обращаться команды, требующие такого выравнивания? Кроме того, возможна (и нередко вполне целесообразна) такая схема хранения списка свободных участков кучи, когда этот список хранится в самих свободных участках: есть некая переменная, в которой лежит адрес первого свободного участка; в начале каждого участка располагается заголовок из двух полей, содержащий адрес следующего свободного участка и длину текущего свободного участка. На 32-разрядной машине каждая из этих величин имеет размер 32 бита, что в сумме даёт длину заголовка 8 байт -- а это ограничивает минимальный размер каждого свободного участка кучи 8 байтами, а заодно намекает на естественность их выравнивания на границу 8 байтов и выделения кусками, кратными по длине 8 байтам независимо от того, какая длина реально запрошена. По этой причине, если выделять, скажем, память из кучи кусочками по 3 байта, реально будет каждый раз выделяться 8 байт -- и куча будет израсходована намного быстрей, чем можно ожидать лишь на основе её объёма и длины выделяемых блоков.

Что же до разрядности, то 32-разрядные регистры общего назначения никак не отменяют возможности доступа к 64-разрядным данным. Во-первых, есть команды загрузки/сохранения пары регистров общего назначения (LDRD/STRD), которые могут требовать 8-байтового выравнивания (а могут и не требовать -- зависит от состояния какого-там бита в каком-то из управляющих регистров, насколько помню). Во-вторых, у сопроцессора с плавающей запятой (FPU) регистры в общем случае 64-разрядные, поскольку он должен уметь работать не только с 32-разрядными, но и с 64-разрядными числами с плавающей запятой (правда, такой сопроцессор мало где имеется: с ядрами Cortex-M4 интегрирован сопроцессор, поддерживающий лишь 32-разрядную вещественную арифметику, другие ядра серии Cortex-M, как и очень многие процессоры и микроконтроллеры предыдущих версий архитектуры, FPU часто вообще не имеют, и лишь у Cortex-A вроде бы у всех есть FPU с арифметикой двойной точности). Наконец, даже при принципиальной работоспособности без выравнивания на 8-байтовую границу (и вообще без выравнивания) правильное выравнивание обычно способствует повышению производительности. Например, та же команда LDRD, загружающая из памяти пару регистров общего назначения, т.е. два 32-разрядных слова, может выполняться заметно медленнее, если эта пара слов не выровнена на 8-байтовую границу: в такой ситуации одно слово может оказаться в одной строке кэша, а второе -- в другой строке или же вообще в кэше отсутствовать, что потребует считывания его из ОЗУ, и всё это время процессор будет стоять. Понятно, что подобные тормоза из-за нарушения выравнивания характерны в первую очередь для высокопроизводительных процессоров (ядра Cortex-A, а не сравнительно медленные Cortex-M, не имеющие широких внутренних шин, многоуровневой кэш-памяти и т.д. и т.п.), но требования-то пишутся для общего случая, а не для частного.
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 25 2013, 13:37
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



SII большое спасибо за подробнейший ответ!
Теперь все понятно. Просто я разбираюсь в startup коде для LPC1788, который Cortex-M3 и поэтому сложно было понять зачем нужно такое выравнивание для такого ядра. Наверное я забежал слишком вперед, ведь я начинаю изучать с нуля.
Еще раз большое спасибо! Ваш пост очень интересный!
Go to the top of the page
 
+Quote Post
SII
сообщение Dec 25 2013, 14:28
Сообщение #13


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(kentarchos @ Dec 25 2013, 17:37) *
Просто я разбираюсь в startup коде для LPC1788, который Cortex-M3 и поэтому сложно было понять зачем нужно такое выравнивание для такого ядра


Конкретно для LPC1788 это выравнивание больше "на всякий случай" и "чтобы не ругался компилятор" -- реальной нужды в нём с точки зрения собственно процессора в данном конкретном случае нет. Вот выравнивание кучи, по всей вероятности, нужно -- но это уже связано с требованиями программ управления кучей (я не смотрел, как это реализовано в Кейле, поскольку на Си не пишу -- только ассемблер для "низкоуровневого" кода или Ада для "высокоуровневого", а посему весь код управления памятью мой собственный -- и у меня такое выравнивание для кучи необходимо, а вот для стека не требуется).
Go to the top of the page
 
+Quote Post
kentarchos
сообщение Dec 26 2013, 04:07
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 11-10-13
Пользователь №: 78 698



SII
Спасибо большое! Я тоже хочу в будущем освоить asm, но решил начать с Си, так как нет даже базовых знаний о МК.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 26 2013, 17:51
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



SII, а в чем преимущество ADA над C? не стеб, действительно хочу узнать преимущества
пока C вполне устраивает
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th August 2025 - 22:24
Рейтинг@Mail.ru


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