Как задать вектор прерывания на обработчик для STM8 в ARDUINO IDE?

Написал в STVD (с компилятором COSMIC) тест мигалки на прерывании по переполнению таймера 2 (вектор13 ( ITC_IRQ_TIM2_OVF)) код работает. Перенес в ARDUINO IDE с аддоном sduino для STM8 и не пойму как там вектор на обработчик указать ,в STVD в отдельном файле есть таблица векторов в ардуине не нашел ничего подобного, черз ISR () как для AVR не компилируется. Подскажите как это сделать?

#define PORT(a, b)      CONCAT(a , b)

#define CLRBIT(REG, VALUE) REG &= ~VALUE
#define SETBIT(REG, VALUE) REG |=  VALUE

#define PIN5    (1 << 5)

#define CLK_PCKENR1  *(volatile unsigned char *)0x50C7

#define PB_ODR *(volatile unsigned char *)0x5005
#define PB_IDR *(volatile unsigned char *)0x5006
#define PB_DDR *(volatile unsigned char *)0x5007
#define PB_CR1 *(volatile unsigned char *)0x5008
#define PB_CR2 *(volatile unsigned char *)0x5009

#define TIM2_CR1 *(volatile unsigned char *)0x5300
#define TIM2_IER *(volatile unsigned char *)0x5303
#define TIM2_SR1 *(volatile unsigned char *)0x5304
#define TIM2_PSCR *(volatile unsigned char *)0x530E
#define TIM2_ARRH *(volatile unsigned char *)0x530F
#define TIM2_ARRL *(volatile unsigned char *)0x5310

#define TIM_IER_UIE (1 << 0)
#define TIM_CR1_CEN (1 << 0)
#define TIM_SR1_UIF (1 << 0)

volatile bool a = 0;

//====================== Обработчик прерывания =====================

// @far @interrupt void ITC_IRQ_TIM2_OVF_Interrupt(void) // из STVD

//ISR(ITC_IRQ_TIM2_OVF) // Так не компилируется 

INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, ITC_IRQ_TIM2_OVF)// Так не работает 
{
if (a==1) { SETBIT(PORT(PB,ODR), PIN5);a = 0; } else { CLRBIT(PORT(PB,ODR), PIN5);a = 1; }
    CLRBIT(TIM2_SR1, TIM_SR1_UIF);  // Reset the interrupt
} 

void setup() {
  disableInterrupts();

    SETBIT(PORT(PB,DDR), PIN5);   /* out */
    SETBIT(PORT(PB,CR1), PIN5);   /* push pull */
    CLRBIT(PORT(PB,CR2), PIN5);   /* speed 2MHz*/
    SETBIT(PORT(PB,ODR), PIN5);   /* LED OFF */

    SETBIT(CLK_PCKENR1, CLK_PCKENR1_TIM2);

    TIM2_PSCR = 0x01;                   //  Prescaler = 1.
    TIM2_ARRH = 0xff;                   //  High byte 
    TIM2_ARRL = 0xff;                   //  Low byte 

    SETBIT(TIM2_IER, TIM_IER_UIE);      //  Enable the update interrupts.
    SETBIT(TIM2_CR1, TIM_CR1_CEN);      //  Finally enable the timer.

// attachInterrupt(ITC_IRQ_TIM2_OVF,TIM2_UPD_OVF_BRK_IRQHandler,0); // Тоже не помогает

  enableInterrupts();
}
void loop() {

}

Сорри, что не по делу - но в чем смысл работы с СТМ8 в ардуино? С++ компилятора для СТМ8 нет, а без него в экосистеме ардуино делать нечего.

Совершенно не согласен, смысл в том, что хочется использовать одну универсальную хорошо переносимую на другой комп среду, которая единожды будичи настроена, везде работает, в отличии от всяких кейлов , иаров и т.д. Программирую я не так часто , и спустя год опять надо вникать и разбираться в тонкостях настройки и создания простейшего проекта в этих навороченых IDE в отличии от ардуино , где все топорно и просто. Отсутствие С++ для STM8 меня совсем не напрягает, я вообще не сторонник ++ для таких жидких МК, к тому же большая часть библиотек ,которые потенциально для него можно использовать легко переделать в СИ, за одно выкинув лишнее. Учитывая что в данный момент STM8 стоит дешевле tiny13 (где С++ тоже как бы не к месту) планирую освоить его, для моих свисто-перделок, этого хватает с головой.

Вопрос не в тебе, а в Ардуино, т.к. там все написано на Си++.

Переделай Serial. Только так, чтобы это работало на любом из поддерживаемых МК, и не переставало работать при подключении новых аппаратных платформ.

Зачем мне переделывать serial для stm8 , если он уже реализован в аддоне sduino, так же нет смысла адаптировать и другие тяжелые библиотеки для работы с файловой системой и графикой, не потому что они на С++ , а просто большие для данного МК. Библиотеки для ESP и STM32 написаны на С++ и тоже имеют не совместимось с ардуиновскими и это не лишает смысла их использовать.
Прошу в теме писать по существу вопроса, а не разводить демагогию про сферических коней в вакууме.

так вы спрашиваете, как скомпилировать то, что в ардуино не компилируется…

Вообще-то основной смысл Ардуино именно в этих библиотеках. Не нужны библиотеки - не нужна и Arduino IDE.
Ну а в качестве среды разработки можно использовать все, что угодно от Notepad+ до Eclipse. Зачем пытаться приспособить то, что заведомо не подходит?

Склонен предположить , что Ваши поспешные умозаключения ничем не обоснованы и не верны. Подожду ,что скажут люди более компетентные в этом вопросе.

Ты даже не можешь прецтавить себе всю глубину своего ашыбания…

1 лайк

судя по описаному здесь How to use Interrupts on STM8 with sduino - Arduino for STM32 : можно использоваь прерывания как в Ардуино , но интеграцию Ардуино с последней версией аддона 0.5.0 надо допиливать.
по тому что написано тут GitHub - tenbaht/sduino: An Arduino-like programming API for the STM8 ,для нормальной работы аддона нужна версия среды Ардуино выше 1.8.7

тут описано как пользоваться прерываниями Pin change interrupts - Sduino

п.с. соглашусь с вышесказанными выше - вы выбрали “камень” не под вашу задачу , вам либо надо выбрать среду которая будет везде доступна ,либо выбрать подходящий камень который полностью потдерживаеться средой , например в течении года компания СТМ должна выпустить новый 32ух разрадный камень(не помню название линейки) на замену как раз СТМ8 . вероятней новый камень будет интегрирован в среду Ардуино раньше чем вы разгребете все грабли с СТМ8 в среде ардуино.

Благодарю за ссылки, часть я уже видел, не совсем то, как в ардуино не нравится(там большая часть функционала недоступна), хочу по классике на чистом СИ. Аддон действительно сыроват и требует допиливания . На том импортном форуме пишут " SDCC requires the interrupt function header to be in the same compile unit main() is defined." И реально, для проверки написал оброботчик прерывания прям в файле main.c в папке аддона и все завелось. Жуткий костыль конечно и странная особенность компилятора, попробую придумать как это вынести в более удобный вид.