Цитата(lons83 @ Mar 1 2014, 23:10)

Не могли бы Вы здесь по подробнее....
тогда как мне задать вектор прерывания программного для func1(); ???
Ведь аппаратные вектора все заняты, а подставить func1(); под вектор с 0-31 не получается... да и не получиться наверно...
Вообщем не понятно как указать что func1() - это программное прерывание... и как я понял оно будет вызываться из IRQ тогда зачем его делать программным?.....
на практике у меня зависало... особенно если func1() --- довольно приличная функция - например обработка видео массива... и тогда все храниться в стеке и через 2 минуты забивается.... а если func1() вынести в общий цикл то все нормально работает.... просто нужно чтобы func1() запускался прямо после IRQ , а во время выполнения func1() происходит 3-4 вызова IRQ....
Аппаратный ничем не отличается от програмного. В Cortex-M3 поддерживается до 240 прерываний.
Берете свободный вектор в таблице векторов прерываний (в стартапе). Туда пишете адрес
func1() и разрешаете прерывание с выбранным номером предварительно настроив ему приоритет.
Есть хорошая книга: "Джозеф Ю. Ядро CORTEX-M3 компании ARM. Полное руководство".
Если func1() должно выполняться прямо после IRQ и IRQ вызываются в 3-4 раза чаще, чем обрабатывается func1().
То можно показать, что работать будет так:
1. Обрабатываются IRQ.
2. Только каждое 3-4 IRQ способно запустить func1().
3. Никакие func2() и т.п. выполныться не будут.
Тоже самое с успехом делает код:
while(1) func1();
Разве нет?