Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-сен-22 05:47

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




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 13:12 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 992
Откуда: Тула
agusha писал(а):
BLX R0 -переход по адресу вобщем на функцию SystemInit при этом в регистр LR прописывается адрес следующей команды: LDR R0, =?start вродебы так?

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

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 13:37 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
Спасибо тебе уважаемый, но раз у нас есть специалисты из фитона давайте наберемся терпения и послушаем более квалифицированый ответ причем полный. Так как практически нет никакой литературы на уровне Фрунзе(на чтение можно потратить пару дней и много сразу чего сделать).
prostoRoman писал(а):
зы: могу ошибаться,
и все в таком духе (насмотрелся на форумах) никого не принижаю))), но опятьже давайте уважать друг друга.
Если б я был специалист то с радостью помогал бы другим но таковым не являюсь, по-этому подождем ответы все таки от фирмы производителя среды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 13:50 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
agusha писал(а):
Для каких целей тогда нужна функция системинит?
Наличие этой функции - требование CMSIS. Как правило эта функция используется для инициализации периферийных модулей, которые должны быть инициализированы сразу после снятия RESET-а. Обычно на этом этапе производится настройка параметров тактирования микроконтроллера.
У SystemInit есть одно ограничение: она не должна использовать ресурсы, инициализируемые на этапе Си startup (см. ниже).

agusha писал(а):
?start это адрес куда попадаем после обработки ресета вродебы так? А где конкретно он прописывается?

?start - это точка входа в библиотечную часть (Си startup), которая занимается:
    - инициализацией значений статических переменных;
    - инициализацией heap (если используется);
    - копированием кода RAM-функций (если используются)
программы на Си.
После отработки Си startup управление передается на функцию main.

Значение адреса ?start устанавливается линкером на этапе компоновки программы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 14:13 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
prostoRoman писал(а):
...при этом ядро уходит отсюда в функцию и может вообще больше не вернуться.
Это, какую функцию напишите. Целиком на совести программиста, завершит функция выполнение, или нет (как и для любой другой функции).

prostoRoman писал(а):
зы: могу ошибаться, но обычно старта адрес объявляется в скрипте линкера
Для кортексов на адрес старта указывает второе поле таблицы векторов, а именно Reset_Handler.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 15:16 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
ASavit писал(а):
Наличие этой функции - требование CMSIS. Как правило эта функция используется для инициализации периферийных модулей, которые должны быть инициализированы сразу после снятия RESET-а. Обычно на этом этапе производится настройка параметров тактирования микроконтроллера.
У SystemInit есть одно ограничение: она не должна использовать ресурсы, инициализируемые на этапе Си startup (см. ниже

.LMODULE2 ??SystemInit
.PUBLIC SystemInit
.RSEG ??CODE_CLIB,code
.THUMB
SystemInit?T:
SystemInit .EQU SystemInit?T+1
.FUNCTYPE .VOID SystemInit(.VOID)
BX LR

.END
В этом модуле систем инит не используется для инициализации периферийных модулей. Значит эта функция переписывается и используется после выполнения этого .LMODULE2 ??SystemInit (этот стартаповский файл взят из проекта примера) или вообще может нигде неиспользоваться в проекте далее? Или в большом проекте .LMODULE2 ??SystemInit не выполняется а SystemInit написан на си в сишном файле ?


LDR R0, =?start
BX R0
после выполнения этих команд я попадаю в СИшный стартап- инициализация периферии, тела функций... там наверно и происходит в частности инициализация тактирования с использованием систем инит или без неё?

ASavit писал(а):
У SystemInit есть одно ограничение: она не должна использовать ресурсы, инициализируемые на этапе Си startup (см. ниже

Значит регистры и имена инициализируемые на этапе Си startup никогда не могут быть используемыми в систем инит?

сначала всегда выполняется систем инит а потом Си startup?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-23 16:34 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
agusha писал(а):
В этом модуле систем инит не используется для инициализации периферийных модулей. Значит эта функция переписывается и используется после выполнения этого .LMODULE2 ??SystemInit (этот стартаповский файл взят из проекта примера) или вообще может нигде неиспользоваться в проекте далее? Или в большом проекте .LMODULE2 ??SystemInit не выполняется а SystemInit написан на си в сишном файле ?
В приведенном фрагменте функция SystemInit объявлена в .LMODULE2, т.е. в модуле с низким приоритетом. Если в Си-программе пользователя будет объявлена другая функция SystemInit, то в качестве SystemInit будет использована пользовательская. Иначе будет использована SystemInit из стартапа, которая представляет собой просто "затычку" (первой же инструкцией идет возврат из этой ф-ции).
Аналогичным образом "заткнуты" функции обработчиков прерываний и исключительных ситуаций. Например для объявления обработчика прерывания от UART1 пользователю достаточно завести в своей программе функцию с именем UART1_IRQHandler. При этом функция UART1_IRQHandler, объявленная в модуле .LMODULE2 ?UART1_IRQHandler линкером будет проигнорирована.
agusha писал(а):
LDR R0, =?start
BX R0
после выполнения этих команд я попадаю в СИшный стартап- инициализация периферии, тела функций... там наверно и происходит в частности инициализация тактирования с использованием систем инит или без неё?
Си startup (в данном случае) занимается только тем, что я перечислил ранее. Если Си startup и лезет в какую-то периферию, то это только периферия ядра (например FPU, которого здесь нет). Каждый производитель микроконтроллеров на базе ядер Cortex изготавливает свой вариант тактирования, каждому пользователю нужно по-своему настроить тактирование, поэтому негоже настройку подобной периферии взваливать на Си startup. Си startup инициализирует полько то, что связано с Си.
agusha писал(а):
Значит регистры и имена инициализируемые на этапе Си startup никогда не могут быть используемыми в систем инит?
Во-первых имена невозможно инициализировать. Инициализировать можно ячейки памяти, с которыми связаны какие-то имена. До Си startup нельзя использовать heap и RAM-функции. Статические переменные использовать можно, но значения, оставленные SystemInit "выживут" после Си startup лишь в случае использования #pragma noinit.

agusha писал(а):
сначала всегда выполняется систем инит а потом Си startup?
Код:
Reset_Handler?T:
Reset_Handler   .EQU    Reset_Handler?T+1
.FUNCTYPE .VOID Reset_Handler(.VOID)
    LDR     R0, =(.SFE CSTACK) + 1
    MSR     MSP, R0
    LDR     R0, =SystemInit
    BLX     R0
    LDR     R0, =?start
    BX      R0
А как можно иначе интерпретировать данную последовательность команд???
Сперва инициализируется указатель стека (на всякий случай), затем вызывается SystemInit, затем вызывается ?start (Си startup ). По окончании работы Си startup вызовется пользовательская функция main. Более того SystemInit специально введена для того, чтобы была возможность стандартным образом выполнять какие-то действия ДО выполнения Си startup!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-25 16:26 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
Подскажите.
Есть библиотека CMSIS в которой содержится 6 файлв например для stm32

— собственно, сама CMSIS

stm32vldiscovery_packageLibrariesCMSISCM3CoreSupportcore_cm3.c

stm32vldiscovery_packageLibrariesCMSISCM3CoreSupportcore_cm3.h

tm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xsystem_stm32f10x.c

tm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xsystem_stm32f10x.h

— заголовочный файл с определениями констант, битовых масок и т.п

tm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xstm32f10x.h

— код начальной инициализации микроконтроллера

stm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupiarstartup_stm32f10x_md_vl.s


Подскажите как найти файлы CMSIS включенные в проект для миландра как их зовут(копался в иерархии проекта, но там их не удалось обнаружить)? где файл в которм прописаны обработчики прерываний?

Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-26 08:37 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
agusha писал(а):
Подскажите как найти файлы CMSIS включенные в проект для миландра как их зовут(копался в иерархии проекта, но там их не удалось обнаружить)? где файл в которм прописаны обработчики прерываний?
О каком проекте идет речь? (для справки CMSIS - не библиотека, а стандарт: Cortex Microcontroller Software Interface Standard)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-26 09:59 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
Для микроконтроллера Milandr второй пример Название: LCD, PORTs....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-26 11:04 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
agusha писал(а):
Для микроконтроллера Milandr второй пример Название: LCD, PORTs....
Данный проект был сделан весьма давно и не вполне соответствует CMSIS. Я рекомендовал бы скачать с Миландровского сайта стандартную библиотеку, которая выполнена в соответствии с CMSIS. Там кроме самой библиотеки Вы найдете достаточное количество как небольших проектов - примеров работы с отдельными периферийными модулями, так и большой проект, использующий всю или почти всю периферию микроконтроллера.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2013-дек-26 11:49 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 2009-янв-20 10:05
Сообщения: 778
ASavit писал(а):
agusha писал(а):
Для микроконтроллера Milandr второй пример Название: LCD, PORTs....
Данный проект был сделан весьма давно и не вполне соответствует CMSIS. Я рекомендовал бы скачать с Миландровского сайта стандартную библиотеку, которая выполнена в соответствии с CMSIS. Там кроме самой библиотеки Вы найдете достаточное количество как небольших проектов - примеров работы с отдельными периферийными модулями, так и большой проект, использующий всю или почти всю периферию микроконтроллера.

В этой теме viewtopic.php?f=22&t=607 последняя версия библиотеки.

_________________
Правила форума!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2014-янв-09 23:27 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
Посмотрите кто-нибудь пожалуйста мой вопрос по библиотеке. В принципе нужно в ней разобраться, но как то никто ничего не ответил. :evil:

Пробывал делать:

To launch the example, you must do the following:
- Create a project and setup all project configurations.
- Add main.c file.
- Add the required files from "Library" folder:
MDR32F9Qx_port.c
MDR32F9Qx_rst_clk.c
MDR32F9Qx_uart.c
- Edit the MDR32F9Qx_conf.h to set appropriate run-time parameter checking level.
- Compile and link together all .c files and load your image into the target board.
- Run the example.
Ошибки выдает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2014-янв-10 09:49 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
1. Скачайте и разверните файлы библиотеки:

Standart Peripheral Library MDR32F9Qx, MDR1986VE1T, MDR1986VE3T.rar
Standart Peripheral Library MDR32F9Qx MDR1986VE1T MDR1986VE3T+GCC.zip
core_cm3.c.zip

Объедините содержимое соответствующих папок из архивов (например в папке MdrStdLib) в приведенном выше порядке (более свежие файлы должны затирать более древние) так, чтобы появилась следующая структура папок:

MdrStdLib \ Config
MdrStdLib \ Example_Projects
MdrStdLib \ Examples
MdrStdLib \ IDE
MdrStdLib \ Libraries

2. Выберите в папке Examples какой-нибудь пример (например MDR1986VE9x\MDR32F9Q2_EVAL\UART\ArraySend).
3. Запустите среду CodeMaster и создайте проект (в качестве папки проекта используйте Examples\MDR1986VE9x\MDR32F9Q2_EVAL\UART\ArraySend\CMCARM - ее нужно создать)
4. В окне проекта из папки "Ассемблерные файлы" удалите стандартный стартап-файл, поставляемый со средой (также неплохо бы его физически удалить из папки MDR1986VE9x\MDR32F9Q2_EVAL\UART\ArraySend\CMCARM).
5. В папку "Ассемблерные файлы" окна проекта добавьте стартап из библиотеки (при этом уберите "галку" с опции "Копировать файл(ы) в директорию проекта").
6. В папку "Си-файлы" окна проекта добавьте:

Examples\MDR1986VE9x\MDR32F9Q2_EVAL\UART\ArraySend\main.c
Libraries\MDR32F9Qx_StdPeriph_Driver\src\MDR32F9Qx_port.c
Libraries\MDR32F9Qx_StdPeriph_Driver\src\MDR32F9Qx_rst_clk.c
Libraries\MDR32F9Qx_StdPeriph_Driver\src\MDR32F9Qx_uart.c
Libraries\CMSIS\CM3\CoreSupport\core_cm3.c
Libraries\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\cmc\system_MDR32F9Qx.c

7. В настройках проекта укажите следующие пути поиска include-файлов (раздел "Директории"):
$MCROOT\Inc
..\..\..\..\..\..\Libraries\CMSIS\CM3\CoreSupport
..\..\..\..\..\..\Libraries\CMSIS\CM3\DeviceSupport\MDR32F9Qx\inc
..\..\..\..\..\..\Libraries\CMSIS\CM3\DeviceSupport\MDR32F9Qx\startup\cmc
..\..\..\..\..\..\Libraries\MDR32F9Qx_StdPeriph_Driver\inc
..\..\..\
Здесь старайтесь всегда использовать относительные пути (пути задаются относительно папки с файлом проекта - Examples\MDR1986VE9x\MDR32F9Q2_EVAL\UART\ArraySend\CMCARM).

8. Также для порядка укажите
- в качестве директории исполняемых файлов Exe;
- в качестве директории объектных файлов Obj;
- в качестве директории листингов Lst.

9. Запустите компиляцию. Если все сделали правильно, пройдет без ошибок.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Макроассемблер CMA-ARM
СообщениеДобавлено: 2014-янв-30 00:08 
Не в сети

Зарегистрирован: 2013-апр-13 21:18
Сообщения: 20
Откуда: Санкт-Петербург
На стр. 496 дата шита MDR32F9Q2I
Регистр VTOR содержит смещение базового адреса таблицы векторов прерываний относительно адреса 0x00000000.

При установке значения TBLOFF требуется обеспечить выравнивание базового адреса таблицы векторов. Минимальный размер выравнивания – по границе блока из 32 слов, достаточен для хранения 16 векторов прерываний.

Минимальный размер выравнивания – по границе блока из 32 слов. Не совсем ясно: по границе блока из 32 слов это значит что базовый адрес таблицы векторов кратен 128 байт после выравнивания? Если так, то 16 векторов как туда привязываются?
Ну типа базовый адрес мы определили, выровняли какое теперь имеет значение сколько далее векторов прерываний будет?
Если это так как я думаю.
Спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу Пред.  1, 2

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


Кто сейчас на конференции

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB