Вячик13 0 May 30, 2012 Posted May 30, 2012 · Report post В главном модуле, где процессы, имеется объявление channel: OS::channel<TKeyCode,16> KeyMsg; В другом модуле имеется подпрограмма, которая пишет в канал: KeyMsg.push(KeyEvent); Как в этом модуле объявить внешний объект? Quote Share this post Link to post Share on other sites More sharing options...
Nixon 7 May 30, 2012 Posted May 30, 2012 · Report post Не вижу препятствий! (с) объявите во втором модуле: extern OS::channel<TKeyCode,16> KeyMsg; Quote Share this post Link to post Share on other sites More sharing options...
Вячик13 0 May 31, 2012 Posted May 31, 2012 · Report post Не вижу препятствий! (с) объявите во втором модуле: extern OS::channel<TKeyCode,16> KeyMsg; Объявил. Получил ошибку: Error[Pe276]: name followed by "::" must be a class or namespace name F:\IARProjects\WeightTerminal\Src\Key.h 58 Инклуд определений OS имеется и стоит раньше объявления внешнего объекта. #include <scmRTOS.h> Это тоже не проходит: extern class OS; Получаю ошибку: Error[Pe101]: "OS" has already been declared in the current scope (at line 63 of "F:\IARProjects\WeightTerminal\src\scmRTOS_TARGET_CFG.h") F:\IARProjects\WeightTerminal\Src\Key.h 58 Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 186 May 31, 2012 Posted May 31, 2012 · Report post Получил ошибку:А тип TKeyCode в этом месте уже объявлен? Quote Share this post Link to post Share on other sites More sharing options...
a9d 0 May 31, 2012 Posted May 31, 2012 · Report post Я делаю вот так. http://we.easyelectronics.ru/os-rtos/scmrt...allback-ov.html Подсмотрел этот способ в LUFA. Quote Share this post Link to post Share on other sites More sharing options...
Вячик13 0 June 1, 2012 Posted June 1, 2012 · Report post Спасибо всем. Эффект я устранил, но причину не понял. Объявление: extern OS::channel<TKeyCode,16> KeyMsg; у меня было в модуле объявлений Key.h. В модуле программного кода Key.cpp было два инклуда: #include <scmRTOS.h> #include "Key.h" Имено в таком порядке. После того, как я перенёс инклуд #include <scmRTOS.h> из модуля Key.cpp в модуль Key.h всё заработало. Объясните, пожалуйста, в чём моя ошибка. Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 186 June 1, 2012 Posted June 1, 2012 · Report post Объясните, пожалуйста, в чём моя ошибка.Вероятно, ошибка возникала при компиляции файла, в котором перед Key.h не был включен scmRTOS.h. Значит, компилятор понятия не имел ни об объявленном там пространстве имен OS, ни об объявленном в этом пространстве имен шаблонном классе channel, о чем и жаловался. Вы ведь наверняка включили объявление KeyMsg для того, чтобы где-то дальше в тексте обратиться к объекту KeyMsg? А во что должен компилятор компилировать такое обращение, если он понятия не имеет - что это за тип? Quote Share this post Link to post Share on other sites More sharing options...