если у вас есть GNU binutils, построенный для руки / большого пальца, возьмите это
.thumb
.thumb_func
.global _start
_start:
.word 0x20001000
.word reset
.word hang
.word hang
.word hang
.thumb_func
reset:
nop
nop
nop
nop
nop
b reset
.thumb_func
hang: b .
постройте его
arm-none-eabi-as flash.s -o flash.o
arm-none-eabi-ld -Ttext=0 flash.o -o flash.elf
arm-none-eabi-objdump -D flash.elf > flash.list
arm-none-eabi-objcopy flash.elf -O binary flash.bin
не обязательно должно быть рукой - нет, это может быть рукой-linux-gnueabi или что-то вроде arm-кое-что.
проверьте файл списка, это то, что вы ищете для загрузки cortex-m.
00000000 <_start>:
0: 20001000 andcs r1, r0, r0
4: 00000015 andeq r0, r0, r5, lsl r0
8: 00000021 andeq r0, r0, r1, lsr #32
c: 00000021 andeq r0, r0, r1, lsr #32
10: 00000021 andeq r0, r0, r1, lsr #32
00000014 <reset>:
14: 46c0 nop ; (mov r8, r8)
16: 46c0 nop ; (mov r8, r8)
18: 46c0 nop ; (mov r8, r8)
1a: 46c0 nop ; (mov r8, r8)
1c: 46c0 nop ; (mov r8, r8)
1e: e7f9 b.n 14 <reset>
00000020 <hang>:
20: e7fe b.n 20 <hang>
первое слово во флэш-памяти получаетзагруженный в указатель стека для вас, вы можете изменить указатель стека в вашем коде начальной загрузки, если хотите, это просто сохраняет шаг.Следующим должен быть адрес для сброса или с 1, должен быть установлен lsbit.Сброс на 0x0014 выше, поэтому вектор сброса должен иметь 0x0014 | 1 = 0x0015.
Остальные векторы не имеют значения, чтобы вы загрузились.этот помещает его в простой бесконечный цикл, который вы можете остановить и возобновить с помощью отладчика и, по возможности, найти его по разным адресам при повторении остановки и возобновления.
возможно, проще загрузить файл elf, чем файл bin сотладчикно в то же время инструмент может не писать правильно, используйте инструмент для вывода нескольких слов, начиная с 0x00000000
Если ваш двоичный файл не начинается с таблицы векторов и / или если таблица векторов имеетчетные адреса в нем сойдут с рельсов сразу после сброса.
Если это произойдет, то нам нужно копать дальше.пожалуйста, опубликуйте хотя бы начало вашего двоичного файла, в идеале - разборку программы, таблицу векторов и, возможно, код сброса.