Лучше сразу... в машкодах... )))))))))))))))Satyr писал(а):разозлите как нибудь нафиг. сделаю вам мигалку диодом в 100 байт на асме - будете знать
ATMEL, ARM, STM, с чего начать
Re: ATMEL, ARM, STM, с чего начать
"Я не даю готовых решений, я заставляю думать!"(С)
- Реклама
-
loginrl103
- Родился
- Сообщения: 15
- Зарегистрирован: Вт июл 03, 2012 12:56:45
Re: ATMEL, ARM, STM, с чего начать
Люди, ну вот я хочу сёдня отправиться в магазин с комплектухой и взять и пик с платкой и макетку и всякую мелочь. Какую мне платку+пик брать? Или на месте посмотреть что есть в усб и какая подоходит под это дело pic ?
- atmicandr
- Друг Кота
- Сообщения: 6166
- Зарегистрирован: Вт мар 09, 2010 09:29:27
- Откуда: Свердловская область, г. Ирбит
Re: ATMEL, ARM, STM, с чего начать
Слушай, да откуда мы знаем что у тебя в магазе есть? 
"У принца Лимона всё наоборот: воры и убийцы у него во дворце, а в тюрьме сидят честные граждане" (с) Дж. Родари "Приключения Чипполино"
-
loginrl103
- Родился
- Сообщения: 15
- Зарегистрирован: Вт июл 03, 2012 12:56:45
Re: ATMEL, ARM, STM, с чего начать
ну думаю что в сосковских магазинах выбор комплектующих приличный, пару примеров подкиньте что смотреть.
Re: ATMEL, ARM, STM, с чего начать
на самом деле там ничего сложного нет, если читать reference manual внимательно...coredumped писал(а):... Одна только инциализация клоков и шин заведет новичка в полный ступор.
P.S. кстати для новичка мало иметь программатор. очень желателен эмулятор для отладки проекта в железе...
можно на первых порах обойтись PROTEUS'ом...
встроенный генератор HSI выдает (если мне не изменяет память) 16 МГц. А если его через PLL раскочегарить то будут все 32 (линейка L).HHIMERA писал(а):Ой ли???Satyr писал(а):Он и на стартовом RC генераторе будет фигарить шустрее АВРа (и с фюзами трахаться не надо)
Tais sa gueule et écoute un silence
- Реклама
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: ATMEL, ARM, STM, с чего начать
Для новичков господа из STM придумали специальный Clock Configuration Tool - макрос для excel, который даст возможность оному новичку в прекрасной наглядной форме выбрать свои исходные данные (используется HSI или HSE, PLL или напрямую, коэффициенты делителей мостов и пр.) и нажать кнопку "RUN". После чего макрос сгенерит "system_stm32xxxx", который останется только включить в проект.
Это я высказался только в сторону мнения "о новичках". Поддержка есть.
Агитировать я здесь никого не агитирую, быть может и есть смысл действительно начать с AVR?
ЗЫ.
Это я высказался только в сторону мнения "о новичках". Поддержка есть.
Агитировать я здесь никого не агитирую, быть может и есть смысл действительно начать с AVR?
ЗЫ.
Память не изменяет. А если на STM32F4xx, то будут все 168 МГц.brutal писал(а):встроенный генератор HSI выдает (если мне не изменяет память) 16 МГц. А если его через PLL раскочегарить то будут все 32 (линейка L).
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: ATMEL, ARM, STM, с чего начать
Вот-вот. Нужно Reference и programmer manual + datasheet на чип + еще в доку на ядро ARM нужно заглядывать. Я поначалу сам терялся где-чего (имея многолетний опыт!), потом привык. У AVR нужен всего лишь один документ - datasheet, в котором даже примеры-кусочки кода есть и на ASM, и на С. Для начинающего осваивать МК - намного проще будет.brutal писал(а): на самом деле там ничего сложного нет, если читать reference manual внимательно...
И все-же давайте будем объективными. НЕ ЗАБЫВАЕМ, что многие из нас уже по кавырнадцать собак съели вместе с МК
Все будет только лучше, в крайнем случае - хуже.
Re: ATMEL, ARM, STM, с чего начать
Распространенная ошибка. Все эти тулзы полезны не для новичков, которые не понимают, как это все делается, а для профи, которым уже все сто лет как ясно, и тупо лень считать руками. Начинающий должен хотя бы с месяцок все посчитать и понабирать руками. А когда придет понимание, можно осторожно переходить к облегчалкам.Для новичков господа из STM придумали специальный Clock Configuration Tool
Чтобы не было возгласов, что я "не видел, но осуждаю", скажу, что видел. Я сам совсем недавно проходил путь изучения STM8 и STM32.
Так вот, пока я вдумчиво не раскурил все мануалы на чип, я нифига не мог разобраться в архитектуре по тем сведениям, что прилагаются к либам. Библиотеки и облегчалки, которые ST так агрессивно пропихивает, конечно, полезны. Но только после того, как у человека уже есть приличный опыт. Непосредственное обучение новичков на них плодит быдлокодеров.
К слову, насчет производительности. Я пришел к выводу, что STM32 для меня слишком избыточны. У меня просто нет задач под них. А у начинающего и подавно.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: ATMEL, ARM, STM, с чего начать
С чего Вы взяли, что это ошибка? Это мое мнение, и совсем не факт, что оно ошибочное. Оно просто иное, вот и все. Речь идет о "быстром старте" - вот Вам быстрый старт. А когда заморгает светодиод (то есть будет какой-то минимальный результат), тогда уже можно и ковырять руками. Результат - он стимулирует..YS писал(а):Распространенная ошибка.
К слову, лично я пока не перековырял собственными руками практически все внутренности тех МК, с которыми работал (речь об STM32), библиотеками STM пользоваться не начал. Более того, я их избегал. Конечно, читать, понимать и делать руками придется, иначе толку от такого "обучения" - ноль.
Кстати, я тоже.YS писал(а):Я пришел к выводу, что STM32 для меня слишком избыточны.
Но уже за уши не оторвешь.)
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: ATMEL, ARM, STM, с чего начать
Опыт, сын ошибок трудных.С чего Вы взяли, что это ошибка?
Ой не всегда... Многие ли из поклонников Ардуйни пришли к нормальному эмбеду? Идеология ST - та же ардуйня, но на ARM. Что лично меня огорчает.А когда заморгает светодиод (то есть будет какой-то минимальный результат), тогда уже можно и ковырять руками. Результат - он стимулирует..
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- SubDia
- Держит паяльник хвостом
- Сообщения: 995
- Зарегистрирован: Сб апр 02, 2011 17:59:22
- Откуда: Город-герой Севастополь
Re: ATMEL, ARM, STM, с чего начать
Ой, вот давайте не будет об опыте, ладно? =))
А я вот считаю (к примеру), что ошибаетесь именно Вы, и именно Ваше мнение является ошибочным. Ну вот так я считаю. Как думаете, от этого Ваше мнение стало ошибочным?
А я вот считаю (к примеру), что ошибаетесь именно Вы, и именно Ваше мнение является ошибочным. Ну вот так я считаю. Как думаете, от этого Ваше мнение стало ошибочным?
Думаете? А как лучше было бы - пойти путем atmel?YS писал(а): Идеология ST - та же ардуйня
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )

Re: ATMEL, ARM, STM, с чего начать
Вобще ничего общегоYS писал(а):Идеология ST - та же ардуйня, но на ARM.
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: ATMEL, ARM, STM, с чего начать
По поводу библиотек, мнение свое выскажу я
+ облегчают жизнь
+ позволяют разобраться как это работает (исходники прилагаются)
- несколько не оптимальный код получается (но не всегда). Этот момент заслуживает отдельного топика, скажу лишь, что мне удалось повысить эффективность критических по времени процедур в 2 раза, только лишь отказавшись от использования вызовов библиотечных функций.
Но опять-таки отходим от темы. Решили ведь, что начинать нужно с ассемблера, при чем тут библиотеки для С?
Насчет уродца - ардуины согласен, что это путь к клиническому идиотизму.
+ облегчают жизнь
+ позволяют разобраться как это работает (исходники прилагаются)
- несколько не оптимальный код получается (но не всегда). Этот момент заслуживает отдельного топика, скажу лишь, что мне удалось повысить эффективность критических по времени процедур в 2 раза, только лишь отказавшись от использования вызовов библиотечных функций.
Но опять-таки отходим от темы. Решили ведь, что начинать нужно с ассемблера, при чем тут библиотеки для С?
Насчет уродца - ардуины согласен, что это путь к клиническому идиотизму.
Все будет только лучше, в крайнем случае - хуже.
Re: ATMEL, ARM, STM, с чего начать
Вот вобщем, мигалка светодиодом на АРМе за бакс. в железе ПРОВЕРЕНО. 56 байт прошивка. Мигает с полупериодом ~1с на порту A.1
Ну и чего тут такого космического и на порядки более сложного, чем AVR ???
Включили GPIOA, наточили bit 1 на выход в пушпуле, далее дергаем SET/RESET и ждем по секунде.
ГДЕ ТУТ НЕ##ИЧЕСКИЙ КОСМОС ???
проект под IAR:
Ну и чего тут такого космического и на порядки более сложного, чем AVR ???
Код: Выделить всё
MODULE ?cstartup
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
EXTERN main
PUBLIC __vector_table
PUBLIC __iar_program_start
DATA
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handlerwaitcyclewaitcycle
GPIO_A_BASE
DCD 0x40010800
RCC_APB2BASE
DCD 0x40021000
WAITVALUE
DCD 1000000
APB2OFS_ENR DEFINE 0x18
APB2BIT_GPIOA DEFINE 4
PIN1PP2MHZ DEFINE (2 << 4)
GPIOOFS_CRL DEFINE 0
GPIOOFS_BSRR DEFINE 0x10
GPIOBIT1 DEFINE 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
THUMB
PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER(2)
Reset_Handler
__iar_program_start
LDR R2, RCC_APB2BASE
MOVS R0, #APB2BIT_GPIOA
STR R0, [R2, #APB2OFS_ENR] ; APB2ENR = GPIOA
LDR R2, GPIO_A_BASE
MOVS R0, #PIN1PP2MHZ
STR R0, [R2, #GPIOOFS_CRL] ; GPIOA_CRL = 2 ( OUT PushPullll 2)MHZ)
MOVS R0, #GPIOBIT1
blinkcycle
STR R0, [R2, #GPIOOFS_BSRR] ; GPIOA_BSR = 1 ( set Pin0)
MOV R0, R0, ROR #+16
LDR R3, WAITVALUE
waitcycle
SUBS R3, R3, #1
CMP R3, #0
BNE.N waitcycle
B blinkcycle
END
ГДЕ ТУТ НЕ##ИЧЕСКИЙ КОСМОС ???
проект под IAR:
Re: ATMEL, ARM, STM, с чего начать
OK. А теперь доступно объясните, что такое:ГДЕ ТУТ НЕ##ИЧЕСКИЙ КОСМОС ???
NOROOT(2)
EXTERN main - почему extern? Там еще что-то с PUBLIC есть... Зачем и почему?
Что это:
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handlerwaitcyclewaitcycle
Причем тут вектора? И где они, кстати?
PUBWEAK - что такое и зачем?
REORDER(2)
Вообще что за формат типа SECTION .text:CODE:REORDER(2) ? И так далее.
У AVR все ограничивается .cseg/.dseg/.eseg, остального для начала не надо.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: ATMEL, ARM, STM, с чего начать
Ну какбе подразумеваются некоторые начальные знания ассемблеров. Все что ниже - из разряда RTFM.
EXTERN, PUBLIC - вполне стандартные декларации импортируемых и экспортируемых сущностей для линкера
PUBWEAK - 'слабое' определение сущности. Которое будет выброшено (а не приведет к конфликту) в случае появления сильного определения.
Конструкции типа SECTION .text:CODE:REORDER(2) - определение сегментов
имя / тип (код, данные rw, данные ro) / флаги / выравнивание (степень двойки)
ROOT/NOROOT - инструкции линкеру оставлять или выкидывать код на который нет обращений
REORDER/NOREORDER - сделать новую секцию кода, либо прилепить к имеющейся секции того же типа
Все это конкретно к IARовскому компилятору. У GNU и Keil практически до букв и запятых так же.
Далее не неблагодарный ликбез, а по сути.
Тот пример я нафигачил за полчаса (с проверкой
) из рыбы стартап модуля из СТ библиотеки. Были лишние ошметки, теперь совсем чистый:
Заявляем сегмент стека (размер линкер возмет из линкер скрипта. но в данном примере мы стек не используем, нет смысла углубляться. формальность)
Начинаем сегмент .intvec , который по линкер скрипту (размещается в начале флеш-памяти ):
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
Это таблица прерываний. Первое 32бит значение - грузится в SP (т.е. вершина стека), второе в PC ( считай начало исполнения программы после резета)
Далее некоторый хак. таблица прерываний насчитвает десятки записей. Но - прерывания использовать (и ессно разрешать) не планируем, считаем нашу убогую программу совершенно надежный и на вываливание по хендлерам ошибок ядра не расчитываем -)) т.е. дальнейшую таблицу прерываний используем под код.
итого :
DCD sfe(CSTACK)
DCD __iar_program_start
макро кладет адрес сегмента стека (пофиг, но соблюдение формальности за бесплатно)
адрес начала кода
далее подкладываем еще несколько констант. всеравно сегмент данных, что их лишнее плодить:
GPIO_A_BASE
DCD 0x40010800
RCC_APB2BASE
DCD 0x40021000
WAITVALUE
DCD 1000000
Соотв. базовый адрес GPIO контроллера порта А, базовый адрес контроллера резетов да клоков, постоянная циклов ожидания для моргалки
Далее кое какие дефайны
APB2OFS_ENR DEFINE 0x18
APB2BIT_GPIOA DEFINE 4
PIN1PP2MHZ DEFINE (2 << 4)
GPIOOFS_CRL DEFINE 0
GPIOOFS_BSRR DEFINE 0x10
GPIOBIT1 DEFINE 2
Смещение регистра ENR шины APB2, битик GPIO_A контроллеры в том самом регистре
Значение конфига ноги "1", что мы хотим задать (вобщем то аналог DDRx в AVR)
Смещение регистра CRL (конфиг ног) и BSRR (битовый регистр SET/RESET) GPIO контроллера
И собственно битик, отвечающий за ногу "1"
Ну а дальше сам код
LDR R2, RCC_APB2BASE
MOVS R0, #APB2BIT_GPIOA
STR R0, [R2, #APB2OFS_ENR] ; APB2ENR = GPIOA
LDR R2, GPIO_A_BASE
MOVS R0, #PIN1PP2MHZ
STR R0, [R2, #GPIOOFS_CRL] ; GPIOA_CRL = 2 ( OUT PushPullll 2)MHZ)
Разрешаем в регистре APB2ENR (подаем тактовку) на GPIO_A контроллер
Грузим в регистр GPIOA_CRL конфиг для ноги "1" - работать на выход в пуш-пул режиме
Все, нога у нас настроена.
Взводим в регистр R0 бит ноги "1" для дальнейшего
MOVS R0, #GPIOBIT1
Моргаем.
ну, с задержкой все просто:
LDR R3, WAITVALUE
waitcycle
SUBS R3, R3, #1
CMP R3, #0
BNE.N waitcycle
грузим в R3 наше WAITVALUE
делаем -1, сравнение, возвращаемся на исходную, если пока не ноль.
Непосредственно моргалка.
Тут некоторая предистория - у GPIO контроллеров есть приятный такой регистр BSSR состоящий из двух 16 битных половинок. при записи соотв. ногам битов в одну часть он их взводит в 1, в другую половину - сбрасывает в ноль. Итого за единственную запись можно изменить положение любых ног в любое состояние без предварительного чтения.
что мы делаем
STR R0, [R2, #GPIOOFS_BSRR] ; GPIOA_BSR = 1 ( set Pin0)
MOV R0, R0, ROR #+16
выводим в BSRR наше значние R0 (там у нас предвариельно сделано MOVS R0, #GPIOBIT1)
далее крутим этот регистр на 16 бит. т.е. наш бит через раз оказывается то в верхнем полурегистре, то в нижнем - вот и моргаем
Вопросы есть ?
EXTERN, PUBLIC - вполне стандартные декларации импортируемых и экспортируемых сущностей для линкера
PUBWEAK - 'слабое' определение сущности. Которое будет выброшено (а не приведет к конфликту) в случае появления сильного определения.
Конструкции типа SECTION .text:CODE:REORDER(2) - определение сегментов
имя / тип (код, данные rw, данные ro) / флаги / выравнивание (степень двойки)
ROOT/NOROOT - инструкции линкеру оставлять или выкидывать код на который нет обращений
REORDER/NOREORDER - сделать новую секцию кода, либо прилепить к имеющейся секции того же типа
Все это конкретно к IARовскому компилятору. У GNU и Keil практически до букв и запятых так же.
Далее не неблагодарный ликбез, а по сути.
Тот пример я нафигачил за полчаса (с проверкой
Код: Выделить всё
MODULE ?cstartup
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:NOROOT(2)
PUBLIC __iar_program_start
DATA
DCD sfe(CSTACK)
DCD __iar_program_start
GPIO_A_BASE
DCD 0x40010800
RCC_APB2BASE
DCD 0x40021000
WAITVALUE
DCD 1000000
APB2OFS_ENR DEFINE 0x18
APB2BIT_GPIOA DEFINE 4
PIN1PP2MHZ DEFINE (2 << 4)
GPIOOFS_CRL DEFINE 0
GPIOOFS_BSRR DEFINE 0x10
GPIOBIT1 DEFINE 2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
THUMB
SECTION .text:CODE:REORDER(2)
__iar_program_start
LDR R2, RCC_APB2BASE
MOVS R0, #APB2BIT_GPIOA
STR R0, [R2, #APB2OFS_ENR] ; APB2ENR = GPIOA
LDR R2, GPIO_A_BASE
MOVS R0, #PIN1PP2MHZ
STR R0, [R2, #GPIOOFS_CRL] ; GPIOA_CRL = 2 ( OUT PushPullll 2)MHZ)
MOVS R0, #GPIOBIT1
blinkcycle
STR R0, [R2, #GPIOOFS_BSRR] ; GPIOA_BSR = 1 ( set Pin0)
MOV R0, R0, ROR #+16
LDR R3, WAITVALUE
waitcycle
SUBS R3, R3, #1
CMP R3, #0
BNE.N waitcycle
B blinkcycle
END
Начинаем сегмент .intvec , который по линкер скрипту (размещается в начале флеш-памяти ):
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
Это таблица прерываний. Первое 32бит значение - грузится в SP (т.е. вершина стека), второе в PC ( считай начало исполнения программы после резета)
Далее некоторый хак. таблица прерываний насчитвает десятки записей. Но - прерывания использовать (и ессно разрешать) не планируем, считаем нашу убогую программу совершенно надежный и на вываливание по хендлерам ошибок ядра не расчитываем -)) т.е. дальнейшую таблицу прерываний используем под код.
итого :
DCD sfe(CSTACK)
DCD __iar_program_start
макро кладет адрес сегмента стека (пофиг, но соблюдение формальности за бесплатно)
адрес начала кода
далее подкладываем еще несколько констант. всеравно сегмент данных, что их лишнее плодить:
GPIO_A_BASE
DCD 0x40010800
RCC_APB2BASE
DCD 0x40021000
WAITVALUE
DCD 1000000
Соотв. базовый адрес GPIO контроллера порта А, базовый адрес контроллера резетов да клоков, постоянная циклов ожидания для моргалки
Далее кое какие дефайны
APB2OFS_ENR DEFINE 0x18
APB2BIT_GPIOA DEFINE 4
PIN1PP2MHZ DEFINE (2 << 4)
GPIOOFS_CRL DEFINE 0
GPIOOFS_BSRR DEFINE 0x10
GPIOBIT1 DEFINE 2
Смещение регистра ENR шины APB2, битик GPIO_A контроллеры в том самом регистре
Значение конфига ноги "1", что мы хотим задать (вобщем то аналог DDRx в AVR)
Смещение регистра CRL (конфиг ног) и BSRR (битовый регистр SET/RESET) GPIO контроллера
И собственно битик, отвечающий за ногу "1"
Ну а дальше сам код
LDR R2, RCC_APB2BASE
MOVS R0, #APB2BIT_GPIOA
STR R0, [R2, #APB2OFS_ENR] ; APB2ENR = GPIOA
LDR R2, GPIO_A_BASE
MOVS R0, #PIN1PP2MHZ
STR R0, [R2, #GPIOOFS_CRL] ; GPIOA_CRL = 2 ( OUT PushPullll 2)MHZ)
Разрешаем в регистре APB2ENR (подаем тактовку) на GPIO_A контроллер
Грузим в регистр GPIOA_CRL конфиг для ноги "1" - работать на выход в пуш-пул режиме
Все, нога у нас настроена.
Взводим в регистр R0 бит ноги "1" для дальнейшего
MOVS R0, #GPIOBIT1
Моргаем.
ну, с задержкой все просто:
LDR R3, WAITVALUE
waitcycle
SUBS R3, R3, #1
CMP R3, #0
BNE.N waitcycle
грузим в R3 наше WAITVALUE
делаем -1, сравнение, возвращаемся на исходную, если пока не ноль.
Непосредственно моргалка.
Тут некоторая предистория - у GPIO контроллеров есть приятный такой регистр BSSR состоящий из двух 16 битных половинок. при записи соотв. ногам битов в одну часть он их взводит в 1, в другую половину - сбрасывает в ноль. Итого за единственную запись можно изменить положение любых ног в любое состояние без предварительного чтения.
что мы делаем
STR R0, [R2, #GPIOOFS_BSRR] ; GPIOA_BSR = 1 ( set Pin0)
MOV R0, R0, ROR #+16
выводим в BSRR наше значние R0 (там у нас предвариельно сделано MOVS R0, #GPIOBIT1)
далее крутим этот регистр на 16 бит. т.е. наш бит через раз оказывается то в верхнем полурегистре, то в нижнем - вот и моргаем
Вопросы есть ?
Re: ATMEL, ARM, STM, с чего начать
p.s. PUBLIC __iar_program_start - чисто формальность для ИАРовского линкера. Ну никак не хочет собирать, елси не показать ему, где начало программы. хотя ему это по сути до лампочки, чисто внутреннее дело разработчика.
p.p.s. линкерскрипт стандартный generic_cortex. собственно кроме адреса начала флеша (под таблицу прерываний) нам ничего от туда не надо.
Да, и еще - после резета ядро тактуется от 8MHz внутреннего RC генератора, прерывания отключены и т.д. и т.п.
Ну и не помериться, а чисто для интереса - нарисуйте кто нибудь моргалку для AVR на асме и сколько байт прошивка получится ?
p.p.s. линкерскрипт стандартный generic_cortex. собственно кроме адреса начала флеша (под таблицу прерываний) нам ничего от туда не надо.
Да, и еще - после резета ядро тактуется от 8MHz внутреннего RC генератора, прерывания отключены и т.д. и т.п.
Ну и не помериться, а чисто для интереса - нарисуйте кто нибудь моргалку для AVR на асме и сколько байт прошивка получится ?
Re: ATMEL, ARM, STM, с чего начать
О! доброволец детектедcoredumped писал(а):Как я уже писал ранее - напишите мигалку светодиодом под ARM на ассемблере, а я напишу под AVR.
Re: ATMEL, ARM, STM, с чего начать
Угу. А теперь объясните нулевому начинающему (а еще хуже - ардуинщику), что такое импорт/экспорт, сегменты, что такое выравнивание и нафига оно надо, что такое секции, и т.п.EXTERN, PUBLIC - вполне стандартные декларации импортируемых и экспортируемых сущностей для линкера
PUBWEAK - 'слабое' определение сущности. Которое будет выброшено (а не приведет к конфликту) в случае появления сильного определения.
Конструкции типа SECTION .text:CODE:REORDER(2) - определение сегментов
имя / тип (код, данные rw, данные ro) / флаги / выравнивание (степень двойки)
ROOT/NOROOT - инструкции линкеру оставлять или выкидывать код на который нет обращений
REORDER/NOREORDER - сделать новую секцию кода, либо прилепить к имеющейся секции того же типа
Для AVR это выглядит так (бегущий огонек, тактирование - ATmega48 по умолчанию 8МГц + CKDIV8 (с завода с этим фьюзом идут) -> 1МГц):
Код: Выделить всё
.include "m48def.inc"
.cseg
.org 0
ser R16
out DDRB,R16
ldi R16,1
MAIN_LOOP:
rol R16
out PORTB,R16
clr R17
clr R18
ldi R19,15
WAIT_LOOP:
dec R17
brne WAIT_LOOP
dec R18
brne WAIT_LOOP
dec R19
brne WAIT_LOOP
rjmp MAIN_LOOP
.cseg - собираемся писать код.
.org 0 - положить прямо с начала памяти (и даже не надо пугать нуба словом "прерывание"). Все. Дальше чисто алгоритм.
Код: Выделить всё
ATmega48 memory use summary [bytes]:
Segment Begin End Code Data Used Size Use%
---------------------------------------------------------------
[.cseg] 0x000000 0x00001e 30 0 30 4096 0.7%
[.dseg] 0x000100 0x000100 0 0 0 512 0.0%
[.eseg] 0x000000 0x000000 0 0 0 256 0.0%
Assembly complete, 0 errors. 0 warnings
No comments.56 байт прошивка.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- DIHALT
- Потрогал лапой паяльник
- Сообщения: 387
- Зарегистрирован: Пт сен 12, 2008 03:26:14
- Контактная информация:
Re: ATMEL, ARM, STM, с чего начать
Если бы не программатор, то я бы вообще рекомендовал АТ89С51 Мировой камень. Периферии практически нет, путаться негде. Для задач новичка хватит за глаза. Когда же полезут ограничения, то переход на другую архитектуру будет прост и осознан.



