Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 23.05.2013, 23:03  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
Вопрос LPC2138 DAbt_Handler

Вопрос вот какой. Как добавить свой обработчик DAbt_Handler?
Догадываюсь, что надо что-то прописать в Startup.s, но что и где именно, теряюсь
Миниатюры:
Нажмите на изображение для увеличения
Название: DAbt_Handler.jpg
Просмотров: 78
Размер:	81.0 Кб
ID:	47122  
Реклама:
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 24.05.2013, 07:10  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Туда же, где и все остальные прерывания прописаны... Хоть в main, хоть в стартап
niXto вне форума  
Непрочитано 24.05.2013, 09:34  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Сообщение от alberio Посмотреть сообщение
Как добавить свой обработчик DAbt_Handler?
Если планируется анализ ошибки, то:
1. В Startup.s инициализируете указатель стека и флаги разрешения прерываний для режима "Data Abort".
2. В самом обработчике исключения - сохранение регистров режима, вызвавшего ошибку. lr - 8 =› указатель на инструкцию, вызвавшую "Data_Abort".
3. Собственно обработка, по выбору, на асме или сях.

P.S. В чём тайный смысл "EXPORT Exc_Handler"(строки 265-267), Вы их из С планируете вызывать?

Последний раз редактировалось AJScorp; 24.05.2013 в 09:44.
AJScorp вне форума  
Непрочитано 24.05.2013, 13:01  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Вопрос-то у меня - что и где именно . В армовском ассемблере не силен, посем у спрашиваю, нет ли у кого примера кода для таких случаев?

Сообщение от AJScorp Посмотреть сообщение
P.S. В чём тайный смысл "EXPORT Exc_Handler"(строки 265-267), Вы их из С планируете вызывать?
а файл этот взят из примера кейловского, потому в чем этот смысл - увы не знаю
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 24.05.2013, 17:27  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Сообщение от alberio Посмотреть сообщение
нет ли у кого примера кода для таких случаев?
Могу поделиться асмовой частью, сишная часть только выводила содержимое структуры на экран.
Код:
		IMPORT	Exc_Context
		IMPORT	C_Abt_ExcHandler

................................

DAbt_Handler	SUB	lr, lr, #0x08		;lr = lr - 8
		STMFD	sp!, {r0, lr}		;Сохраняем адрес вызвавшей ошибку инструкции в стек

		LDR	r14, =Exc_Context	;Кладем в r14 адрес структуры для сохранения контекста
		STMIA	r14, {r0-r14}^		;Сохраняем регистры в структуру

		MRS	r0, spsr
		STR	r0, [r14, #0x3C]	;Сохраняем SPSR в структуру 

		LDR	r0, [sp, #0x04]		;Берём адрес инструкции из стека
		STR	r0, [r14, #0x40]	;Кладём в структуру

		MOV	r0, r14			;В r0 - адрес структуры "Exc_Context", параметр 0 для С-обработчика
		BL	C_Abt_ExcHandler	;Вызов обработчика на СИ
;Тут нужен анализ результатов работы обработчика на СИ - 
;всё хорошо или всё плохо. Куда возвращаться - зависит от того,
;какая ситуация вызвала исключение.
;		LDMFD	sp!, {r0, pc}^		;Возврат на вызвавшую ошибку инструкцию
Структура описывалась в сишной части проекта
Код:
typedef struct
{
unsigned int	r0;			//0x00
unsigned int	r1;			//0x04
unsigned int	r2;			//0x08
unsigned int	r3;			//0x0C
unsigned int	r4;			//0x10
unsigned int	r5;			//0x14
unsigned int	r6;			//0x18
unsigned int	r7;			//0x1C
unsigned int	r8;			//0x20
unsigned int	r9;			//0x24
unsigned int	r10;			//0x28
unsigned int	r11;			//0x2C
unsigned int	r12;			//0x30
unsigned int	r13;			//0x34
unsigned int	r14;			//0x38
unsigned int	spsr;			//0x3C
unsigned int	ExcAddr;		//0x40
}EXC, *pEXC;

EXC Exc_Context;
Что менять в Вашем Startup.s не знаю, выкладывайте, посмотрим что там со стеком и вообще.
AJScorp вне форума  
Сказали "Спасибо" AJScorp
alberio (24.05.2013)
Непрочитано 24.05.2013, 18:09  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Код:
IMPORT Data_Abort_Handler_C

EXPORT  Reset_Handler
EXPORT	Undef_Handler
EXPORT	PAbt_Handler
EXPORT	DAbt_Handler

DAbt_Handler
BL		Data_Abort_Handler_C

Reset_Handler   
Undef_Handler
PAbt_Handler
Data_Abort_Handler_C - сишная функция. На что получаю:


Цитата:
Error: L6238E: startup.o(RESET) contains invalid call from '~PRES8 (The user did not require code to preserve 8-byte aligment of 8-byte data objects)' function to 'REQ8 (Code was permitted to depend on the 8-byte aligment of 8-byte data items)' function Data_Abort_Handler_C.
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 24.05.2013, 20:31  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: LPC2138 DAbt_Handler

Сообщение от alberio Посмотреть сообщение
На что получаю:
Что-то связанное с разницей в настройках для 8-ми байтного выравнивания кода. Ничего не могу сказать по этому поводу, может кто из знатоков кейла подскажет.

Последний раз редактировалось AJScorp; 24.05.2013 в 20:33. Причина: очепятка
AJScorp вне форума  
 

Закладки

Метки
arm7, dabt_handler, lpc, lpc2138
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:59.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot