Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 20.11.2013, 13:47  
Batisto4ka
Временная регистрация
 
Регистрация: 19.05.2010
Сообщений: 78
Сказал спасибо: 10
Сказали Спасибо 8 раз(а) в 8 сообщении(ях)
Batisto4ka на пути к лучшему
По умолчанию Свой компилятор/транлятор для stm32

Необходимо создать свой компилятор для stm32.
Как оттраслировать код пользователя в машинные кода- более ли менее понятно: есть ассемблерные инструкции и соотвествующие им опкоды.
Мне не понятно другое: насколько я понимаю, то программа начинается с описания меток векторов прерываний. Поскольку программа пользователя по умолчанию начинается с адреса 0х08000000, то по этому адресу должна быть метка типа goto Reset_Handler и т.д. послдовательно для всех векторов прерываний.
Но глядя на sturupоский файл и дизассемблинг программы по адресу 0х08000000 и далее находятся следующие инструкции типа:
0х08000000 0678 DCW 0x0678
0x08000002 2000 DCW 0x2000
0х08000004 0840 DCW 0x0840
0x08000006 0800 DCW 0x0800
и т.д.
судя по дальнейшим данным, записанным дальше, вроде становится понятно, что начиная с адреса 0х08000004 записаны адреса+1 функций обработчиков прерываний. И сдесь возникает первый вопрос:
1. Судя по документации для stm32f417 адресное пространство 0х188(392) байта занимают вектора. Получается в область с 0х08000000 по 0х08000188 ничего лишнего писать нельзя. Там обязательно должны быть адреса обработчиков векторов прерываний?

2.Далее, что же такое
0х08000000 0678 DCW 0x0678
0x08000002 2000 DCW 0x2000
Судя по всему 0х20000678 это какой-то адрес оперативной памяти.По стартапу написано DCD _initial_sp, то есть это инициализация вершины стека. Я так понимаю-это адрес вершины стека.Но почему выбран именно этот адрес? После проведения экспериментов в добавлением переменных в программу, стало понятно что адресс стека всегда будет в конце всех переменных ОЗУ. Но я так понимаю, что адресс вершины стека я,как разработчик компилятора и транслятора могу объявить каким угодно в области оперативной памяти. Правильно ли я понимаю? И правильно ли я понимаю, что главное записать этот адрес вершины стека по адресу 0х08000000 ? Где можно прочитать, что по этому адресу должен всегда быть записан адрес вершины стека?
3.Далее после адресного пространства векторов прерываний идет код:
Код:
0x08000188 F000F802  BL.W          __scatterload (0x08000190)
0x0800018C F000F83C  BL.W          __rt_entry (0x08000208)
                 __scatterload:
0x08000190 A00A      ADR           r0,{pc}+4  ; @0x080001BC
0x08000192 E8900C00  LDM           r0,{r10-r11}
0x08000196 4482      ADD           r10,r10,r0
0x08000198 4483      ADD           r11,r11,r0
0x0800019A F1AA0701  SUB           r7,r10,#0x01
                 __scatterload_null:
0x0800019E 45DA      CMP           r10,r11
0x080001A0 D101      BNE           0x080001A6
0x080001A2 F000F831  BL.W          __rt_entry (0x08000208)
0x080001A6 F2AF0E09  ADR.W         lr,{pc}-0x07  ; @0x0800019F
0x080001AA E8BA000F  LDM           r10!,{r0-r3}
0x080001AE F0130F01  TST           r3,#0x01
0x080001B2 BF18      IT            NE
0x080001B4 1AFB      SUBS          r3,r7,r3
0x080001B6 F0430301  ORR           r3,r3,#0x01
0x080001BA 4718      BX            r3
0x080001BC 034C      DCW           0x034C
0x080001BE 0000      DCW           0x0000
0x080001C0 036C      DCW           0x036C
0x080001C2 0000      DCW           0x0000
                 __scatterload_copy:
0x080001C4 3A10      SUBS          r2,r2,#0x10
0x080001C6 BF24      ITT           CS
0x080001C8 C878      LDM           r0!,{r3-r6}
0x080001CA C178      STM           r1!,{r3-r6}
0x080001CC D8FA      BHI           __scatterload_copy (0x080001C4)
0x080001CE 0752      LSLS          r2,r2,#29
0x080001D0 BF24      ITT           CS
0x080001D2 C830      LDM           r0!,{r4-r5}
0x080001D4 C130      STM           r1!,{r4-r5}
0x080001D6 BF44      ITT           MI
0x080001D8 6804      LDR           r4,[r0,#0x00]
0x080001DA 600C      STR           r4,[r1,#0x00]
0x080001DC 4770      BX            lr
0x080001DE 0000      MOVS          r0,r0
                 __scatterload_zeroinit:
0x080001E0 2300      MOVS          r3,#0x00
0x080001E2 2400      MOVS          r4,#0x00
0x080001E4 2500      MOVS          r5,#0x00
0x080001E6 2600      MOVS          r6,#0x00
0x080001E8 3A10      SUBS          r2,r2,#0x10
0x080001EA BF28      IT            CS
0x080001EC C178      STM           r1!,{r3-r6}
0x080001EE D8FB      BHI           0x080001E8
0x080001F0 0752      LSLS          r2,r2,#29
0x080001F2 BF28      IT            CS
0x080001F4 C130      STM           r1!,{r4-r5}
0x080001F6 BF48      IT            MI
0x080001F8 600B      STR           r3,[r1,#0x00]
0x080001FA 4770      BX            lr
                 __rt_lib_init:
0x080001FC B51F      PUSH          {r0-r4,lr}
                 __rt_lib_init_fp_1:
0x080001FE F000F97E  BL.W          __semihosting_library_function (0x080004FE)
                 __rt_lib_init_alloca_1:
0x08000202 BD1F      POP           {r0-r4,pc}
                 __rt_lib_shutdown:
0x08000204 B510      PUSH          {r4,lr}
                 __rt_lib_shutdown_fp_trap_1:
0x08000206 BD10      POP           {r4,pc}
                 __rt_entry:
0x08000208 F000F943  BL.W          __user_setup_stackheap (0x08000492)
0x0800020C 4611      MOV           r1,r2
                 __rt_entry_li:
0x0800020E F7FFFFF5  BL.W          __rt_lib_init (0x080001FC)
                 __rt_entry_main:
0x08000212 F000F905  BL.W          main (0x08000420)
0x08000216 F000F961  BL.W          exit (0x080004DC)
                 __rt_exit:
0x0800021A B403      PUSH          {r0-r1}
                 __rt_exit_ls:
0x0800021C F7FFFFF2  BL.W          __rt_lib_shutdown (0x08000204)
                 __rt_exit_exit:
0x08000220 BC03      POP           {r0-r1}
0x08000222 F000F965  BL.W          _sys_exit (0x080004F0)
В стартапе я такого не наблюдаю, то есть я так понимаю кейл сам нахимичил эти вещи, что это такое и что оно делает?
Полазив по сайту арма стало ясно, что этто использование какой-то библиотеки линкера кейла, а что она делает эта библиотека?
То есть из всего этого, я так понимаю, что есть адресное пространство, которое использует и куда отправляет железо в процессе выполнения программы и которое должно быть сконфигурировано определенным образом. А есть адресное пространство, с которого начинается сама программа пользователя как таковая.
Вот меня интересует, где можно четко прочитать про эти вещи.
Реклама:
Batisto4ka вне форума  
Непрочитано 20.11.2013, 14:11  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Необходимо создать свой компилятор для stm32
А точно необходимо? Знаю, навскидку, только одного кто писал собственный компилятор и ОС, правда не под АРМ, что-то смог бы подсказать, но он сейчас не у дел, забил на это, здесь практически не появляется.
ИМХО, зря вы в это впряглись.
nahimovv вне форума  
Непрочитано 20.11.2013, 14:34  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Вот меня интересует, где можно четко прочитать про эти вещи.
Здесь http://www.dsi.fceia.unr.edu.ar/down...0Cortex-M3.pdf
niXto вне форума  
Непрочитано 20.11.2013, 15:45  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,594
Сказал спасибо: 115
Сказали Спасибо 807 раз(а) в 584 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Batisto4ka, с разморозкой!

arm-none-eabi-gcc
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 20.11.2013, 16:49  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,594
Сказал спасибо: 115
Сказали Спасибо 807 раз(а) в 584 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Абсолютно свободный КОНСОЛЬНЫЙ компилятор, линкер и транслятор в виде экзешников, без установок
Так вам, батенька, еще и под мастдайку надо? Хм, как бы сказать...

Но даже под игровую прошивку можно найти бинарник gcc для ARM'ов.

А еще напрягает выделение слова "консольный". А что, есть гуевые компиляторы? Отсыпьте, пожалуйста, своей травы!

И что значит "без установок"? Не хочется глобально ставить — втыкаете в хомяк + маленько переменные изменяете. Все будет работать.
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 20.11.2013, 16:56  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
их нужно скомпилировать, скомпоновать и создать исполняемый хекс или бин файл.
Желаете посоревноваться/утереть нос ведущим? Снимаю шляпу, удачи!
nahimovv вне форума  
Непрочитано 20.11.2013, 18:15  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 10,018
Сказал спасибо: 936
Сказали Спасибо 2,270 раз(а) в 1,565 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Главное никто не спросил зачем
А зачем это другим?
Вы бы сразу объяснили зачем , глядишь ухмылок меньше было БЫ ...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 20.11.2013, 22:24  
Impartial
Прописка
 
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
Impartial на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Необходимо создать свой компилятор для stm32.
А с какого языка?
Если ассемблер, то на сайте ARM есть исходник синтаксического анализатора.
Значение стека как раз по адресу 0х08000000. Это требование архитектуры.
Определяется компоновщиком.

Последний раз редактировалось Impartial; 20.11.2013 в 22:29.
Impartial вне форума  
Непрочитано 21.11.2013, 07:23  
boydyzy
Частый гость
 
Регистрация: 30.12.2008
Сообщений: 36
Сказал спасибо: 7
Сказали Спасибо 28 раз(а) в 13 сообщении(ях)
boydyzy на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

Сообщение от Batisto4ka Посмотреть сообщение
Главное никто не спросил зачем
Зачем?

Это очень напряжно, писать подобные тулзы. Нужен не дюжий опыт в создании подобных инструментов.
Если нет опыта - вы будете "изобретать велосипед" и не закончите.
Если есть опыт - тем более не возьметесь, т.к. придется выкинуть год и более жизни на то, что уже сделано другими.
Самый оптимальный способ - подогнать под себя то, что уже есть. Если что-то нужно страшное по конструкциям - то проще сделать препроцессор (вернее, использовать существующие тулзы, опять же), написать свои библиотеки и т.д.
"C" позволяет над собой очень издеваться...
Собираете набор небольших утилит, которые и будут собирать ваш проект из исходных *.c файлов.
Это будет гораздо быстрее и, главное, безглючнее.
boydyzy вне форума  
Непрочитано 21.11.2013, 10:50  
anton_1000
Прописка
 
Регистрация: 31.08.2008
Сообщений: 117
Сказал спасибо: 4
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
anton_1000 на пути к лучшему
По умолчанию Re: Свой компилятор/транлятор для stm32

девочка работает на космос. наверное хорошо платят раз взялась за написание транслятора, ой,... извините, компилятора.
anton_1000 вне форума  
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Апгрейд и комплектующие для ноутбуков mikesmith Барахолка электронных компонентов 28 17.05.2023 23:25
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Ностальжи по школе... Ar-Gen-Tum Отвлекитесь, эмбеддеры! 141 27.02.2015 16:10
[Решено] Сборник перлов любителей кабельщины mikesmith Отвлекитесь, эмбеддеры! 135 14.08.2007 15:49


Часовой пояс GMT +4, время: 16:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot