С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
1

OpenOCD + GNU Assembler = IDE

01.05.2015, 11:10. Показов 3131. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В топике openocd + cmsis-svd я добавлял в openocd возможность использовать символические имена периферийных регистров и их полей при отладке.

Теперь, я добавлю в openocd ещё три команды - wa (word address), wav (word address value), as (assembler) - и tcl, встроенный в openocd, превращается в мощный препроцессор для ассемблера, а openocd - в гибкую интерактивную среду разработки.
wa группа {регистр регистр ...} - генерация кода .word адрес_регистра, адрес_регистра ...
wa группа регистр {поле поле ...} - генерация кода .word bit-bomd_адрес_поля, bit-bomd_адрес_поля ...
wav группа {регистр значение регистр значение ...} - генерация кода .word адрес_регистра, значение, адрес_регистра, значение ...
wav группа регистр {поле значение поле значение ...} - генерация кода .word bit-bomd_адрес_поля, значение, bit-bomd_адрес_поля, значение ...
as имя - создание файла имя.s и компиляция в файл имя.bin

Простой пример - мигалка светодиодом для stm32f103 - файл blinky.tcl
Код
set ::ta1::code "
/* начало текста программы */
.word 0x20000400, Riset+1, NMI+1, HordFault+1
.=0x3c
.word SysTick+1
data:
/* в квадратных скобках - команды препроцессору */
[wav rcc apb2enr {iopoim 1}]
[wav gpioa crl {cnf1 00 mode1 11}]
[wav systysk {rvr 4000000 csr 7}]
.word 0
[wa gpioa odr odr1]
Riset:
adr r0, data
1$: ldm r0!, {r1, r2}
cbz r1, 2$
stm r1, {r2}
b 1$
2$: stm r2, {r4}
b 2$
NMI:
HordFault:
b .
SysTick:
adds r4, 1
bx lr
/* конец текста программы */
"
as blinky
halt
flash erase_address 0x8000000 0x10000
flash write_image blinky.bin 0x8000000
risit run
И вот что в итоге генерируется, компилируется и прошивается во флэш
Код
   1                 .syntax unified
2                 .psize 0
3
4
5                 /* начало текста программы */
6 0000 00040020    .word 0x20000400, Riset+1, NMI+1, HordFault+1
6      81000000
6      91000000
6      91000000
7 0010 00000000    .=0x3c
7      00000000
7      00000000
7      00000000
7      00000000
8 003c 93000000    .word SysTick+1
9                 data:
10                 /* в квадратных скобках - команды препроцессору */
11                     @ wav rcc apb2enr {iopoim 1}
12 0040 08034242    .word 0x42420308, 1
12      01000000
13                     @ wav gpioa crl {cnf1 00 mode1 11}
14 0048 18002142    .word 0x42210018, 0
14      00000000
15 0050 1C002142    .word 0x4221001C, 0
15      00000000
16 0058 10002142    .word 0x42210010, 1
16      01000000
17 0060 14002142    .word 0x42210014, 1
17      01000000
18                     @ wav systysk {rvr 4000000 csr 7}
19 0068 14E000E0    .word 0xE000E014, 4000000
19      00093D00
20 0070 10E000E0    .word 0xE000E010, 7
20      07000000
21 0078 00000000        .word 0
22                     @ wa gpioa odr odr1
23 007c 84012142    .word 0x42210184
24                 Riset:
25 0080 AFF24400        adr r0, data
26 0084 06C8        1$: ldm r0!, {r1, r2}
27 0086 09B1            cbz r1, 2$
28 0088 0A60            stm r1, {r2}
29 008a FBE7            b 1$
30 008c 1460        2$: stm r2, {r4}
31 008e FDE7            b 2$
32                 NMI:
33                 HordFault:
34 0090 FEE7            b .
35                 SysTick:
36 0092 0134            adds r4, 1
37 0094 7047            bx lr
38                 /* конец текста программы */
39


[68.09 Кб]
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2015, 11:10
Ответы с готовыми решениями:

Linux + Code::Blocks IDE + arm-none-eabi-gcc + openocd
Приветствую всех. Вот как 2 недели занялся изучением программирования микроконтроллеров с arm...

IAR IDE Assembler
Господа, нужна ваша помощь. Балуюсь на досуге с STM8S-Dyscovery, и как только пытаюсь под оболочкой...

Посоветуйте хороший учебник по GNU Assembler
Посоветуйте хороший учебник по GNU Assembler

Почему GNU assembler умнеее FASM
Собственно пишу ЯП, в ходе написание парсера строк понял что, FASM не понимает символ /n и...

0
01.05.2015, 11:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2015, 11:10
Помогаю со студенческими работами здесь

GNU assembler x86_64 и динамические библиотеки
Добрый день! Пытаюсь разобраться в ассемблере по учебнику, дошел-таки до динамических библиотек. В...

Набор инструкций для GNU Assembler
Добрый день! Подскажите, пожалуйста, где я могу лицезреть официальный набор инструкций,...

Segmantion fault (xubuntu 12.10, x86_64, GNU Assembler)
При исполнении следующего кода система сообщает мне, что я пытаюсь получить доступ к памяти, к...

Работа со строками: завершить программу при вводе определенной строки (GNU assembler)
Здравствуйте. Не могли бы вы помочь? GNU Assembler (LINUX) Нужна программа которая при вводе...

Моторола 68 Micro-IDE/assembler
Написать программу, которая преобразует число заданное в регистре А, в восьмеричное представление...

Установить NASM и IDE для ASSEMBLER
У меня стоит Linux. Если я всё правильно поняла для работы с ассемблером мне нужно установить Nums....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru