Jump to content

    

Tsibulnick

Участник
  • Content Count

    5
  • Joined

  • Last visited

Community Reputation

0 Обычный

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Киев Украина
  1. пошаговый режим и прерывания

    Цитата(Шаманъ @ Jun 18 2017, 13:16) У stm32F746 есть ошибка на кристалле из-за которой неправильно работает пошаговая отладка. Для JLink помнится выпускали какой-то костыль, который частично решал проблему, а так в камнях с ядром следующей версии (после r1p0) это поправили (в тех же stm32f767). Ошибки нет. Просто перефирия при остановленной отладке продолжает работать и генерить прерывания. Если надо пошагово отлаживать с остановкой переферии, то это надо указать процессору для конкретной переферии в регистрах DBGMCU->APB1FZ, DBGMCU->APB2FZ.
  2. Вектора прерываний в .ASM STM8 IAR

    Действительно, немного протупил. Вектора прерываний объявлены как WEAK метки вида _interrupt_N. Но, чтобы прием сработал на ассемблере, необходимо метку сначала объявить видимой оператором public, например: public _interrupt_3. И о чудо, при сборке проекта в векторах прерывания появляется вектор на наш обработчик нарисованный на ASM, с меткой входа _interrupt_3:. Так что проблема решена.
  3. Вектора прерываний в .ASM STM8 IAR

    Цитата(ReAl @ May 27 2011, 23:18) Если я правильно понял, у IAR/STM8 таблицы векторов изначально заполнена weak-метками вида _interrupt_1 Достаточно в исходнике объявить метку с таким именем и линкер вместо адреса weak-затычки из библиотеки поставит адрес этой метки. Пробовал в ASM вставлять метки типа _interrupt_3: или как на C AWU_vector: - результат полный игнор. Линкер вставляет в вектора прерываний заглушки, т.е. затирает таблицу векторами определенными в C файле.
  4. Суть проблемы: Есть обработчик прерывания написанный на ассемблере. Как прописать вектор прерывания на обработчик в ASM файле? В IAR трансляторе ассемблера для AVR можно было сделать так: Код        NAME IntTable         extern switch_int         COMMON INTVEC(1)         ORG TIMER0_OVF_vect         JMP switch_int         ENDMOD А вот под STM8 вектора прерывания вставляются перед векторами размещенными С компилятором по коду: Код        section   .intvec:CODE ;-------------------------------------------------------------------------------         DS32    1;RESET         DS32    1;TRAP         DS32    1;NMI         DC32    $82000000 + switch_int        ......................... Или вектора прерываний затираются векторами определенными в С программе Код        section   .intvec:CODE:NOROOT(2) ;-------------------------------------------------------------------------------         DS32    1;RESET         DS32    1;TRAP         DS32    1;NMI         DC32    $82000000 + switch_int Сразу поясняю что нужно мне именно на ассемблере, т.к. это процедура переключения контентов в своей кооперативной ОС.
  5. В Keil это сделать просто. Заходим в опции проекта, выбираем вкладку Target и корректируем поля в Read/Only Memory Areas. Таким образом сообщаем Линковщику где можно использовать FLASH и по каким адресам.