Поиск по сайту:

 


По базе:  

микроэлектроника, микросхема, микроконтроллер, память, msp430, MSP430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, SED1335, mega128, avr, mega128  
  Главная страница > Статьи > Средства разработки

реклама

 




Мероприятия:




Отладка

Для отладки мной используется целая цепочка средств: аппаратный отладчик, сервер отладки и порт программы gdb (GNU Debugger) из инструментария.

Как сообщалось ранее, для успешной работы gdb требуется, чтобы был запущен в фоновом режиме сервер отладки st-util. Программа gdb взаимодействует с сервером отладки, используя механизм межпроцессного обмена - сокеты. Этот механизм позволяет обмениваться данными процессам запущенным не только на одном компьютере, но и на разных компьютерах в сети.

В микроконтроллер загружена программа, плата подключена к компьютеру. В фоновом режиме запущена программа st-util с нужными параметрами командной строки, она видит микроконтроллер и ждёт подключения на порт 4242. Если все эти условия выполнены, то можно запускать gdb:

	
    arm-none-eabi-gdb 
  This GDB was configured as "--host=i686-linux-gnu --target=arm-none-eabi".
  For bug reporting instructions, please see:
  .
  (gdb) 
	 

Отладчик готов и ждёт дальнейших команд. Подключаемся к серверу:

	
  (gdb) target extended localhost: 4242 

Загружаем файл ex1.elf с отладочной информацией:

	
  (gdb) symbol-file ./ex1.elf 
	

Проверяем содержимое регистра pc:

	
    (gdb) info reg pc
   pc              0x1c	  0x1c
	 

По сбросу микроконтроллер перешёл на метку _start . Листинг программы:

	
   (gdb) list _start
10	              .word _hard_fault  + 1   
11	              .word _memory_fault + 1   
12	              .word _bus_fault + 1      
13	              .word _usage_fault + 1    
14	 _start:		               @ start of execution examples
15		  mov r0, #5               @  5 -> r0
16		  adr r1, value            @  address const value -> r1
17		  ldr r2, [r1]             @  mem_32[r1] -> r2
18		  add r1, r2, r0           @  r2 + r0 , -> r1
19		  push {r1}                @  r1 -> stack
		 

Дизассемблируем часть кода с начального адреса:

	
(gdb) disassemble
Dump of assembler code for function _start:
=> 0x0000001c <+0>:	mov.w	r0, #5
   0x00000020 <+4>:	addw	r1, pc, #40	; 0x28
   0x00000024 <+8>:	        ldr	r2, [r1, #0]
   0x00000026 <+10>:	    add.w	r1, r2, r0
   0x0000002a <+14>:	    push	{r1}
   0x0000002c <+16>:	    mov.w	r1, #0
   0x00000030 <+20>:	    pop	{r1}
   0x00000032 <+22>:	    blx	0x1c <_start>
   0x00000036 <+26>:	    stclvs	8, cr7, [r1, #-404]!	; 0xfffffe6c
   0x0000003a <+30>:	    rsbeq	r6, r5, r0, ror r12
   0x0000003e <+34>:	    nop
End of assembler dump.
		 

Выполняем одну инструкцию:


  (gdb) stepi
  16	adr r1, value        @  address const value -> r1
	 

Смотрим содержимое регистра r0 :

	
  (gdb) info reg r0
  r0             0x5	5

Смотрим память, 7 байт с адреса 0x36 в формате hex:

	
  (gdb) x/7xb 0x36
  0x2c :	0x65	0x78	0x61	0x6d	0x70	0x6c	0x65 
   
 

Количество аппаратных точек останова может быть ограничено и зависит от аппаратуры отладчика и микроконтроллера. Аппаратные точки останова можно ставить без проблем в области ROM. Возможна установка и удаление точек останова без прерывания сеанса отладки. Ставим аппаратную точку отладки в строку 18 ассемблерного текста:

	
(gdb) hbreak ex1.s:18
Hardware assisted breakpoint 1 at 0x26: file ex1.s, line 18.

Запускаем программу до точки останова:

	
(gdb) continue
Continuing.
	
18		add r1, r2, r0	@  r2 + r0 , -> r1

Получаем информацию об имеющихся точках останова:

	
	 (gdb) info breakpoints
Num     Type           Disp Enb Address    What
1       hw breakpoint  keep   0x00000026 ex1.s:18
	breakpoint already hit 1 time

Удаляем точку останова:

	
(gdb) del break 1

В интернете можно найти документацию по отладчику GDB на русском языке. Существует множество программ предоставляющих более удобный интерфейс пользователя (front-end gdb), нежели командная строка: Insight , Eclipse CDT , Code::Blocks.

<-- Предыдущая страница Оглавление Следующая страница -->





 
Впервые? | Реклама на сайте | О проекте | Карта портала
тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru
©1998-2023 Рынок Микроэлектроники