STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Andrew Martin писал(а):А что такое конец кода?
gnu as добавляет константы в конец секции кода (у меня это .text), компилю под cortex-m3, вот какой предел для pc-based адресации не знаю :oops: .
Мне показалось довольно удобным когда компилятор сам преобразует ldr r0, = VAL1 например в:

Код: Выделить всё

...
ldr r0, [_val1]
...
_val1 dw VAL1
...
но, если такое ограничение весьма маленькое, то, согласен с вами, лучше вручную объявлять недалеко от ldr.

Вообще эти вопросы возникли при выборе компилятора (начинающий я в армах): gnu as - препроцессор никакой, команды на несколько строк не могу писать, но отлаживать проще т.к. можно сгенерить понятный листинг дизассемблера, fasm - препроцессор круть (под win я на нем программирую), но все эта особенность ldr требует объявления вручную. Но тем не менее, склоняюсь к fasmarm.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

С отладкой да, вопросы есть :(
Автор модификации (revolution) сделал возможность генерировать выходной файл сразу в исполняемом ELF формате с отладочной информацией формата DWARF2 без всякой линковки.
Не так давно автором проведён багфикс и теперь отладчики более-менее сносно читают отладочную информацию, осталась проблемка с макросами. На данный момент после наущения батьки Томаша revolution впал то ли в ступор, то ли в нирвану :))) Дальнейшая судьба fasmarm в контексте возможностей отладки весьма туманна. Подробнее здесь.

Вам нужен какой листинг? Продукт дизассемблера или продукт ассемблера?

Есть резон отлаживать используя формат ELF DWARF, а потом компилировать сразу в бинарный образ (format binary) и его накатывать во флешъ. Я же не знаю чем и как вы там отлаживаете.
Реклама
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Листинг я имел ввиду дизассемблера, какой генерит objdump из объектного файла *.o, он там со всеми символами с именами меток - сразу видно что и где. А то с бинарника листинг - голый код.
Отлаживаю в железе, поскольку изучаю :) , просто пошагово выполняю в st-utility попутно сверяясь с этим листингом.
В листинге дизассемблера от objdump указывается, что формат *.o файла elf32-littlearm, не совсем понимаю в чем его отличие от elf dwarf. Может генерить *.o из fasmarm, а потом из него elf (используя ld) и далее bin (используя objcopy)?
Автор забросил fasmarm?
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Автор забросил fasmarm?
Не знаю. Последний релиз вышел с месяц назад. Если хотите - можете сами у него спросить, ссылку на форум я дал выше. Автор молчит, поэтому либо упорно трудится и радикально перерабатывает генерацию отладочной информации, либо просто забил на это дело.

Изначально fasmarm умеет генерировать отладочную информацию отдельным файлом в формате *.fas, но ни один сторонний отладчик (кроме Ольки с соответствующим плагином) не умеет с ней работать. Автор надстройки сделал возможность в fasmarm генерировать отладочную информацию в формате DWARF2, которая упрятывается в соответствующие секции эльфа.

Объектный ELF (файл *.o) не содержит абсолютных адресов, поэтому связать листинг, который генерит objdump из файла *.o с конечным бинарником может быть весьма трудно. Но это дело вкуса :)

Если as умеет генерировать только объектный ELF (*.o), которые нужно потом линковать ld в исполняемый ELF (*.elf, *.axf) и потом получать bin или hex, то fasmarm помимо объектного эльфа умеет генерировать сразу исполняемый ELF, поэтому никакие линкеры ему не требуются.

Исполняемый ELF содержит помимо таблицы символов (которая содержится и в объектнике и где прописаны имена меток, констант и т.д.) ещё и другую отладочную информацию в формате DWARF2 (например сопоставление абсолютных адресов с номерами строк исходного кода).

Поэтому если пользовать fasmarm, то есть резон генерировать сразу исполняемый ELF, а не объектник.

Для этого:

Код: Выделить всё

format ELF DWARF executable at 0

Вообще fasmarm имеет много преимуществ перед as. Одна только директива virtual at чего стОит! :)) Единственный недостаток - приколы с генерацией отладочной информации. Но мне это не очень мешает.

Вот пример кода из одного проекта для STM32F030:

Код: Выделить всё

rcc_config:	;Configure HSE
	ldr	r3,[.rcc_base]
	virtual at r3
	.rcc	RCC_TypeDef
	end virtual
	ldr	r0,[.rcc.CR]		;enable HSE oscillator
	ldbit	r1,RCC_CR_HSEON
	orrs	r0,r1
	str	r0,[.rcc.CR]
	ldbit	r1,RCC_CR_HSERDY
    @@:		;wait until oscillator is ready
	ldr	r0,[.rcc.CR]
	tst	r0,r1
	beq	@r
	
	;Configure PLL
	ldr	r0,[.rcc.CFGR]
	ldbit	r1,RCC_CFGR2_PREDIV1	;PREDIV = 1 (PLL input clock not divided)
	bics	r0,r1
	str	r0,[.rcc.CFGR]
		
	ldr	r0,[.rcc.CFGR]
	ldbit	r1,RCC_CFGR_PLLMUL		;PLLMUL = x2
	bics	r0,r1
	ldbit	r1,RCC_CFGR_PLLSRC_PREDIV1	;HSE/PREDIV as PLL clock source
	orrs	r0,r1
	ldbit	r1,RCC_CFGR_HPRE		;HCLK not divided
	bics	r0,r1
	ldbit	r1,RCC_CFGR_PPRE		;PCLK not divided
	bics	r0,r1
	str	r0,[.rcc.CFGR]
	
	ldr	r0,[.rcc.CR]		;enable PLL
	ldbit	r1,RCC_CR_PLLON
	orrs	r0,r1
	str	r0,[.rcc.CR]
	ldbit	r1,RCC_CR_PLLRDY
    @@:		;wait until PLL is ready
	ldr	r0,[.rcc.CR]
	tst	r0,r1
	beq	@r
		
	ldr	r0,[.rcc.CFGR]		;select PLL as system clock
	ldbit	r1,RCC_CFGR_SW
	bics	r0,r1
	ldbit	r1,RCC_CFGR_SW_PLL
	str	r0,[.rcc.CFGR]
	ldbit	r1,RCC_CFGR_SWS
	ldbit	r2,RCC_CFGR_SWS_PLL
    @@:		;wait until new clock source selected
	ldr	r0,[.rcc.CFGR]		
	ands	r0,r1
	cmp	r0,r2
	bne	@r
		
	;Enable peripheral clocks on AHB
	ldr	r0,[.rcc.AHBENR]
	ldr	r1,[.ahb_clk_en]
	orrs	r0,r1
	str	r0,[.rcc.AHBENR]
		
	;Enable peripheral clocks on APB
	ldr	r0,[.rcc.APB2ENR]
	ldr	r1,[.apb2_clk_en]
	orrs	r0,r1
	str	r0,[.rcc.APB2ENR]
		
	ldr	r0,[.rcc.APB1ENR]
	ldr	r1,[.apb1_clk_en]
	orrs	r0,r1
	str	r0,[.rcc.APB1ENR]
	
	bx	lr
		
align 4		
.rcc_base	              dw RCC_BASE
.ahb_clk_en	dw RCC_AHBENR_GPIOAEN+RCC_AHBENR_GPIOBEN+RCC_AHBENR_DMAEN
.apb2_clk_en	dw RCC_APB2ENR_ADCEN+RCC_APB2ENR_SPI1EN+RCC_APB2ENR_TIM1EN
.apb1_clk_en	dw RCC_APB1ENR_TIM14EN

И это с минимумом макросов. Удобство написания кода впечатляет! :)))
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Andrew Martin писал(а):Одна только директива virtual at чего стОит!
О да! хорошая вещь!
Andrew Martin писал(а):Поэтому если пользовать fasmarm, то есть резон генерировать сразу исполняемый ELF, а не объектник.
А как потом с него получить бинарник или дизасм листинг?
Andrew Martin писал(а):Вот пример кода из одного проекта
Не спорю, код на fasm выглядит, читается и пишется куда лучше любых других ассемблеров))
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а):А как потом с него получить бинарник или дизасм листинг?
Как и из любого другого эльфа - можно натравить на него objdump/objcopy и много чего ещё (readelf например) или может быть даже родной АРМовский fromelf.

А можно поменять несколько строчек в коде и сразу собрать сырой bin. Вариантов масса.

Кстати, в новом протеусе появились Cortex-M3. Пробовал скармливать ему в качестве прошивки исполняемый эльф - съел, не подавился :))) Даже окошко с исходниками показал, и по строкам шагал.
Реклама
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Andrew Martin писал(а):натравить на него objdump/objcopy
ругается: arm-none-eabi-objcopy.exe:test: Bad value
Andrew Martin писал(а):(readelf например) или может быть даже родной АРМовский fromelf
readelf я посмотрел вроде только инфу выдает по файлу, не конвертирует
Andrew Martin писал(а):А можно поменять несколько строчек в коде и сразу собрать сырой bin. Вариантов масса.
вариант с format binary/ELF ?
Andrew Martin писал(а):Кстати, в новом протеусе появились Cortex-M3
О, качаем ))
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а): ругается: arm-none-eabi-objcopy.exe:test: Bad value
вариант с format binary/ELF ?
Да, format binary.

Иногда binutils ругаются, в чем дело - не знаю. Но в основном кушают эльф без проблем.
Если бы рассказывали, что это за value, которое bad, можно было бы поискать баги.
Сам вручную разбирал генерируемый ELF - никаких страшных багов не заметил. ХЗ что им не нравится, надо разбираться...

Вот это попробуйте дизассемблировать:
Вложения
dso_micro.zip
(3.25 КБ) 175 скачиваний
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

это дизассемблируется успешно:

Код: Выделить всё


dso_micro.axf:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_vectors>:
   0:	20001000 	andcs	r1, r0, r0
   4:	00000113 	andeq	r0, r0, r3, lsl r1
   8:	000000c1 	andeq	r0, r0, r1, asr #1
   c:	000000c1 	andeq	r0, r0, r1, asr #1
  10:	00000111 	andeq	r0, r0, r1, lsl r1
  14:	00000111 	andeq	r0, r0, r1, lsl r1
  18:	00000111 	andeq	r0, r0, r1, lsl r1
  1c:	00000111 	andeq	r0, r0, r1, lsl r1
  20:	00000111 	andeq	r0, r0, r1, lsl r1

...
Andrew Martin писал(а):Если бы рассказывали, что это за value, которое bad
Сам хотел бы знать :) , вот все, что выдает:

Код: Выделить всё

..\gccas\bin\arm-none-eabi-objdump.exe: main103: Bad value
на команду:

Код: Выделить всё

..\gccas\bin\arm-none-eabi-objdump.exe -D main103 > disasm.txt
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: STM32 новичку в ARM что к чему

Сообщение pokk »

Добрый день, как в IAR настроить версию release что бы она игнорировала функции printf?

PS: Такое не предлагать, хочу натыкать printf в многих функциях и не хочу что бы оно мешало.

Код: Выделить всё

#ifndef NODEBUG
printf(...);
#endif
BorisSPB
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Re: STM32 новичку в ARM что к чему

Сообщение BorisSPB »

pokk, что-нибудь вроде такого, раздел Альтернативы...
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: STM32 новичку в ARM что к чему

Сообщение pokk »

Благодарю за помощь!
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а):это дизассемблируется успешно:

Код: Выделить всё


dso_micro.axf:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_vectors>:
   0:	20001000 	andcs	r1, r0, r0
   4:	00000113 	andeq	r0, r0, r3, lsl r1
   8:	000000c1 	andeq	r0, r0, r1, asr #1
   c:	000000c1 	andeq	r0, r0, r1, asr #1
  10:	00000111 	andeq	r0, r0, r1, lsl r1
  14:	00000111 	andeq	r0, r0, r1, lsl r1
  18:	00000111 	andeq	r0, r0, r1, lsl r1
  1c:	00000111 	andeq	r0, r0, r1, lsl r1
  20:	00000111 	andeq	r0, r0, r1, lsl r1

...

Это не оно - гребёт сразу по 4 байта. :shock:

Задайте машину и переключите objdump в Thumb mode.

Код: Выделить всё

-m arm --disassembler-options=force-thumb
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Это не критично, главное что формат понимает :) :

Код: Выделить всё

dso_micro.axf:     file format elf32-littlearm


Disassembly of section .text:

00000000 <_vectors>:
   0:	20001000 	.word	0x20001000
   4:	00000113 	.word	0x00000113
   8:	000000c1 	.word	0x000000c1
   c:	000000c1 	.word	0x000000c1
  10:	00000111 	.word	0x00000111
  14:	00000111 	.word	0x00000111
  18:	00000111 	.word	0x00000111
  1c:	00000111 	.word	0x00000111
  20:	00000111 	.word	0x00000111

  ...
А то что получается fasm'ом ни в какую не берет :( :

Код: Выделить всё

..\gccas\bin\arm-none-eabi-objdump.exe: test.elf: Bad value
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

То, что я скинул, тоже сделано при помощи fasmarm :)
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

:shock: как так .. я компилировал из fasm'овской ide такой простой исходник:

Код: Выделить всё

format elf dwarf executable

section '.text' executable readable align 2

dw 0x02050000
dw _entry_point+1

_entry_point:
eor r6, r6
mov r0, 0x02000000
b _entry_point 
Получаю на выходе файл test (без расширения) и он неизвестного формата получается для objdump.
ps. fasmarm v1.36
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а)::shock: как так .. я компилировал из fasm'овской ide такой простой исходник:

Код: Выделить всё

format elf dwarf executable

section '.text' executable readable align 2

dw 0x02050000
dw _entry_point+1

_entry_point:
eor r6, r6
mov r0, 0x02000000
b _entry_point 
Получаю на выходе файл test (без расширения) и он неизвестного формата получается для objdump.
ps. fasmarm v1.36
Расширение какое зададите, такое и будет. Не хватает объявления точки входа

Код: Выделить всё

entry _entry_point+1
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Andrew Martin писал(а):Не хватает объявления точки входа
Не помогает. Всеравно Bad value.

Каким фасмом вы компилировали? какой версии?
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Самым свежим - 1.36.
Кажется, это проблемы binutils.
Скачал просмотрщик эльфов Т34 - показывает нормально, даже скомпилированный из вашего исходника.
Надо искать и пинать авторов binutils на предмет багов.

Здесь есть онлайн дизассемблер, попробуйте загнать свой файл (просто чтобы убедиться в лаже objdump)

https://retdec.com/decompilation/
Последний раз редактировалось Andrew Martin Чт окт 29, 2015 22:23:43, всего редактировалось 1 раз.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

А можете попробовать скомпилировать этот простой исходник у себя и дизассемблировать и его и ваш dso_micro.axf objdump'ом?
Вложения
arm-none-eabi-objdump.rar
мой objdump
(419.4 КБ) 174 скачивания
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Ответить

Вернуться в «ARM»