|
C++ и ООП для микроконтроллеров AVR |
|
|
|
 |
Ответов
|
May 19 2014, 04:05
|
Местный
  
Группа: Свой
Сообщений: 321
Регистрация: 23-12-11
Из: Уфа
Пользователь №: 69 041

|
Цитата(andrewlekar @ May 19 2014, 13:00)  В С++ вы пишете в module.h: Код class Module { private: int data;}; И эта переменная у вас инициализирована не будет. Ну я так понимаю на то конструкторы и есть. Мне вот только не совсем понятно: можно ли объявлять объект - не создавать его динамически. То есть в приведенном Вами примере создание объекта вот так: Код class Module { private: int data;};
Module myModule;
int main (void) { myModule.data=100500; while(1) ... } Цитата(doom13 @ May 19 2014, 13:22)  Можно так: ... Не совсем понял: Вы передали указатель на функцию обработчик прерывания в метод InitIsr?
|
|
|
|
|
May 19 2014, 05:09
|

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

|
Цитата(doom13 @ May 19 2014, 12:08)  Ваши предложения... Код class driver { public: void isr_handler(); .... };
driver Device1;
ISR(XXXX_vect) { Device1.isr_handler(); };
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 19 2014, 07:48
|

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

|
Цитата(doom13 @ May 19 2014, 13:13)  В таком исполнении ISR() нельзя сделать членом какого-то класса. А зачем ему быть членом класса? Оно даже логически слабо в класс просится. Членом класса является isr_handler(). Допустим у вас 4 UARTa: класс - один, объектов - 4, вектора прерываний для каждого объекта свои и каждый вектор вызывает один и тот же обработчик но для своего, конкретного объекта. С натяжкой можно было бы согласиться спрятать ISR внутрь класса для периферии, которая на кристалле одна. Но где гарантия, что завтра не придется переносить этот код на кристалл, у которого этой периферии две или три?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 19 2014, 08:36
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Сергей Борщ @ May 19 2014, 14:58)  А зачем ему быть членом класса? Оно даже логически слабо в класс просится. Членом класса является isr_handler(). Допустим у вас 4 UARTa: класс - один, объектов - 4, вектора прерываний для каждого объекта свои и каждый вектор вызывает один и тот же обработчик но для своего, конкретного объекта. С натяжкой можно было бы согласиться спрятать ISR внутрь класса для периферии, которая на кристалле одна. Но где гарантия, что завтра не придется переносить этот код на кристалл, у которого этой периферии две или три? Для каждого объекта, естественно, свой обработчик, его и задаём при помощи InitIsr (RegisterIsr если нравится). Хорошо, но допустим есть какой-то класс Device, у него есть интерфейс управления (class Spi), интерфейс передачи данных (class Uart), системный счётчик (class Timer), для каждого необходимо задать обработчик прерывания. Ну а обработчик прерывания логически просится в класс Device, т.к. он непосредственно и выполняет операции необходимые для функционирования Device. Допустим в системе пять таймеров, для каждого нужен свой обработчик. Логично всё "одинаковое" запихнуть внутрь класса, обработчик, который может отличаться для каждого таймера реализовать как callback-функцию.
|
|
|
|
|
May 19 2014, 09:01
|

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

|
Цитата(doom13 @ May 19 2014, 15:46)  Допустим в системе пять таймеров, для каждого нужен свой обработчик. Угу. И каждый имеет свой вектор прерывания ISR(Timer_XX_vect) Как все пять обработчиков сделать статическими членами класса timer? Или я чего-то не понял в вашей идеологии? Цитата(doom13 @ May 19 2014, 15:46)  Логично всё "одинаковое" запихнуть внутрь класса, обработчик, который может отличаться для каждого таймера реализовать как callback-функцию. Угу, как callback или как виртуальную функцию. Или построить наследников на шаблонах используя Curiously recurring template pattern (я так думаю, сам не пробовал пока).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 19 2014, 09:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Сергей Борщ @ May 19 2014, 16:11)  Угу. И каждый имеет свой вектор прерывания ISR(Timer_XX_vect) Как все пять обработчиков сделать статическими членами класса timer? Или я чего-то не понял в вашей идеологии? Все пять обработчиков и не являются статическими членами класса Timer. У Timer есть только функция регистрации прерывания. Обработчик прерывания необходимо зарегистрировать после создания объекта. Цитата(Сергей Борщ @ May 19 2014, 16:11)  Угу, как callback или как виртуальную функцию. Или построить наследников на шаблонах используя Curiously recurring template pattern (я так думаю, сам не пробовал пока). Тут не понял иронию, что не так в моей реализации? Всё работает и , по-идее, нет никаких противоречий. Можно и унаследовать если есть желание.
|
|
|
|
Сообщений в этой теме
n_bogoyavlensky C++ и ООП для микроконтроллеров AVR May 10 2009, 06:21 Tcom Нравиться пишите на С++ для AVR. May 10 2009, 07:06 tAmega Смотря какой AVR, если 8 битные модели, то ООП это... May 10 2009, 07:11 Rst7 Цитатаи программировать на нем конечно можно, но п... May 10 2009, 07:44 tAmega Видел код на C++ для AVR, нашел единственное объя... May 10 2009, 09:01 Rst7 Цитатанашел единственное объяснение, для чего там ... May 10 2009, 09:10 DpInRock Программирование в ООП обычно требует динамическог... May 10 2009, 10:56 SasaVitebsk Цитата(DpInRock @ May 10 2009, 13:56) Про... May 11 2009, 21:38 Rst7 ЦитатаПрограммирование в ООП обычно требует динами... May 10 2009, 11:13 kurtis ЦитатаНикакого отношения динамическое выделение па... May 10 2009, 11:29 _Pasha Цитата(kurtis @ May 10 2009, 14:29) С++ ... May 10 2009, 12:29 Rst7 ЦитатаДык если взять STL
STL - это всего лишь удо... May 10 2009, 11:46 researcher Об ООП хорошо думаю , но в AVR ООП тесно.
Какая не... May 10 2009, 12:45 DpInRock ОП имеет смысл когда есть что наследовать и есть к... May 10 2009, 13:07 haker_fox Цитата(DpInRock @ May 10 2009, 22:07) ОП ... May 11 2009, 00:04 demiurg_spb Цитата(DpInRock @ May 10 2009, 17:07) А т... May 11 2009, 11:13 Rst7 ЦитатаВообще, как Вы можете говорить после этого о... May 11 2009, 07:23 dxp Мущщины! Вы бы сначала определились в терминах... May 11 2009, 09:29 Herz Цитата(dxp @ May 11 2009, 11:29) Мущщины... May 11 2009, 10:47 n_bogoyavlensky Цитата(dxp @ May 11 2009, 13:29) Мущщины... May 12 2009, 18:24  _Pasha Цитата(n_bogoyavlensky @ May 12 2009, 21... May 12 2009, 18:34   777777 Цитата(_Pasha @ May 12 2009, 22:34) Приех... May 13 2009, 04:00 Rst7 Цитатаклассы С++ как таковые - не ООП;
Как это? К... May 11 2009, 09:35 Непомнящий Евгений Цитата(Rst7 @ May 11 2009, 13:35) Как это... May 11 2009, 10:35 dxp Цитата(Rst7 @ May 11 2009, 16:35) Как это... May 11 2009, 11:12  megajohn Цитата(dxp @ May 11 2009, 19:22) ... кото... May 19 2014, 05:02   msalov Цитата(megajohn @ May 19 2014, 12:12) и п... May 19 2014, 05:12   Сергей Борщ Цитата(megajohn @ May 19 2014, 12:12) и п... May 19 2014, 05:14 Rst7 ЦитатаООП - это программирование, когда программа ... May 11 2009, 10:57 Rst7 ЦитатаКласс - это тип, определяемый пользователем.... May 11 2009, 11:52 dxp Цитата(Rst7 @ May 11 2009, 18:52) Я утвер... May 11 2009, 13:58 Rst7 ЦитатаОбъектно-ориентированные программы можно пис... May 11 2009, 14:46 dxp Цитата(Rst7 @ May 11 2009, 21:46) И вообщ... May 12 2009, 04:03  VladimirYU Цитата(dxp @ May 12 2009, 08:03) За ООП, ... May 12 2009, 06:54   dxp Цитата(VladimirYU @ May 12 2009, 13:54) А... May 12 2009, 11:31    VladimirYU Цитата(dxp @ May 12 2009, 15:31) Возможно... May 12 2009, 11:45     dxp Цитата(VladimirYU @ May 12 2009, 18:45) Я... May 12 2009, 13:40      singlskv Цитата(dxp @ May 12 2009, 17:40) Хм, инте... May 12 2009, 18:53       dxp Цитата(singlskv @ May 13 2009, 01:53) У м... May 13 2009, 03:24        singlskv Цитата(dxp @ May 13 2009, 07:24) SendMess... May 13 2009, 04:32         dxp Цитата(singlskv @ May 13 2009, 10:32) Опр... May 13 2009, 05:11          singlskv Цитата(dxp @ May 13 2009, 09:11) Ну да, в... May 13 2009, 05:39           dxp Цитата(singlskv @ May 13 2009, 12:39) А ч... May 13 2009, 06:26            singlskv Цитата(dxp @ May 13 2009, 10:26) Еще забы... May 13 2009, 15:41 Rst7 Цитатав условиях корпоративной разработки проектов... May 12 2009, 07:00 yanvasiij Люди, поднял тему в связи с глубокой заинтересован... May 19 2014, 00:34 andrewlekar Во-первых, ООП вы напрасно определяете через терми... May 19 2014, 01:22 yanvasiij Цитата(andrewlekar @ May 19 2014, 11:32) ... May 19 2014, 02:23 doom13 Цитата(yanvasiij @ May 19 2014, 09:33) А ... May 19 2014, 03:12 kolobok0 Цитата(yanvasiij @ May 19 2014, 10:33) Сп... May 19 2014, 14:23 andrewlekar В scmRTOS посмотрите как обработчики сделаны. У ме... May 19 2014, 02:50        megajohn Цитата(doom13 @ May 19 2014, 17:27) Все п... May 19 2014, 09:25        Сергей Борщ Цитата(doom13 @ May 19 2014, 16:27) Все п... May 19 2014, 11:08 andrewlekar Цитатаможно ли объявлять объект - не создавать его... May 19 2014, 04:25 A. Fig Lee На маленьких задачах преимущества C++ не очевидны.... May 19 2014, 17:19 yanvasiij megajohn doom13 andrewlekar Сергей Борщ msalov Спа... May 20 2014, 00:22 yanvasiij - May 20 2014, 00:22 juvf смешали всё.
Ну во первых в avr-gcc от winavr не... May 21 2014, 23:22 andrewlekar В C99 тоже можно переменную непосредственно перед ... May 21 2014, 23:45 juvf ЦитатаСсылки полностью перекрываются указателямине... May 21 2014, 23:52
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|