Вопрос : Указатель функции коррумпировал/возместил после того как он к функции

Так я имею больше потехи с моим AT91SAM9261.  Я пытаюсь выступить interrupt с иничиативой системы для того чтобы setup укротитель к perioidic отметчику времени interrupt. Я мил очень копирующ Кодего примера для того чтобы сделать это.   Я получаю эксцентричный по-разному результатам когда я побегу мое Кодий, от образца code.

On хорошую последовательность в проекте который пришел с IAR EWARM, ем образца вызываю:

IRQ_ConfigureIT (AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit);
where AT91C_ID_SYS=1 (interrupt системы), и ISR_Pit будут функция с

and prototype

void ISR_Pit (пустым) на участке памяти 0x200011B8.  

And я трассирую звонок функции через следующий:

void IRQ_ConfigureIT (неподписанный источник int, режим
неподписанный int, свободное пространство
(*handler) (свободное пространство))
{Disable
// first
interrupt AT91C_BASE_AIC->AIC_IDCR = 1 << источник;

// устанавливает режим и handler
AT91C_BASE_AIC->AIC_SMR [source] = режим;
AT91C_BASE_AIC->AIC_SVR [source] = укротитель (неподписанный int); interrupt


// ясное AT91C_BASE_AIC->AIC_ICCR = 1 << источник;


and
} на line

AT91C_BASE_AIC->AIC_SVR [source] = укротитель (неподписанный int);

I видит изменение регистра AIC_SVR_1 к 0x200011B8, которое будет всем

On *** good.

к плохой последовательности.  Когда я звоню такой же от моей программы (меня имейте отрезать И наклеить такое же начинание и режимы ISR):

IRQ_ConfigureIT (AT91C_ID_SYS, AT91C_AIC_PRIOR_LOWEST, ISR_Pit);

I проверяет что AT91C_ID_SYS будет значением 1, и ISR_Pit будет функцией prototype

void ISR_Pit (свободного пространства) на адресе 0x200000A4

And после этого, котор я трассирую его в

void IRQ_ConfigureIT2 звонока (неподписанный источник int, режим
неподписанный int, свободное пространство
(*handler) (свободное пространство))
{Disable
// first
interrupt AT91C_BASE_AIC->AIC_IDCR = 1 << источник;

// устанавливает режим и handler
AT91C_BASE_AIC->AIC_SMR [source] = режим;
AT91C_BASE_AIC->AIC_SVR [source] = укротитель (неподписанный int); interrupt


// ясное AT91C_BASE_AIC->AIC_ICCR = 1 << источник;

And
} я проверяю значение «укротителя» и будет адресом 0x200000A5 (!!!), один байт больше чем ый указатель.  И я вижу, что регистр изменяет к неправильно значению 0x200000A5, когда я буду хотеть его указать на мой адрес ISR_Pit

So *** 0x20000A4.

мой полученный указатель функции подталкивал одним когда я вызвал функцию.  Так мои 2 вопроса являются следующими:

1), котор вы специалисты сделало бы оперируя понятиями даже устранять неисправность это эксцентричное замечание?  Smogло объяснить это?  Мой получать стога clobbered?  Больше вопросов выравнивания памяти?
2), котор может я сделать для того чтобы успокоить врезанные богов, которые я ясно разъярял?

Thanks очень много для всех thoughts.
class=

Ответ : Указатель функции коррумпировал/возместил после того как он к функции

Всегда проверяйте архив карты для того чтобы увидеть правильно смещения.
Врозь того, делают работы Кодего?
Также, как AT91C_BASE_AIC и AIC_SVR определены? они определены как volatile?
Можете вы воспроизвести проблему путем извлекать совсем non относящее Кодего, для того чтобы исключить вас иметь плохой указатель инкрементировать ваш регистр?
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us