, что вы можете ...
startup.s:
.globl _start
_start:
mov sp,#0x20000
bl notmain
hang: b hang
.globl PUT32
PUT32:
str r1,[r0]
bx lr
.globl GET32
GET32:
ldr r0,[r0]
bx lr
.globl TEST
TEST:
MVN R0,#0x8C,4
bx lr
hello.c
void PUT32 (unsigned int, unsigned int);
unsigned int GET32 (unsigned int);
unsigned int TEST (void);
static void uart_putc (unsigned int x)
{
PUT32(0x101f1000,x);
}
static void bitstring (unsigned int d)
{
unsigned int ra;
for(ra=0;ra<32;ra++)
{
if(d&0x80000000) uart_putc(0x31);
else uart_putc(0x30);
d<<=1;
}
uart_putc(0x0D);
uart_putc(0x0A);
}
int notmain (void)
{
bitstring(0x12345678);
bitstring(TEST());
return(0);
}
memmap:
MEMORY
{
rom : ORIGIN = 0x00010000, LENGTH = 32K
}
SECTIONS
{
.text : { *(.text*) } > rom
}
Makefile:
CROSS_COMPILE ?= arm-linux-gnueabi
AOPS = --warn --fatal-warnings
COPS = -Wall -Werror -O2 -nostdlib -nostartfiles -ffreestanding
hello_world.bin : startup.o hello.o memmap
$(CROSS_COMPILE)-ld startup.o hello.o -T memmap -o hello_world.elf
$(CROSS_COMPILE)-objdump -D hello_world.elf > hello_world.list
$(CROSS_COMPILE)-objcopy hello_world.elf -O binary hello_world.bin
startup.o : startup.s
$(CROSS_COMPILE)-as $(AOPS) startup.s -o startup.o
hello.o : hello.c
$(CROSS_COMPILE)-gcc -c $(COPS) hello.c -o hello.o
clean :
rm -f *.o
rm -f *.elf
rm -f *.bin
rm -f *.list
затем
apt-get install qemu-system-arm binutils-arm-linux-gnueabi gcc-arm-linux-gnueabi
make
qemu-system-arm -M versatilepb -m 128M -kernel hello_world.bin
затем нажмите Ctrl-Alt-3 (3 не F3), чтобы получить последовательную консоль. где вы увидите свой ответ ...
и закрытие этого окна консоли выйдет из qemu.
Если у вас есть малина pi или beaglebone или C.H.I.P или многие другие платы, на которых работает linux или linux на руке в qemu или где-либо еще.
test.s
.globl TEST
TEST:
MVN R0,#0x8C,4
bx lr
main.C
#include <stdio.h>
extern unsigned int TEST (void);
int main (void)
{
printf("0x%08X\n",TEST());
return(0);
}
, а затем
as test.s -o test.o
gcc main.c test.o -o main.elf
./main.elf
Голый маршрут металл довольно легко на этих платформах. Просто нужно на самом деле инициализировать uart и ждать, пока rx-буфер не будет пустым, не может обмануть, как вы можете, в симуляторе.
К сожалению, вы не можете сделать это на микроконтроллер, так как в эти дни в основном корой-м на основе
.thumb
.thumb_func
.globl TEST
TEST:
MVN R0,#0x8C,4
bx lr
и что не работает
test.s: Assembler messages:
test.s:6: Error: unshifted register required -- `mvn R0,#0x8C,4'
Если у вас есть микроконтроллер на базе ARM7TDMI (или другого non-cortex-m) и иметь jtag, или даже с приведенным выше с jtag, вам нужно только подать его на одну инструкцию. (Можно использовать GDB, а, даже с QEMU) кормить одну команду в память где-то
1001c: e3e0028c mvn r0, #140, 4 ; 0xc0000008
так 0xe3e0028c является версией r0 этой инструкции. И пройдите через него, а затем сбросьте регистры, вы также можете увидеть свой ответ.
Вы знаете, что gdb на самом деле имеет или должен иметь встроенный в него арматурник или доступный, поэтому вам может понадобиться только это.
вся программа:
.globl _start
_start:
MVN R0,#0x8C,4
b .
затем рука-Linux-gnueabi-LD test.s -o test.o рука-Linux-gnueabi-ЛД -Ttext = 0x8000 test.o -o теста .elf
и получить GdB
apt-get install gdb-arm-linux-gnueabi
, а затем выяснить, как загрузить и запустить его в GDB, используя armulator, то остановить его и сбросить регистры.
EDIT
Спасибо за этот вопрос, я узнал кое-что ... Ссылки плохие, есть и другие преднастроенные компилированные инструменты, но с этим письмом здесь являются один
https://launchpad.net/gcc-arm-embedded
, а затем получить визуальную поддержку. они поддерживаются в Windows Mac Linux.
написать эту программу test.s
.globl _start
_start:
MVN R0,#0x8C,4
b .
с использованием этого набора инструментов
arm-none-eabi-as test.s -o test.o
arm-none-eabi-ld -Ttext=0x02000000 test.o -o test.elf
arm-none-eabi-objcopy test.elf -O binary test.mb
В одном окне
vba -Gtcp test.mb
в другом
arm-none-eabi-gdb
В ввп строке введите эти три команд
target remote localhost:55555
si
info registers
, а затем вы можете использовать бросить курить, чтобы выйти, она выйдет УВУ, а также, или сделал для меня ...
Я считаю, что ты прав , Ответ должен быть 0x3FFFFFF7. –
, когда вы его выполнили, что вы получили? –
@ RossRidge Спасибо за подтверждение! –