реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Использование channel в разных модулях.
Вячик13
сообщение May 30 2012, 13:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



В главном модуле, где процессы, имеется объявление channel:

OS::channel<TKeyCode,16> KeyMsg;

В другом модуле имеется подпрограмма, которая пишет в канал:

KeyMsg.push(KeyEvent);

Как в этом модуле объявить внешний объект?

Go to the top of the page
 
+Quote Post
Nixon
сообщение May 30 2012, 13:35
Сообщение #2


Гуру
******

Группа: Админы
Сообщений: 2 736
Регистрация: 17-06-04
Из: Киев
Пользователь №: 48



Не вижу препятствий! (с)

объявите во втором модуле:
extern OS::channel<TKeyCode,16> KeyMsg;


--------------------
Вам помочь или не мешать?
Go to the top of the page
 
+Quote Post
Вячик13
сообщение May 31 2012, 05:59
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Цитата(Nixon @ May 30 2012, 16:35) *
Не вижу препятствий! (с)

объявите во втором модуле:
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

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 31 2012, 08:24
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Вячик13 @ May 31 2012, 08:59) *
Получил ошибку:
А тип TKeyCode в этом месте уже объявлен?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
a9d
сообщение May 31 2012, 09:03
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Я делаю вот так.
http://we.easyelectronics.ru/os-rtos/scmrt...allback-ov.html

Подсмотрел этот способ в LUFA.
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jun 1 2012, 05:21
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Спасибо всем.

Эффект я устранил, но причину не понял.

Объявление:

extern OS::channel<TKeyCode,16> KeyMsg;

у меня было в модуле объявлений Key.h.

В модуле программного кода Key.cpp было два инклуда:

#include <scmRTOS.h>
#include "Key.h"

Имено в таком порядке.
После того, как я перенёс инклуд

#include <scmRTOS.h>

из модуля Key.cpp в модуль Key.h всё заработало.

Объясните, пожалуйста, в чём моя ошибка.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 1 2012, 07:24
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Вячик13 @ Jun 1 2012, 08:21) *
Объясните, пожалуйста, в чём моя ошибка.
Вероятно, ошибка возникала при компиляции файла, в котором перед Key.h не был включен scmRTOS.h. Значит, компилятор понятия не имел ни об объявленном там пространстве имен OS, ни об объявленном в этом пространстве имен шаблонном классе channel, о чем и жаловался. Вы ведь наверняка включили объявление KeyMsg для того, чтобы где-то дальше в тексте обратиться к объекту KeyMsg? А во что должен компилятор компилировать такое обращение, если он понятия не имеет - что это за тип?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th June 2025 - 06:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01422 секунд с 7
ELECTRONIX ©2004-2016