Слесарь 9 3 июня, 2014 Опубликовано 3 июня, 2014 · Жалоба Здравствуйте! Разрабатываю достаточно большой проект пользуясь MPLAB 8.60 + C18 v4.20. PIC18F67J60. Мне необходимо по сигналу таймера 1800 раз в секунду прерывание основной программы вычитать блок данных из одной микросхемы по SPI и записать в другую микросхему. Это достаточно объемный код, если еще учесть что переключает CS чипы третья микросхема подключенная последовательной шиной. Не могу поместить весь объем кода в прерывание по таймеру. Собственно, не помещается всего десяток строк, но сокращать код больше некуда. Линковщик пишет Error - Recursion not supported for functions with locals of "overlay" Можно ли это как-то обойти? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
volodya_t 0 4 июня, 2014 Опубликовано 4 июня, 2014 · Жалоба Здравствуйте! Разрабатываю достаточно большой проект пользуясь MPLAB 8.60 + C18 v4.20. PIC18F67J60. Линковщик пишет Error - Recursion not supported for functions with locals of "overlay" Можно ли это как-то обойти? Уточните С18 by Microchip последняя - v3.47 от 20янв.2014. а что у Вас не ясно. Если я правильно понял : линкер пытается сообщить - рекурсивный вызов для функции (посмотрите документацию) расположенный в оверлейной области или с данными оверлейного типа не допустим. Какие-то претензии к порядку вызовов. Возможно вызов в прерывании и фоне одновременно или др. причины. Тут (на форуме) часто звучали рекомендации в прерывание не вносить большие блоки кода. Выставте флаг , а в фоновом блоке отреагируйте на него. Из личных ощущений - PIC18 не шустрый и как такового стека в нем нет. То-есть данные сохраняются в зависимости от компилятора. С18 искусственно выделял регистр косвенной адресации и формировал стек данных. HITECH обыгрывала ситуацию иначе и возникала проблема, возможно ситуация схожа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться