Re: ATMEL, ARM, STM, с чего начать
Добавлено: Пт июл 06, 2012 10:50:41
Лучше сразу... в машкодах... )))))))))))))))Satyr писал(а):разозлите как нибудь нафиг. сделаю вам мигалку диодом в 100 байт на асме - будете знать
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Лучше сразу... в машкодах... )))))))))))))))Satyr писал(а):разозлите как нибудь нафиг. сделаю вам мигалку диодом в 100 байт на асме - будете знать
на самом деле там ничего сложного нет, если читать reference manual внимательно...coredumped писал(а):... Одна только инциализация клоков и шин заведет новичка в полный ступор.
встроенный генератор HSI выдает (если мне не изменяет память) 16 МГц. А если его через PLL раскочегарить то будут все 32 (линейка L).HHIMERA писал(а):Ой ли???Satyr писал(а):Он и на стартовом RC генераторе будет фигарить шустрее АВРа (и с фюзами трахаться не надо)
Память не изменяет. А если на STM32F4xx, то будут все 168 МГц.brutal писал(а):встроенный генератор HSI выдает (если мне не изменяет память) 16 МГц. А если его через PLL раскочегарить то будут все 32 (линейка L).
Вот-вот. Нужно Reference и programmer manual + datasheet на чип + еще в доку на ядро ARM нужно заглядывать. Я поначалу сам терялся где-чего (имея многолетний опыт!), потом привык. У AVR нужен всего лишь один документ - datasheet, в котором даже примеры-кусочки кода есть и на ASM, и на С. Для начинающего осваивать МК - намного проще будет.brutal писал(а): на самом деле там ничего сложного нет, если читать reference manual внимательно...
Распространенная ошибка. Все эти тулзы полезны не для новичков, которые не понимают, как это все делается, а для профи, которым уже все сто лет как ясно, и тупо лень считать руками. Начинающий должен хотя бы с месяцок все посчитать и понабирать руками. А когда придет понимание, можно осторожно переходить к облегчалкам.Для новичков господа из STM придумали специальный Clock Configuration Tool
С чего Вы взяли, что это ошибка? Это мое мнение, и совсем не факт, что оно ошибочное. Оно просто иное, вот и все. Речь идет о "быстром старте" - вот Вам быстрый старт. А когда заморгает светодиод (то есть будет какой-то минимальный результат), тогда уже можно и ковырять руками. Результат - он стимулирует..YS писал(а):Распространенная ошибка.
Кстати, я тоже.YS писал(а):Я пришел к выводу, что STM32 для меня слишком избыточны.
Опыт, сын ошибок трудных.С чего Вы взяли, что это ошибка?
Ой не всегда... Многие ли из поклонников Ардуйни пришли к нормальному эмбеду? Идеология ST - та же ардуйня, но на ARM. Что лично меня огорчает.А когда заморгает светодиод (то есть будет какой-то минимальный результат), тогда уже можно и ковырять руками. Результат - он стимулирует..
Думаете? А как лучше было бы - пойти путем atmel?YS писал(а): Идеология ST - та же ардуйня
Вобще ничего общегоYS писал(а):Идеология ST - та же ардуйня, но на ARM.
Код: Выделить всё
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
OK. А теперь доступно объясните, что такое:ГДЕ ТУТ НЕ##ИЧЕСКИЙ КОСМОС ???
Код: Выделить всё
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
О! доброволец детектедcoredumped писал(а):Как я уже писал ранее - напишите мигалку светодиодом под ARM на ассемблере, а я напишу под AVR.
Угу. А теперь объясните нулевому начинающему (а еще хуже - ардуинщику), что такое импорт/экспорт, сегменты, что такое выравнивание и нафига оно надо, что такое секции, и т.п.EXTERN, PUBLIC - вполне стандартные декларации импортируемых и экспортируемых сущностей для линкера
PUBWEAK - 'слабое' определение сущности. Которое будет выброшено (а не приведет к конфликту) в случае появления сильного определения.
Конструкции типа SECTION .text:CODE:REORDER(2) - определение сегментов
имя / тип (код, данные rw, данные ro) / флаги / выравнивание (степень двойки)
ROOT/NOROOT - инструкции линкеру оставлять или выкидывать код на который нет обращений
REORDER/NOREORDER - сделать новую секцию кода, либо прилепить к имеющейся секции того же типа
Код: Выделить всё
.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
Код: Выделить всё
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 байт прошивка.