Делаю проект на сях в IAR под stm8l. Потребовалось сделать в паре мест ассемблеровские вставки. В документе «IAR C/C++ Development Guide» рассказывается о виртуальных регистрах (?b0, ?b1, …, ?w0, …, ?l0, …). В них, в частности, передаются аргументы функции, их же рекомендовано использовать в качестве локальных переменных. Вопрос: КАК заставить сишный компилятор увидеть их внутри ассемблеровской вставки? Ругается «undefined symbol: ?b0». В том документе написано, что их объявление содержится в файле vregs.inc, но файл этот ассемблеровский, к сишному файлу его не подключить (или можно?). Директиву ассемблера EXTERN ?b0, обёрнутую в блок asm(“”), компилятор тоже не понимает – «Directive not supported by inline assembler».
Не надо мудрить. Те же ?b0, ?b1 - это просто байты ОЗУ с адресами 0 и 1. Вот и используйте в ассемблерной вставке эти адреса напрямую.