реклама на сайте
подробности

 
 
> Обработка исключительной ситуации, как правильно описать функцию вызова
arttech
сообщение Nov 10 2007, 14:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 28-10-06
Из: г. Севастополь
Пользователь №: 21 744



Подскажите пожалуйста, как правильно определить функцию обработки исключительных ситуаций на С, для:

- Сбоя выборки PAbt_Handler?A
- Сбоя данных DAbt_Handler?A

В литературе написано, что опиание даётся подобно описанию функций для прерываний:
- void Pabt_Handler (void) __abort
- void Dabt_Handler (void) __abort
в реальности такое описание на проходит, а суффикс __irq результата не даёт...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
abcdefg
сообщение Nov 14 2007, 13:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 201
Регистрация: 23-01-06
Из: Msk
Пользователь №: 13 490



Цитата(arttech @ Nov 10 2007, 17:51) *
Подскажите пожалуйста, как правильно определить функцию обработки исключительных ситуаций на С, для:

- Сбоя выборки PAbt_Handler?A
- Сбоя данных DAbt_Handler?A

В литературе написано, что опиание даётся подобно описанию функций для прерываний:
- void Pabt_Handler (void) __abort
- void Dabt_Handler (void) __abort
в реальности такое описание на проходит, а суффикс __irq результата не даёт...


?A - обозначает arm-режим, поэтому функция должна определяться как void xAbt_Handler(void) __arm

держи для примера:

void DAbt_Handler(void) __arm
{
extern unsigned long E_LastErrAdr;

__asm { ldr r6, =E_LastErrAdr; }
__asm { subs r7, lr, #8; }
__asm { str r7, [r6, #0x00]; }

printf ("Data access violation! Address = 0x%08x\n", E_LastErrAdr);

while (1);
}
Go to the top of the page
 
+Quote Post
Spb_Alex
сообщение Nov 15 2007, 07:10
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 22
Регистрация: 26-10-07
Пользователь №: 31 745



>>держи для примера:

>> __asm { subs r7, lr, #8; }

Keil, RealView не знает (не хочет) найти r7, lr - регистры, ругается, что неизвестные переменные, как их задефайнить?
Go to the top of the page
 
+Quote Post
Andrew_Ch
сообщение Nov 15 2007, 07:35
Сообщение #4





Группа: Новичок
Сообщений: 7
Регистрация: 25-01-07
Пользователь №: 24 756



Цитата(Spb_Alex @ Nov 15 2007, 10:10) *
>>держи для примера:

>> __asm { subs r7, lr, #8; }

Keil, RealView не знает (не хочет) найти r7, lr - регистры, ругается, что неизвестные переменные, как их задефайнить?


Пример из хелп RV как писать asm inline. Объявите r7 как int, а затем используйте.

int f(int x)
{
int r0;
__asm
{
ADD r0, x, 1
EOR x, r0, x
}
return x;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 23:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016