Перейти к содержанию
    

Вчера нарвался на грабли с IARом.

Да, необходимое уточнение. Файлы я назвал ADC.s79 и ADC.c.

Да, интересные грабли. Получается, что IAR после трансляции должен создать два объектных файла с одинаковыми именами ADC.r79. Естественно, останется только один из них.

Так что надо давать файлам разные имена.

В очередной раз удивляюсь тому, как программисты любят обвинять компилятор в собственных глюках. ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В очередной раз удивляюсь тому, как программисты любят обвинять компилятор в собственных глюках. ;)

 

;) Ну я не уверен, что это мой глюк, бо имена у файлов все-ж разные, я тут быстро писал, поэтому получились одинаковые ;) Но поскольку проблема решена, то и ладно.

 

Другой вопрос. Вот что не так в этой строчке:

 

sADC_RAW[i]= (*( AT91C_ADC_CDR0 + (0x04*i))) & 0xff;

 

По задумке хочется считать CDR соответствующего i канала АЦП. Где косяк?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/* End the interrupt in the AIC. */

AT91C_BASE_AIC->AIC_EOICR = 0;

Скажы зачем ты вызываеш ету команду ведь у тебя директива перед функцией стоит __irq?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/* End the interrupt in the AIC. */

AT91C_BASE_AIC->AIC_EOICR = 0;

Скажы зачем ты вызываеш ету команду ведь у тебя директива перед функцией стоит __irq?

 

Я смотрел листинг, там одно присвоение идет. Т.е. выкидывать EOICR=0 я не пробовал, но так - работает ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

/* End the interrupt in the AIC. */

AT91C_BASE_AIC->AIC_EOICR = 0;

Скажы зачем ты вызываеш ету команду ведь у тебя директива перед функцией стоит __irq?

"Патамушта надо" __irq говорит компилятору сгенерить пролог/эпилог необходимый для обработчика прерываний. А AIC является обычным периферийным узлом, и как его сбрасывать и надо ли вообще сбрасывать, компилятор не имеет никакого понятия. В ADuC его вообще нет, в LPC он называется VIC. А компилятор один на всех.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда для начала незачем асмовские оберки городить

В FreeRTOS в примерах у каждого обработчика есть обертка и комментарий:

; Wrapper for the * interrupt service routine. This can cause a

; context switch so requires an assembly wrapper.

:)

Я, честно говоря, немного не понял: это значит что все-таки нужны или не нужны?..

PS Без них не работает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, честно говоря, немного не понял: это значит что все-таки нужны или не нужны?..

PS Без них не работает...

Для тех компиляторов которые могут самостоятельно генерить фрейм для обработчика (IAR в их числе)

- не нужны, если в прерывании контексты не переключаются. Если переключаются, тогда следует использовать жирную системную обертку.

Пример, как указать компилятору - был приведен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, честно говоря, немного не понял: это значит что все-таки нужны или не нужны?..

PS Без них не работает...

 

Если переключение в ISR не требует уведомления задач через очереди или как-то еще, то обертка не нужна. Если требует, то нужна ;) У меня и с оберткой, и без обертки работает, но я данные из обработчика передают тупо, без очередей (хоть это и не правильно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...