Не было никакой библиотеки, галлюцинация
- Сообщения: 100
- Зарегистрирован: Сб янв 22, 2011 16:57:45
-
Последний раз редактировалось ellioh Сб май 14, 2011 12:23:27, всего редактировалось 7 раз.
Клоподавер упрыгхт
- Реклама
- Сообщения: 22
- Зарегистрирован: Вс ноя 01, 2009 13:12:35
>>> Как-то так оно получилось, что я, неожиданно для себя, начал разработку опенсорсной библиотеки на C++ для программирования под AVR на GCC (хотя, подозреваю, она должна хорошо поддаваться портированию, как на другие компиляторы, так и на другие МК).
убили наповал)
а вообще, рано вам писать библиотеки...тренируйтесь на кошках)
убили наповал)
а вообще, рано вам писать библиотеки...тренируйтесь на кошках)
Если я правильно понял, все это делается для удобства программиста.
Хочу привести пример на си из IAR AVR, у вас что то похожее на это?
Хочу привести пример на си из IAR AVR, у вас что то похожее на это?
Код: Выделить всё
/*========*/
/* Predefined SFR Addresses */
/*========*/
/****************************************************************************
* An example showing the SFR_B() macro call,
* the expanded result and usage of this result:
*
* SFR_B(AVR, 0x1F) Expands to:
* __io union {
* unsigned char AVR; // The sfrb as 1 byte
* struct { // The sfrb as 8 bits
* unsigned char AVR_Bit0:1,
* AVR_Bit1:1,
* AVR_Bit2:1,
* AVR_Bit3:1,
* AVR_Bit4:1,
* AVR_Bit5:1,
* AVR_Bit6:1,
* AVR_Bit7:1;
* };
* } @ 0x1F;
* Examples of how to use the expanded result:
* AVR |= (1<<5);
* or like this:
* AVR_Bit5 = 1;
***************************************************************************/- Сообщения: 22
- Зарегистрирован: Вс ноя 01, 2009 13:12:35
не заметен ваш 20 летний стаж...
быдлокод, не более того.
вместо того, чтобы человек с легкостью пользовался вашим кодом, ему долго придется вникать в документацию(которая ни о чем), имхо, любой здравомысляший гораздо быстрее самостоятельно решить поставленные задачи.
Продумайте кому ваш нужен?
выставляете на общее обозрение, так что вы хотели, что люди подпрыгнут от счастья - ни чего полезного не нахожу.
где makefile? где конфигурации, где в конце концов опции для сборки архива??
быдлокод, не более того.
вместо того, чтобы человек с легкостью пользовался вашим кодом, ему долго придется вникать в документацию(которая ни о чем), имхо, любой здравомысляший гораздо быстрее самостоятельно решить поставленные задачи.
Продумайте кому ваш нужен?
выставляете на общее обозрение, так что вы хотели, что люди подпрыгнут от счастья - ни чего полезного не нахожу.
где makefile? где конфигурации, где в конце концов опции для сборки архива??
Последний раз редактировалось xrays Чт мар 24, 2011 20:47:28, всего редактировалось 1 раз.
- Реклама
Это все хорошо, но как быть, например, с синхронизацией всего этого дела? Применительно к тому же LCD часто недопустимо расхождение сигналов на отдельных пинах во времени, а в случае расположение этих сигналов на физических пинах процессора вперемешку с выходами сдвиговых регистров это неизбежно..
Оптимизм х (Опыт + Знания) = const
Ну эот вещь не зависящая от библиотеки.
Т.е. если рассинхронизация всё ломает, то поломает и без библиотеки.
Но вот, если уж говорить о том же LCD и о том же HC595, пример.
Пусть LCD подключается по 4-битному интерфейсу, write-only (т.е. BUSY FLAG не читаем), R/nW нога на земле.
На LCD идут ноги D7..D4, RS, E
Ноги как-то раскиданы по ногам контроллера. В нескольких библиотеках для HD44780 видел произвольное назначение через #define и потом длинными кусками ON/OFF этого дела.
Тут заводим пины lcd_rs, lcd_d7, ... lcd_d4, lcd_e и объединяем в шину все, кроме последнего.
Вывод младшего ниббла в данные выглядит как-то так
Тут рассинхронизация вывода битов данных и register select абсолютно до лампочки, а lcd_e управляется явно отдельно.
Написали библиотечку работы с LCD в виде _шаблона_, параметризумого типом шины и вывода E.
Отладили.
Теперь опа! в каком-то проекте не хватает ног совсем.
Берём и делаем шину не на обычных портах, а на регистре HC595, висящем на SPI. А lcd_e так и оставляем на порту. Подсовываем виртуальную шину, которая по out() выбрасывает данные в сдвиговый регистр, шаблону LCD. Всё продолжает работать. С рассинхронизацией по прежнему нет проблем, так как их не было бы и при обычной работе "врукопашную".
При этом при компилятор уоптимизирует всё, что можно, шаблоны для того и придуманы.
Это можно сделать и по другому, у меня сейчас класс Lcd объявляет, но в своих файлах lcd.h/lcd.cpp не определяет функцию Write(), предназначенную для записи в индикатор.
Эта функция доопределяется в том проекте, в котрый включаются (общие для всех проектов) файлы lcd.h/lcd.cpp
Немного мне не нравится всё то, что получается, но у меня С++-ный опыт маловат и когда что-то не выходит, а надо торопиться, я по многолетней С-шной привычке разбавляю #define-ами и #ifdef-ами. Выходит некрасивый микс, но я вот почитаю, что опытный в плюсах народ делает, и подучусь, что не то, чот никогда не поздно, а ещё и чем дальше, тем полезнее
Т.е. если рассинхронизация всё ломает, то поломает и без библиотеки.
Но вот, если уж говорить о том же LCD и о том же HC595, пример.
Пусть LCD подключается по 4-битному интерфейсу, write-only (т.е. BUSY FLAG не читаем), R/nW нога на земле.
На LCD идут ноги D7..D4, RS, E
Ноги как-то раскиданы по ногам контроллера. В нескольких библиотеках для HD44780 видел произвольное назначение через #define и потом длинными кусками ON/OFF этого дела.
Тут заводим пины lcd_rs, lcd_d7, ... lcd_d4, lcd_e и объединяем в шину все, кроме последнего.
Код: Выделить всё
typedef output_bus <lcd_rs, lcd_d7, lcd_d6, lcd_d5, lcd_d4> lcd_bus;Код: Выделить всё
lcd_bus::out( 0x10 | (data & 0xFF) );
lcd_e::on();
lcd_e::off();Написали библиотечку работы с LCD в виде _шаблона_, параметризумого типом шины и вывода E.
Отладили.
Теперь опа! в каком-то проекте не хватает ног совсем.
Берём и делаем шину не на обычных портах, а на регистре HC595, висящем на SPI. А lcd_e так и оставляем на порту. Подсовываем виртуальную шину, которая по out() выбрасывает данные в сдвиговый регистр, шаблону LCD. Всё продолжает работать. С рассинхронизацией по прежнему нет проблем, так как их не было бы и при обычной работе "врукопашную".
При этом при компилятор уоптимизирует всё, что можно, шаблоны для того и придуманы.
Это можно сделать и по другому, у меня сейчас класс Lcd объявляет, но в своих файлах lcd.h/lcd.cpp не определяет функцию Write(), предназначенную для записи в индикатор.
Эта функция доопределяется в том проекте, в котрый включаются (общие для всех проектов) файлы lcd.h/lcd.cpp
Немного мне не нравится всё то, что получается, но у меня С++-ный опыт маловат и когда что-то не выходит, а надо торопиться, я по многолетней С-шной привычке разбавляю #define-ами и #ifdef-ами. Выходит некрасивый микс, но я вот почитаю, что опытный в плюсах народ делает, и подучусь, что не то, чот никогда не поздно, а ещё и чем дальше, тем полезнее
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Давайте ещё это быдлокодом назовём:xrays писал(а):не заметен ваш 20 летний стаж...
быдлокод, не более того.
Код: Выделить всё
while((struct = core_list_task(task_id_num))){........}
Если да, то нех.... кидаться.
I am DX168B and this is my favourite forum on internet!
Вот блин... Это мне кара за снобизм: я грешным делом вчера только плевался от форума бухгалтеров-одноэсников, как они там гнобят друг друга... Думаю - во народ озверел... Другое дело думаю - типа мы, техническая интеллигенция... все вежливо, поддержут, помогут... Короче, спасибо xrays-у, не дал зазнатьсяне заметен ваш 20 летний стаж...
быдлокод, не более того.
Так вот, на тему развития. Каждый раз, когда пишу что-то под avr, хочется все нафиг бросить, и засесть - за создание визартов. Типа что б не рыться по сотому разу в даташитах (ну вот такая у меня плохая память), а просто нащелкать мышкой нужную комбинация аппаратных средств...
Типа идею сильно не навязываю ( по себе знаю, что если какая мысль кроет, то заставить меня взяться за что-то другое не реально), но если окажется, что она вам близка - с удовольствием готов пообщаться. Не то, что б хорошо представлял, как оно конкретно должно быть - но это как бы дело наживное.
И еще есть к вам такой вопрос. Вы под GCC на С++ пишете? Из-под AVR студии?
Алексей Верещагин
дык полно этих визардов же... хотите сделать очередной?Верещагин писал(а):Каждый раз, когда пишу что-то под avr, хочется все нафиг бросить, и засесть - за создание визартов. Типа что б не рыться по сотому разу в даташитах (ну вот такая у меня плохая память), а просто нащелкать мышкой нужную комбинация аппаратных средств...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV писал(а):дык полно этих визардов же... хотите сделать очередной?Верещагин писал(а):Каждый раз, когда пишу что-то под avr, хочется все нафиг бросить, и засесть - за создание визартов. Типа что б не рыться по сотому разу в даташитах (ну вот такая у меня плохая память), а просто нащелкать мышкой нужную комбинация аппаратных средств...
Я аватар ваш прочитал беглым взглядом сперва как "Хочу где вздумается...". Думаю, блин, какой хороший ответ на его вопрос...дык полно этих визардов же... хотите сделать очередной?
________________
хожу, где вздумается, и гуляю сам по себе
Я если честно не много знаю визардов, и все коммерческие. А хочется - то под AVR Studio, желательно оупен соурс. Если знаете что-нибудь такое, поделитесь ссылочкой пож.
Алексей Верещагин
- Сообщения: 487
- Зарегистрирован: Пт июн 12, 2009 19:17:35
чем это: pin_a_1::set(true); лучше PORTA |= (1 << PA1); ?
да бросьте - коммерческие все... некоммерческих тоже немалоВерещагин писал(а):Я если честно не много знаю визардов, и все коммерческие. А хочется - то под AVR Studio, желательно оупен соурс. Если знаете что-нибудь такое, поделитесь ссылочкой пож.
http://www.avrfreaks.net/index.php?modu ... pe=project
http://trol.0fees.net/calc/index.php
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


