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

 
 
7 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Вопросы по изучению Си
Владимир_2010
сообщение Mar 8 2009, 07:13
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Здравствуйте.
Месяца два назад сел за изучение микроконтроллеров AVR. Почитал книгу «Белов А. В. Создаём устройства на микроконтроллерах. 2007», проделал примерчики в CodeVisionAVR, пощупал аврстудию, погонял схемки в протеусе, попрошивал мегу8 на stk500, на макетке собрал. Чувствую что знаний по языку Си не хватает. Имеет ли смысл на некоторое время забыть про микроконтроллеры, установить что-нибудь вроде Microsoft Visual Studio и начать изучать язык Си по книге про чистый Си без привязки к микроконтроллерам, например, по книге 1) Керниган&Ритчи в списке?! Но не знаю, хватит ли на чистый Си сил и энтузиазма, без привязки к микроконтроллерам читать тяжело, да и времени на чтение мало – микроконтроллеры это пока хобби. Или может быть продолжать читать книги по микроконтроллерам?! Но там язык Си рассмотрен поверхностно – пролетарская суть не ясна.
Поискал в сети книги по чистому Си (без плюсов), литературы на русском – мало. Вот что удалось найти:
1) Керниган, Ритчи. Язык Си
2) Керниган, Ритчи. Язык программирования Си
3) Керниган, Пайк. Практика программирования
4) Шилдт. Полный справочник по C
Остальная доступная в сети литература по Си с первого взгляда менее привлекательна:
5) Афанасьев. Программирование на языке Си
6) Богатырев. Руководство полного идиота по программированию на C
7) Болский. Язык программирования Си
8) Бочков. Язык программирования Cи для ПК
9) Голицина. Основы алгоритмизации и программирования
10) Крупник. Изучаем Си
11) Подбельский. Программирование на языке Си
12) Фьюэр. Задачи по языку С
14) Хэзфилд. Искусство программирования на C
13) Шилтд. С для профессиональных программистов
Отдельный вопрос по классической книге:
15) «Роберт Седжвик. Фундаментальные алгоритмы на C. Части 1 - 5. Анализ. Структуры данных. Сортировка. Поиск. Алгоритмы на графах» Книга того же автора с тем же названием встречались мне для С++ - изучать ли ее или попытаться найти эту книгу для чистого Си в бумажном виде?! Верно ли утверждение: «Седжвика можно брать и с "C++" в названии. На самом деле там все равно чистый C». Что еще из книг маскирующихся в названии под «С++» пригодно для изучения про чистый Си?!
Если что-то из доступных в сети электронных книг по чистому Си пропустил, пожалуйста, дополните.
Может быть есть что то из достойных «бумажных» книг по Си, что не выложено в сеть и стоит найти?! Наверное, нужны книги не просто справочник и не с примитивом, а книга учебная, что бы много различных примеров разобрано, приложений, от простого к сложному и через них вся суть и обобщения. Вот например книги с громкими и многообещающими аннотациями:
16) Прата. Язык программирования C (Си). Лекции и упражнения
h**p://www.livelib.ru/book/1000163060
17) Кочан. Программирование на языке C (Си)
h**p://www.williamspublishing.com/Books/5-8459-1088-9.html
Но за громкими и красивыми обложками, аннотациями, часто бывают пустышки которые лучше даже не читать.
Вечные вопросы: что делать и стоит ли вообще читать или может так и ходить неграмотным и программировать методом тыка?! Как развиваться дальше, что читать, в каком порядке читать и что в первую очередь читать?!
Спасибо за внимание и советы.

Сообщение отредактировал Владимир_2010 - Mar 8 2009, 07:15
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 8 2009, 07:22
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Не начинайте с Codevision. Он портит мозг. smile.gif

Лучше сразу IAR либо WinAVR
И еще - ищите в инете и читайте живые примеры, разбирайтесь что и как написано. Даже при условии изначально плохого знания английского, будет двойная польза: анализ текстов программ можно пытаться делать и без комментариев, а параллельно и аглицкий заливается smile.gif Ищите ресурсы на русском, отмечайте ссылки на англоязычные и копайте. Постепенно у Вас сформируется лексикон, достаточный для того, чтобы эффективно гуглить интересующие Вас вопросы
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 07:36
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Достаточно одной - K&R второе издание. Контроллерная специфика для языка это обычно несколько страниц в документации на конкретный компилятор. "Книги по микроконтролерам" это или откровенное дерьмо, или это действительно книги по Микроконтроллерам а не по изучению языков и раcсматривать "примеры" из таких книг следует так-же, как и пример из букваря "Мама мыла раму" - не более. Для расширения кругозра - книга п.3 тоже обязателена к прочтению, но догматично ее принимать к исполнению, тем не менее, не стоит. По тонкостям языка - стандарт C99. Возможно, следует проработать чего-либо с "упражнениями" из западных авторов.
Цитата(_Pasha @ Mar 8 2009, 10:22) *
И еще - ищите в инете и читайте живые примеры, разбирайтесь что и как написано.

Только имейте ввиду, что не менее, чем в 95 случаев из 100 это будет исходник уровня "моя первая программа на C" sad.gif и скорее "это" может служить учебным пособием как НЕ надо писать. Посему относиться к найденному в интернете надо более, чем критически.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 08:42
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Цитата(_Pasha @ Mar 8 2009, 12:22) *
Не начинайте с Codevision. Он портит мозг. smile.gif

Насчет рака мозга, который вызывает CodevisionAVR мне уже говорил один радиолюбитель. Потихоньку думаю перейти или на Winavr или на IAR.
Начал с CodevisionAVR потому что книги по нему есть, тот же Белов для новичка как первый старт. ДА еще в какой-то из книг прочитал мнение что дескать с Winavr новичку разбираться тяжело – лучше начать с CodevisionAVR.
Вот что по микроконтроллерам AVR на Си удалось найти:
1) Белов. Создаём устройства на микроконтроллерах
2) Голубцов. Микроконтроллеры AVR от простого к сложному
3) Лебедев. Code Vision AVR
4) Хартов. Микроконтроллеры AVR. Практикум для начинающих
5) Шпак. Программирование на языке C для AVR и PIC микроконтроллеров
6) Joe Pardue. C Programming for microcontrollers, 2005
7) Steven F. Barrett and Daniel J. Pack. Atmel AVR Microcontroller Primer - Programming and Interfacing, 2008
Если что-то пропустил для AVR на Cи – дополните пожалуйста.
Хоть и не с примерами на Си, но думаю без книги
8) Евстифеев. Микроконтроллеры AVR семейства Mega
не обойтись любому начинающему осваивать семейство Mega
В рунете много радолюбителей выкладывают проектов на Winavr или на Codevision, с описаниями – это несомненно плюс для новичка. А IAR у меня тока дока на английском. Да и мудреный IAR какой-то, модный весь, с наворотами. Ни одной книги по IAR даже на английском я не встречал. Хотя пока мозг пустой наверное лучше его приучать к тому что перспективно, т.е. к IAR.
Глупый вопрос но все же: код написанный в IAR я смогу загнать в AVRStudio 4.16, прошить микроконтрллер в stk500 и использовать новую связку AVRStudio 4.16 с Proteus v7.4 SP3 (Proteus VSM Viewer)?! И использовать имитацию в AVRStudio аналоговых сигналов для АЦП в связке с Proteus?!
С другой стороны: хоть Winavr, хоть IAR, хоть Codevision – проблема незнания языка Си и фундаментальных алгоритмов все равно остается.

Сообщение отредактировал Владимир_2010 - Mar 8 2009, 08:46
Go to the top of the page
 
+Quote Post
ARV
сообщение Mar 8 2009, 08:57
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Лично мое мнение такое: программирование - это не знание языка, это способ или стиль мышления. Научиться программировать можно вообще не зная ни одного языка программирования - с моей точки зрения это означает научиться раскладывать решение задачи на необходимые этапы, т.е. алгоритмизация. Вот умению выделять из поставленной задачи отдельные элементы, которые можно (или нужно) выполнять в определенной последовательности (или наоборот, параллельно) для того, чтобы добиться требуемого результата, мало какие книги учат... Язык Си (или другой какой) - это всего лишь набор красок и кистей, которыми мы рисуем картины... Но результат зависит от того, как именно мы воспринимаем мир и как умеем отразить его на холсте.
К сожалению, мне неизвестны книги, которые могли бы научить алгоритмике и логическому мышлению, поэтому посоветовать ничего не могу... Но уверен, что начинать нужно именно с этого.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 09:10
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Цитата(zltigo @ Mar 8 2009, 12:36) *
Достаточно одной - K&R второе издание.

Что неужели по Си ничего кроме Керниган&Ритчи и Керниган&Пайк читать не надо?! Что с книгой Седжвик и трюком в названии «С++»?!
По поводу трудов Керниган и Ритчи. У меня две книги. Первая в pdf называется на русском «Керниган, Ритчи. Язык программирования Си/Пер. с англ. 3е издание. 2001 – 352 с», однако двумя страницами ранее на картинке написано по английскому «The C programming Language. Second Edition». Вторая книга тоже в pdf но не понятно что за издание и что за год. На первой странице написано просто «Б.В. Керниган, Д.М. Ричи. Язык С». в книге 229 страниц.
Как учить Си по этим книгам?! Какую программулю на компьютер ставить и на чем примеры прогонять?!
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 09:24
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 8 2009, 12:10) *
Что неужели по Си ничего кроме Керниган&Ритчи

Раньше, чем K&R понимать начнете - не надо.
Цитата
По поводу трудов Керниган и Ритчи. У меня две...

Я же даже жирным шрифтом выделил второе издание. Если с английским так плохо, что надпись «The C programming Language. Second Edition» воспринимается, как картинка, то надо начинать с английского языка.



Цитата(Владимир_2010 @ Mar 8 2009, 12:10) *
Что с книгой Седжвик и трюком в названии «С++»?!

Думаю, что совсем "ничего". Алгоритмы это Кнут, а не седжвики и иже с с ним рождающие "для С", "для С++", "для Java", "для VBA smile.gif"....


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 09:24
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Цитата(zltigo @ Mar 8 2009, 14:17) *
Я же даже жирным шрифтом выделил второе издание. Если с английским так плохо, что надпись «The C programming Language. Second Edition» воспринимается, как картинка, то надо начинать с английского языка.

Спасибо.
Second Edition - это всем понятно что второе издание. Только смущает что в книге при переводе на русский издатели написали «Язык программирования Си/Пер. с англ. 3е издание» (на 4ой странице), а двумя страницами ранее "The C programming Language. Second Edition". Вот и уточнил – та ли эта книга.
Цитата(zltigo @ Mar 8 2009, 14:17) *
Думаю, что совсем "ничего". Алгоритмы это Кнут, а не седжвики и иже с с ним рождающие "для С", "для С++", "для Java", "для VBA

Седжвик привлекает тем что на первый взгляд книга достойная и на Си, а Си нужен для освоения микроконтроллеров.
До детального изучения «Кнут. Искусство программирования» руки все не доходят. Хотя понимаю что надо. Из классики по алгоритмам что еще обязательно к прочтению?! «Томас Кормен и др. Алгоритмы: построение и анализ»?!

Сообщение отредактировал Владимир_2010 - Mar 8 2009, 09:41
Go to the top of the page
 
+Quote Post
vshemm
сообщение Mar 8 2009, 09:41
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 167
Регистрация: 15-08-07
Пользователь №: 29 803



Цитата(ARV @ Mar 8 2009, 11:57) *
К сожалению, мне неизвестны книги, которые могли бы научить алгоритмике и логическому мышлению, поэтому посоветовать ничего не могу... Но уверен, что начинать нужно именно с этого.

http://mitpress.mit.edu/sicp/
Есть в русском переводе: http://newstar.rinet.ru/~goga/sicp/sicp.pdf.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 09:54
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 8 2009, 12:24) *
Седжвик привлекает тем что на первый взгляд книга достойная и на Си, а Си нужен для освоения микроконтроллеров.

Вы английский, как, по учебникам изучать предпочитаете, или по анголоязычным комментариям шекспироведов к Королю Лиру?
Если первое, то причем тут наличие примеров на С или любом другом языке в учебнике по алгоритмам?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 10:07
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Вначале любой язык предпочитаю изучать через примеры. От простого к сложному.
И любую новую дисциплину только через примеры и опять же от простого к сложному. Спасибо за ссылку на K@R.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 10:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 8 2009, 13:07) *
Вначале любой язык предпочитаю изучать через примеры.

Совершенно не эффективный путь для ВЗРОСЛЫХ людей имеющих за спиной опыт получения хотя-бы приличного школьного образования sad.gif. Что-то вроде попыток приготовления блюд по рецептам из отрывного календаря с последующей заливкой получившегося "майонезом" из ближайшего гастронома.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 8 2009, 11:48
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Вот, пользуюсь, как справочником. О "художественной" ценности судить не стану - не имею права... Как и о том, с каких книг правильно начинать обучение программированию. Но именно в практике работы с МК мне помогает больше, чем "библия" Кернигана и Ритчи. Может, исключительно из удобного HTML-представления. rolleyes.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 12:27
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Herz @ Mar 8 2009, 14:48) *

Типа "методичка" для студентов всяких разных специальностей - прочитать, сдать зачет и забыть sad.gif. Такого типа методичек в интернете довольно много. Из "справочников" в свое время активно пользовал СЭВ-овский стандарт языка - очень неплохо был написан и строго, и нюансировка компиляторов присутствовала, да и те-же примеры для неочевидных вещей были со вкусом подобраны и растолкованы.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 8 2009, 12:39
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Herz @ Mar 8 2009, 14:48) *
Вот, пользуюсь, как справочником. О "художественной" ценности судить не стану - не имею права... Как и о том, с каких книг правильно начинать обучение программированию. Но именно в практике работы с МК мне помогает больше, чем "библия" Кернигана и Ритчи. Может, исключительно из удобного HTML-представления. rolleyes.gif


Что-то меня сильно настораживают книги, в которых используются термины типа "инициатор", или несколькими строками ниже объявленная переменная:
const long megabute = (1024 * 1024);

Наверное в Тамбове народ что-то считает в мегабутах?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 8 2009, 12:52
Сообщение #16


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Присоединяюсь к Герцу. K&R - мало полезен. Более полезен даже не справочник, а маленьких листочек, на котором выписаны примеры ходовых конструкций. For, while, if else, ++, --, да примеры оформления функций. Языком Си не пользуюсь, а использую его. Как замену ассемблеру.
А для реальных задач в микроконтроллерах обычно возникает много разных проблем, что добавлять побочные эффекты самого Си не имеет смысла. Разве что ты - тащишься от процесса именно программирования. Я - не тащусь.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 12:57
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(DpInRock @ Mar 8 2009, 15:52) *
в микроконтроллерах обычно возникает много разных проблем....

Ну если "программировать" по шпаргалке сделанной из чего-нибудь типа поминаемого курса (не важно C, ASM, ....), то конечно "проблем" будет действительно "много и разных" smile.gif Только это будет следствием небрежения.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 8 2009, 13:25
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(DpInRock @ Mar 8 2009, 15:52) *
Присоединяюсь к Герцу. K&R - мало полезен. Более полезен даже не справочник, а маленьких листочек, на котором выписаны примеры ходовых конструкций. For, while, if else, ++, --, да примеры оформления функций. Языком Си не пользуюсь, а использую его. Как замену ассемблеру.
А для реальных задач в микроконтроллерах обычно возникает много разных проблем, что добавлять побочные эффекты самого Си не имеет смысла. Разве что ты - тащишься от процесса именно программирования. Я - не тащусь.


Так в том то и прелесть С, что "ходовых инструкций" меньше десятка.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 13:43
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(sergeeff @ Mar 8 2009, 16:25) *
Так в том то и прелесть С, что "ходовых инструкций" меньше десятка.

Словарь "Эллочки-Людоедки" составлял, согласно Ильфу с Петровым, 30 слов, но ими она могла выразить практически любую свою мысль. Вопрос только в том, владелала-ли Эллочка русским языком и насколько ценны ее мысли?


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 8 2009, 14:53
Сообщение #20


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Чтобы научиться ездить на автомобиле нужно читать теорию двигателей ВС? Нет. Нужна маленькая шпаргалка.

Так вот, чтобы топикастер начал программировать контроллеры совсем необязательно вообще знать Си. Вот я его не знаю. Хотя написал на нем пару десятков программ (у многих из вас дома и на работе устройства стоят с моими программами). Не в том смысле, что я круче бублика, а что на самом деле можно так делать. А если уж интерес будет - то можно и книжку почитать. Разумеется.

А если что-то большое программировать (чтоб код был под сотню К), то да. Тут надо книжку таки почитать. Но вопрос стоит в программировании контроллеров класса мега48.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 15:30
Сообщение #21


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



В том то и вопрос – знаю только базу for, while, else, if, switch, как объявить функцию. Как Элочка Людоедка. Программировал на matlab различные алгоритмы ориентированные на математическое моделирование, прикладную математику – база и тут такая же. Но испытываю постоянный дискомфорт от того что мелькают незнакомые конструкции Си. Кроме того все время мучает мысль и совесть что код, алгоритм написал не оптимально, что можно меньше по объему, если применить какие-нибудь другие функции и что бы быстрее работал. Вот и закрадывается мысль что может потратить некоторое время на основы и азы, а уж потом щупать микроктнроллеры. Хотя с другой стороны изучать Си без привязке к микроконтроллерам не интересно. Если бы хотя бы в книге было много математики, различных нестандартных алгоритмов + Си – дак так хоть читать интересно, а просто Си с примитивными, разрозненными примерами – тоска.
Думаю все таки поставить Borland C++ Builder и проштудировать K@R, все таки классика.

Сообщение отредактировал Владимир_2010 - Mar 8 2009, 15:34
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 8 2009, 15:51
Сообщение #22


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Владимир_2010 @ Mar 8 2009, 18:30) *
Но испытываю постоянный дискомфорт от того что мелькают незнакомые конструкции Си.

Кстати, Си-подобный язык матлаба - это ужас, вызывающий рвоту. Концептуально. 
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 8 2009, 17:41
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(zltigo @ Mar 8 2009, 14:27) *
Типа "методичка" для студентов всяких разных специальностей - прочитать, сдать зачет и забыть sad.gif. Такого типа методичек в интернете довольно много.

Да, справедливо. Но поскольку программированием пока приходится заниматься между делом и непрофессионально - почти хватает. Когда (редко) возникает нужда разобраться глубже - беру другие источники. Вот вырасту, стану писать серьёзные программы - тогда и за книжки взрослые засяду... rolleyes.gif
Цитата
Из "справочников" в свое время активно пользовал СЭВ-овский стандарт языка - очень неплохо был написан и строго, и нюансировка компиляторов присутствовала, да и те-же примеры для неочевидных вещей были со вкусом подобраны и растолкованы.
Так, может, есть в сети?


Цитата(Владимир_2010 @ Mar 8 2009, 17:30) *
Хотя с другой стороны изучать Си без привязке к микроконтроллерам не интересно.

Думаю все таки поставить Borland C++ Builder и проштудировать K@R, все таки классика.

Нелогично, ИМХО. К железу надо ближе... biggrin.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 18:06
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 8 2009, 18:30) *
Думаю все таки поставить Borland C++ Builder...

Ни в коем случае - это слишком "самодельная" реализация C sad.gif. Традиция у борландовцев такая. Возьмите GCC (на нем и дальше,возможно, жить будете), ну или Watcom. Ну или сразу - MVC.... Но не борланд.


Цитата(Herz @ Mar 8 2009, 20:41) *
Так, может, есть в сети?

Не знаю sad.gif это было издание где-то 90-го года. Выглядел он стандартно для методических материалов и международных стандартов издаваемых в то время - большой формат A4, мягкая обложка вишневого цвета, клеевой переплет. Было два экземпляра - могу поискать останки одного из них..... Пока не нашел, но два подобных издания нашел - это издания "Международного центра научной и технической информации" серия "Методические материалы и документация по пакетам прикладных программ".

Цитата(DpInRock @ Mar 8 2009, 17:53) *
Так вот, чтобы топикастер начал программировать контроллеры совсем необязательно вообще знать Си.

Ну,ну sad.gif 95% процентов исходников из интернету так и написаны, но не вижу причин для гордости и для приумножении такого "добра".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 8 2009, 19:58
Сообщение #25


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Да уж, все еще более усложняется и удаляется от железяк sad.gif . Если сейчас ставить, например GCC, придется тогда не c K@R упражняться, а решать другие вопросы: где скачать (хотя вроде бы с этим проблем не должно быть, т.к. free), как запустить, как освоить программу, как скомпилировать, как в ней производить отладку, где взять книгу по GCC... А Borland C++ Builder каждый второй прохожий на улице знает, да и книг с картинками для самообучения навалом. Borland не поддерживает что ли ANSI C изложенный в книге K@R?! Мне же по идее надо только язык почувствовать, почитать K@R, поделать примеры. Дальше буду опять mega8 мучить.
Что за MVC и как он может помочь новичку в освоении микроконтроллеров и языка Си?! GCC я хотя бы буквы такие знаю (вижу при запуске avrstudio AVR GCC).

Отвлекшись и замечтавшись, наткнулся на книгу «Saul A. Teukolsky et al., Numerical Recipes in C». Есть ли что-нибудь подобное на русском?! Просто прикладная математика на Си с примерами – это уже не скучно будет читать даже на досуге, перед сном.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 8 2009, 20:05
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 8 2009, 22:58) *
Что за MVC и как он может помочь новичку в освоении микроконтроллеров и языка Си?!

Microsoft Visual С - просто комплексное решение - по любому разумнее и стандартнее борлондячего творения.
Цитата
как запустить, как освоить программу, как скомпилировать, как

по любому этим придется заниматься.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 8 2009, 21:12
Сообщение #27


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Владимир_2010 @ Mar 8 2009, 22:58) *
Мне же по идее надо только язык почувствовать, почитать K@R, поделать примеры. Дальше буду опять mega8 мучить.


Проблема решается в два клика:


1. Ставите WinAVR-20080512

2. AVRstudio 4.хх

Изучайте! В студии встроен GCC-плагин, с которым можно пробовать почти все без напрягов.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 8 2009, 21:13
Сообщение #28


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Владимир_2010 @ Mar 8 2009, 18:30) *
В том то и вопрос – знаю только базу for, while, else, if, switch, как объявить функцию. Как Элочка Людоедка. Но испытываю постоянный дискомфорт от того что мелькают незнакомые конструкции Си. Кроме того все время мучает мысль и совесть что код, алгоритм написал не оптимально, что можно меньше по объему, если применить какие-нибудь другие функции и что бы быстрее работал. Вот и закрадывается мысль что может потратить некоторое время на основы и азы, а уж потом щупать микроктнроллеры.
Ну все-таки без K&R никуда... но и пробовать ведь можно на симуляторе для микроконтроллера ?
Код не оптимальный ? Дык вроде здесь можно найти уйму примеров как из неоптимального делают оптимальный...
просто задавайте вопросы если где чего непонятно...
Go to the top of the page
 
+Quote Post
SergeyTT
сообщение Mar 8 2009, 21:39
Сообщение #29


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-07-06
Из: Харьков
Пользователь №: 18 533



Цитата(Владимир_2010 @ Mar 8 2009, 17:30) *
В том то и вопрос – знаю только базу for, while, else, if, switch, как объявить функцию.
[skipped]
Но испытываю постоянный дискомфорт от того что мелькают незнакомые конструкции Си. Кроме того все время мучает мысль и совесть что код, алгоритм написал не оптимально, что можно меньше по объему, если применить какие-нибудь другие функции и что бы быстрее работал.

Осмелюсь посоветовать взять в компанию к K&R аппноты AVR030,AVR035
Цитата(Владимир_2010 @ Mar 8 2009, 17:30) *
Вот и закрадывается мысль что может потратить некоторое время на основы и азы, а уж потом щупать микроктнроллеры. Хотя с другой стороны изучать Си без привязке к микроконтроллерам не интересно.

В этом форуме, в ветках, посвященных AVR есть масса кода и ссылок - читайте, разбирайтесь,программируйте
и отлаживайте свой кристалл. Есть еще, например, www.avrfreaks.net - много всяких несложных вещей, да и при желании в сети можно найти множество рабочего кода на С под АВР и поразбираться в нем.
Цитата(Владимир_2010 @ Mar 8 2009, 17:30) *
Если бы хотя бы в книге было много математики, различных нестандартных алгоритмов + Си – дак так хоть читать интересно, а просто Си с примитивными, разрозненными примерами – тоска.
Думаю все таки поставить Borland C++ Builder и проштудировать K@R, все таки классика.


Ну, если время девать некуда... sad.gif
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 9 2009, 10:00
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Цитата(Herz @ Mar 8 2009, 16:48) *
Вот, пользуюсь, как справочником. О "художественной" ценности судить не стану - не имею права... Как и о том, с каких книг правильно начинать обучение программированию. Но именно в практике работы с МК мне помогает больше, чем "библия" Кернигана и Ритчи. Может, исключительно из удобного HTML-представления. rolleyes.gif

Библию K@R сейчас нашел в формате chm (http://рапидшаре.com/files/207090745/C_Language.rar.html), а то до этого на компе книга была не OCR в формате djvu . Может быть еще кому-нибудь пригодиться.
Цитата(zltigo @ Mar 8 2009, 17:27) *
Из "справочников" в свое время активно пользовал СЭВ-овский стандарт языка - очень неплохо был написан и строго, и нюансировка компиляторов присутствовала, да и те-же примеры для неочевидных вещей были со вкусом подобраны и растолкованы.

Нельзя ли библиографическую запись более детально и четко определить, что бы поискать в библиотеке по каталогу. Если вещь хорошая и если удастся найти - отсканирую.
А сейчас каким справочником пользуетесь?! Или справочник уже в голове?!
Цитата(DpInRock @ Mar 8 2009, 17:52) *
Присоединяюсь к Герцу. K&R - мало полезен. Более полезен даже не справочник, а маленьких листочек, на котором выписаны примеры ходовых конструкций. For, while, if else, ++, --, да примеры оформления функций. Языком Си не пользуюсь, а использую его.

Встречал нечто подобное в сети в pdf, где на листочке-шпаргалке было выписано и описано все коротенечко. Файл найти не могу.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2009, 10:41
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(Владимир_2010 @ Mar 9 2009, 13:00) *
Нельзя ли библиографическую запись более детально и четко определить...

Нашел где-то в интернете в списках литературы:
Код
Методические материалы и документация по пакетам прикладных программ [Текст] : научное издание / ; Междунар. центр науч. и техн. информации. - М. : МЦНТИ, 1978 -    
      Вып. 67 : Система программирования на языке высокого уровня Си :  / Д. М. Субботин, С. О. Бочков. - 1991. - 270 с.

Цитата
А сейчас каким справочником пользуетесь?! Или справочник уже в голове?!

В голове + у компиляторов хелпы в комплекте неплохие бывают, ну а вообще стандарт С99 языка существует для полных и окончательных разборок
Прикрепленные файлы
Прикрепленный файл  ANSI_C99.rar ( 902.54 килобайт ) Кол-во скачиваний: 102
 


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 9 2009, 14:18
Сообщение #32


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(DpInRock @ Mar 8 2009, 22:53) *
Нужна маленькая шпаргалка.

Тут вот в чем дело: шпаргалка не научит мыслить, не даст нужную теорию! Т.е. знания будут ограничены 3 - 10 пунктами шпаргалки, а когда возникнет ситуация, в шпаргалке не описанная, что произойдет?
ИМХО теорию нужно учить сразу. Пусть не в полном объеме (да это и не возможно), но разумными порациями и теорию правильную! Чтобы уже на самом начальном этапе формировался прочный фундамент знаний.


Цитата(zltigo @ Mar 9 2009, 18:41) *
В голове + у компиляторов хелпы в комплекте неплохие бывают, ну а вообще стандарт С99 языка существует для полных и окончательных разборок

А что бы Вы могли порекомендовать для чтения по Си++? Как я понимаю, Си уже мало используется...


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2009, 14:24
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(haker_fox @ Mar 9 2009, 17:18) *
А что бы Вы могли порекомендовать для чтения по Си++?

Аллах его ведает sad.gif тот-же первоисточник С++ от Бьерна Страуструпа написан по сравнению с творением профессионального технического писателя Кернигана по С просто ужасно sad.gif
Цитата
Как я понимаю, Си уже мало используется...

С чего-бы это вдруг smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 9 2009, 14:49
Сообщение #34


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(zltigo @ Mar 9 2009, 22:24) *
Аллах его ведает sad.gif тот-же первоисточник С++ от Бьерна Страуструпа написан по сравнению с творением профессионального технического писателя Кернигана по С просто ужасно sad.gif

Ну ладно... Скачал книгу, что Вы рекомендовали топикстартеру (именно второе издание), может быть свой уровень подниму хочь чуть.
Цитата(zltigo @ Mar 9 2009, 22:24) *
С чего-бы это вдруг smile.gif

Может быть мне и память изменила, но где-то давно я видел на это форуме информацию, что компиляторы Си уже не развиваются. Из этого сделал вывод (в большей степени благодаря "удобствам и сервисам" Си++). Выходит, что вывод неверный.

А если не секрет, что Вы используете больше? Си или Си++?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2009, 15:45
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(haker_fox @ Mar 9 2009, 17:49) *
А если не секрет, что Вы используете больше? Си или Си++?

Начинал и довольно долго писал на C++, затем из-за отсутствия компиляторов пререполз на C, потом на "почти C" - под плюсовый компилятор. Сейчас практически только на C.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 9 2009, 17:17
Сообщение #36


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(zltigo @ Mar 9 2009, 23:45) *
Начинал и довольно долго писал на C++, затем из-за отсутствия компиляторов пререполз на C, потом на "почти C" - под плюсовый компилятор. Сейчас практически только на C.

Но ведь сейчас-то Си++ компиляторы есть. Чем можно объяснить Ваш случай в настоящее время? Не сочтите за издевку (или что-нибудь в этом роде), это действительно интерес для меня!


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Mar 9 2009, 17:39
Сообщение #37


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



K&R - я бы не заморачивался его читать.
Он простой как 3 копейки, ничего особенного, ето не Страуструп.
Чето надо выяснить - можно заглянуть.
Ну или сразу в стандарт, ну там сложней разбиратся.
Изучал бы по примерам.
Поставил задачу - и решал, искал бы решения в интернете.

Цитата(haker_fox @ Mar 9 2009, 13:17) *
Но ведь сейчас-то Си++ компиляторы есть. Чем можно объяснить Ваш случай в настоящее время? Не сочтите за издевку (или что-нибудь в этом роде), это действительно интерес для меня!


смотря на что. на PIC-и думаю нет. да и памяти C++ жрет больше.
На никроконтроллерах с 64 к и меньше нет особого смысла C++ пользовать - не развернутся


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Mar 9 2009, 18:31
Сообщение #38


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(haker_fox @ Mar 9 2009, 20:17) *
Но ведь сейчас-то Си++ компиляторы есть. Чем можно объяснить Ваш случай в настоящее время? Не сочтите за издевку (или что-нибудь в этом роде), это действительно интерес для меня!

Так это было в прошлое время smile.gif. Начинал с борландовского компилятора - первое творение на плбсах - на спор быстренько написал оконную библиотеку выигравшую соревнование у аналогичной сишной - уж больно классно все ложилось на плюсы, потом начались усовершенствования и с учетом накопления опыта удалось на С и ASM сделать круче smile.gif. Потом стало возможным писать на C, но не на C++ не только для PC, но и контроллеров. Первые операционки на смеси C/ASM..... Как-то отошел от C++, много пришлось на ASM писать, замаматерел, закостенел.... Писишные проекты традиционно пишу под C++ компилятор, но с минимальным использованием плюсов, остальное на C. "Ручками" на С при понимании того, что и как делать реализуются и плюсовые приемы.

Цитата(A. Fig Lee @ Mar 9 2009, 20:39) *
да и памяти C++ жрет больше.

В принципе нет smile.gif


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 10 2009, 02:17
Сообщение #39


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(zltigo @ Mar 10 2009, 02:31) *
"Ручками" на С при понимании того, что и как делать реализуются и плюсовые приемы.

В общем, это уже дело привычки и вкуса. Причем привычка и вкус базируются на абсолютном понимании того, что делается.


Цитата(A. Fig Lee @ Mar 10 2009, 01:39) *
да и памяти C++ жрет больше.

Вот тут уже обсуждалось такое типичное заблуждение.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 10 2009, 04:34
Сообщение #40


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(DpInRock @ Mar 8 2009, 15:52) *
Присоединяюсь к Герцу. K&R - мало полезен. Более полезен даже не справочник, а маленьких листочек, на котором выписаны примеры ходовых конструкций. For, while, if else, ++, --, да примеры оформления функций.

Вот с этим категорически не могу согласиться. Учебник полезен тем, что он не только описывает синтаксис операторов, но и их использование, показывает такие способы, которые просто не пришли бы в голову при формальном изучении операторов. С таким же успехом можно учить иностранный язык, пользуясь только словарем. Такой подход особенно вреден тем, кто уже знаком с паскалем - увидев общее например в операторе for он будет думать, что в Си все так же как и в паскале - переменная цикла может быть только целой, и меняться только на единицу, и заканчиваться при достижении заданного числового значения. Без примеров использования он просто не догадается о необычайной гибкости языка.
Цитата(DpInRock @ Mar 8 2009, 15:52) *
Языком Си не пользуюсь, а использую его. Как замену ассемблеру.

В таком случае вам сначала не мешало бы выучить тонкости Си, прежде чем давать советы. А то получается как с тем Карузо - фиговый певец, я слышал, мне Рабинович напел.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Mar 10 2009, 07:10
Сообщение #41


Местный
***

Группа: Участник
Сообщений: 338
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(zltigo @ Mar 9 2009, 13:41) *
Нашел где-то в интернете в списках литературы:
Код
Методические материалы и документация по пакетам прикладных программ [Текст] : научное издание /; Междунар. центр науч. и техн. информации. - М. : МЦНТИ, 1978 -    
      Вып. 67 : Система программирования на языке высокого уровня Си :  / Д. М. Субботин, С. О. Бочков. - 1991. - 270 с.


Полностью присоединяюсь. По большому счету я изучил язык по 2-м источникам: K&R и указанной книге. Остальные - для изучения разных "рюшечек", присущих конкретным реализациям.


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Mar 10 2009, 07:22
Сообщение #42


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Владимир_2010, у одного из посетителей этого форума есть очень замечательный лозунг "Правильный путь один - СВОЙ" biggrin.gif ... Потому меньше тратьте времени на чтение советов с какой книги начать - а больше на "начинание" - изучение собственно C(C++)...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
Владимир_2010
сообщение Mar 10 2009, 12:34
Сообщение #43


Частый гость
**

Группа: Участник
Сообщений: 120
Регистрация: 16-02-08
Пользователь №: 35 087



Цитата(777777 @ Mar 10 2009, 09:34) *
...Учебник полезен тем, что он не только описывает синтаксис операторов, но и их использование, показывает такие способы, которые просто не пришли бы в голову при формальном изучении операторов. С таким же успехом можно учить иностранный язык, пользуясь только словарем...Без примеров использования он просто не догадается о необычайной гибкости языка.

Согласен. Мне (думаю и любому другому начинающему) после прочтения K@R хотелось бы посмотреть как делается для микроконтроллеров, с подробными комментариями. Наверняка ведь изучая подобные примеры для микроконтроллеров, возможно встретились бы способы, которые просто не пришли в голову при изучении только K@R. С учетом того что
Цитата(zltigo @ Mar 8 2009, 12:36) *
...Только имейте ввиду, что не менее, чем в 95 случаев из 100 это будет исходник уровня "моя первая программа на C" sad.gif и скорее "это" может служить учебным пособием как НЕ надо писать. Посему относиться к найденному в интернете надо более, чем критически...

и хотелось бы серьезную прикладную книгу по микроконтроллерам на Си с примерами, а не изучать разрозненные примерчики из сети. Книгу по Микроконтроллерам + примеры на Си (так сказать два в одном), но не такую
Цитата(zltigo @ Mar 8 2009, 12:36) *
..."Книги по микроконтролерам" это или откровенное дерьмо, или это действительно книги по Микроконтроллерам а не по изучению языков и раcсматривать "примеры" из таких книг следует так-же, как и пример из букваря "Мама мыла раму" - не более...

Вот наткнулся на книгу «Richard H. Barnett, et al. Embedded C Programming And The Atmel AVR.» (h**p://www.freebookspot.ws/Comments.aspx?Element_ID=11159). Только книга - переведена на китайский! На английском уже есть и второе издание – но не могу найти. Может кто-нибудь встречал нечто подобное хотя бы на английском?!
Цитата(DRUID3 @ Mar 10 2009, 12:22) *
Владимир_2010, у одного из посетителей этого форума есть очень замечательный лозунг "Правильный путь один - СВОЙ" biggrin.gif ... Потому меньше тратьте времени на чтение советов с какой книги начать - а больше на "начинание" - изучение собственно C(C++)...

Хороший лозунг, но есть и другой: при правильном подборе литературы, даже в сортире можно получить неплохое образование. Надо совмещать два этих подхода.

Сообщение отредактировал Владимир_2010 - Mar 10 2009, 12:35
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Mar 10 2009, 20:36
Сообщение #44


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(Владимир_2010 @ Mar 10 2009, 15:34) *
даже в сортире можно получить неплохое образование


В сортире лучше заниматься тем делом, за которым туда (в сортир) пришел.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Mar 10 2009, 23:39
Сообщение #45


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(haker_fox @ Mar 9 2009, 22:17) *
Вот тут уже обсуждалось такое типичное заблуждение.


и де там обсуждается "типичное заблуждение" ?
расходы как минимум на конструкторы/деструкторы, виртуальную таблицу, ну и все то, что приносит с собой дженерализейшн.

С Торвальдом я согласен в конкретном случае по ссылке, за исключением СТЛ - тут он пургу гонит, хотя он вообще оторвался от народа и пургу часто гонит.
Причина редактирования: Излишнее цитирование.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 11 2009, 06:05
Сообщение #46


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(A. Fig Lee @ Mar 11 2009, 02:39) *
и де там обсуждается "типичное заблуждение" ?
расходы как минимум на конструкторы/деструкторы, виртуальную таблицу, ну и все то, что приносит с собой дженерализейшн.

Никаких лишних расходов там нет, то, что делают конструкторы/деструкторы, нужно делать в сишной программе, но там ты можешь забыть, а в С++ компилятор сделает это автоматически. Если виртуальный функций нет, то и виртуальной таблицы не будет. Опять же, если в сишной программе ты будешь делать что-нибудь наподобие перехода по таблице указателей, то это фактически то же самое с теми же расходами.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 11 2009, 09:32
Сообщение #47


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(A. Fig Lee @ Mar 11 2009, 07:39) *
и де там обсуждается "типичное заблуждение" ?
расходы как минимум на конструкторы/деструкторы, виртуальную таблицу, ну и все то, что приносит с собой дженерализейшн.

Еще раз повторюсь: даже если небольшой оверхед и есть, это мне не помешало поместить в ATmega16 ОСь + прикладную программу. Все на Си++. Сейчас занимаюсь реалтаймовским приложением. Тоже на Си++, без ОСи (она там просто не нужна). Для ATmega168. Я в свое время также и про Си считал. Только на ассемблере работал. Пока не попробывал. Удобств было... словами не описать.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
vik0
сообщение Mar 11 2009, 18:12
Сообщение #48


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(A. Fig Lee @ Mar 11 2009, 01:39) *
расходы как минимум на конструкторы/деструкторы, виртуальную таблицу, ну и все то, что приносит с собой дженерализейшн.

У Страуструпа есть весьма интересная книжка - "Дизайн и эволюция языка С++". Не читали? Рекомендую. Одна из ключевых идей книги - "вы не платите за то, что не используете".
Не используете виртуальные функции - не будет никакой таблицы. Не инициализируете члены класса - не будет никаких лишних конструкторов (default ctor, инициализирующий члены default значениями, нормальный компилятор успешно соптимизирует).
Go to the top of the page
 
+Quote Post
singlskv
сообщение Mar 11 2009, 20:33
Сообщение #49


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(vik0 @ Mar 11 2009, 21:12) *
У Страуструпа есть весьма интересная книжка - "Дизайн и эволюция языка С++". Не читали? Рекомендую. Одна из ключевых идей книги - "вы не платите за то, что не используете".
Очень правильная "в принципе" идея, только в реальности С++ слегка провоцирует на дополнительные
накладные расходы, предоставляя взамен кучу не всегда нужных фич.
А вот людей которые могут не купиться на эти ненужные вещи не так уж и много...
Go to the top of the page
 
+Quote Post
vik0
сообщение Mar 11 2009, 21:20
Сообщение #50


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(singlskv @ Mar 11 2009, 22:33) *
Очень правильная "в принципе" идея, только в реальности С++ слегка провоцирует на дополнительные
накладные расходы, предоставляя взамен кучу не всегда нужных фич.
А вот людей которые могут не купиться на эти ненужные вещи не так уж и много...

Согласен. Все упирается в поиск баланса - чем вы готовы пожертвовать ради упрощения процесса разработки. Правда это подразумевает неплохое (как минимум) знание языка. С++ - сложный инструмент. А для эффективного использования любого сложного инструмента необходимо его хорошее знание и понимание.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Mar 12 2009, 01:39
Сообщение #51


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(haker_fox @ Mar 11 2009, 05:32) *
Еще раз повторюсь: даже если небольшой оверхед и есть, это мне не помешало поместить в ATmega16 ОСь + прикладную программу. Все на Си++. Сейчас занимаюсь реалтаймовским приложением. Тоже на Си++, без ОСи (она там просто не нужна). Для ATmega168. Я в свое время также и про Си считал. Только на ассемблере работал. Пока не попробывал. Удобств было... словами не описать.


Верю. И в Запорожец можно человек 7 натолкать. Вопрос - еффективно ли ето?
Скажите пожалуйста, что вас побудило использовать C++ a не C, и какие его
особеености Вы использовали(
try/catch, templates, STL, (design patterns maybe), virtual functions, operator overloading, .. etc)

Интересно будет послушать.


Цитата(vik0 @ Mar 11 2009, 14:12) *
У Страуструпа есть весьма интересная книжка - "Дизайн и эволюция языка С++". Не читали? Рекомендую. Одна из ключевых идей книги - "вы не платите за то, что не используете".
Не используете виртуальные функции - не будет никакой таблицы. Не инициализируете члены класса - не будет никаких лишних конструкторов (default ctor, инициализирующий члены default значениями, нормальный компилятор успешно соптимизирует).


Нет не читал. Не читаю на русском техническую литературу. подозреваю, что ето "The Annotated C++ Reference Manual"..
Лежит на работе. Почитываю иногда главки. все вместе нет смысла читать. Надо будет домой забрать, пока не украли.

А че там?

По сути - если мы все выбросим - ето будет C, только написанный в формате C++.

Собственно тут 2 вопроса - почему хорош C++ и почему он плох с мелкими микроконтроллерами..
1. С появлением C++ стало легче разрабатывать большие проекты - можно все разбить на обьекты,
менять их, легко видна структура программы, и т.д.

2. Почему он плох для мелкоконтроллеров:
он скрывает связь с ресурсами - например внутри конструктора может быть другой new,
что сразу не очевидно. Операторы могут быть переопределены, и так далее..
Не очень прозрачен. Деструкторы - надо помнить что при выходе из скопа вызывается деструктор и т.д.

Не, я по жизни и на работе в основном на C++ программирую,
но когда дома на мелкоконтроллерах - лучше С


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Mar 12 2009, 15:47
Сообщение #52


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Верю. И в Запорожец можно человек 7 натолкать. Вопрос - еффективно ли ето?

В запорожце сколько сидячих мест? 4? Ну так зачем же туда 7 пихать?
В ATmega16 сколько памяти программ? 16Кб? Ну так если мое приложение + ОСь (на Си++) занимают 8 Кб памяти программ и 500 байт ОЗУ (используются буфера, много переменных), то кто мешает мне программировать на Си++? Я же не пытаюсь запихать туда более 16 Кб.
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Скажите пожалуйста, что вас побудило использовать C++ a не C, и какие его
особеености Вы использовали(
try/catch, templates, STL, (design patterns maybe), virtual functions, operator overloading, .. etc)
Интересно будет послушать.

Использовать Си++ меня побудила ОС scmRTOS. Увидев, что он успешно применяется для микроконтроллеров подобного класса, я решил что буду его применять в своей работе.
Какие особенности использовал? Так я же ссылку давал, там все есть.
Ну вот, хотябы это:
http://electronix.ru/forum/index.php?s=&am...st&p=548053
http://electronix.ru/forum/index.php?s=&am...st&p=548100
http://electronix.ru/forum/index.php?s=&am...st&p=548240
В последнем проекте активно использую наследование. Т.е. когда один класс наследуется другим. Очень удобно.
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
2. Почему он плох для мелкоконтроллеров:
он скрывает связь с ресурсами - например внутри конструктора может быть другой new,
что сразу не очевидно.

Чем это плохо и почему только для МК? На обычном IBM PC оперативы немеренно и бездумное использование new приветствуется, подумаешь пропадет пара сотен МБ? rolleyes.gif
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Операторы могут быть переопределены, и так далее..

Опять же, чем это плохо именно для МК?
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Не очень прозрачен.

Ну вот crying.gif
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Деструкторы - надо помнить что при выходе из скопа вызывается деструктор и т.д.

Ага, а еще надо помнить, что при создании объекта вызваются конструкторы и при вызове обработчика прерывания нужно сохранять SREG rolleyes.gif Конструктор и деструктор можно не определять в классе, тогда ничего вызваться не будет. Деструктор, как правило вообще редко применяется (ИМХО). А вот конструктор - это сплошная выгода. Создаешь объект и не заботишься о вызове функции на подобии Init(), конструктор все сам сделает. Чем плохо? Или вручную, или автоматом. Ну елки-палки, это же неубедительно звучит. Чем это снова плохо именно для МК?
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
Не, я по жизни и на работе в основном на C++ программирую,

Для ПК?
Цитата(A. Fig Lee @ Mar 12 2009, 09:39) *
но когда дома на мелкоконтроллерах - лучше С

А почему не АСМ, ведь на нем более оптимально можно написать? Си не очень прозрачен, добавляет свои навороты, оптимизацию, решает за программиста, где и что разместить biggrin.gif АСМ в этом плане гораздо лучше! В общем это юмор. А если серьезно, Вы попробуйте Си++ на МК. Глядишь, и сомнения пропадут, зато получите мощный инструмент на 8 битной платформе.

Ну и на последок: конечно, голову никто не отменял. Укладывать все возможности Си++ на AVR никто не собирается, но некоторые возможности почему бы не использовать?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
vik0
сообщение Mar 12 2009, 19:53
Сообщение #53


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(A. Fig Lee @ Mar 12 2009, 03:39) *
Нет не читал. Не читаю на русском техническую литературу. подозреваю, что ето "The Annotated C++ Reference Manual"..

Нет, я говорю о The Design and Evolution of C++
Цитата
А че там?

История развития языка с подробным описанием того, почему основные функции реализованы именно так, а не иначе.
Цитата
он скрывает связь с ресурсами - например внутри конструктора может быть другой new
что сразу не очевидно.

Ага. А на чистом "С" внутри функции типа InitSomething() не может быть вызвана InitSomethingElse() и, даже (о ужас!!), malloc??...
Цитата
Операторы могут быть переопределены...

Ну и отлично! Лично я предпочту написать:
Код
complex a, b, c, d;
....
a += b - c*d;

а не:
Код
a = complex_add(a, complex_sub(b, complex_mul(c, d)));

...и получить на выходе тот же самый код.
Цитата
Деструкторы - надо помнить что при выходе из скопа вызывается деструктор и т.д.

Ну и отлично! Лично я предпочту написать:
Код
int DoSomething()
{
  CriticalSection cs;
  ...bla-bla-bla...
  if (foo)
    return 1;
  ...bla-bla-bla...
  if (bar)
    return 2;
  ...bla-bla-bla...
  if (baz)
    return 3;
  ...bla-bla-bla...
  return 0;
}

а не:
Код
int DoSomething()
{
  DisableInterrupts();
  ...bla-bla-bla...
  if (foo) {
    RestoreInterrupts();
    return 1;
  }
  ...bla-bla-bla...
  if (bar) {
    RestoreInterrupts();
    return 2;
  }
  ...bla-bla-bla...
  if (baz) {
    RestoreInterrupts();
    return 3;
  }
  ...bla-bla-bla...
  RestoreInterrupts();
  return 0;
}

...и получить на выходе (извините за самоцитирование laughing.gif ) тот же самый код.



Цитата(haker_fox @ Mar 12 2009, 17:47) *
Ну и на последок: конечно, голову никто не отменял. Укладывать все возможности Си++ на AVR никто не собирается, но некоторые возможности почему бы не использовать?

+100
Go to the top of the page
 
+Quote Post
777777
сообщение Mar 13 2009, 07:05
Сообщение #54


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(A. Fig Lee @ Mar 12 2009, 04:39) *
Деструкторы - надо помнить что при выходе из скопа вызывается деструктор и т.д.

Как раз наоборот. Когда ты пишешь на Си, то надо помнить, что всю память, которую ты выделяешь, после использования надо освободить. А в С++ (если, конечно, классы спроектированы правильно) память выделяется в конструкторе, а в деструкторе автматически освобождается. Так же с любой другой инициализацией/освбождением. Главное - правильно споектировать класс чтобы он точно отражал суть описываемого объекта.

Так что никакого оверхеда в С++ нет - все что он делает, нужно делать и в Си, но там это должен далеть сам программист вручную и ни о чем не забыть, а в С++ это сделается автоматически.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 13 2009, 07:16
Сообщение #55


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(vik0 @ Mar 12 2009, 21:53) *
Ну и отлично! Лично я предпочту написать:
Код
...

а не:
Код
...

...и получить на выходе (извините за самоцитирование laughing.gif ) тот же самый код.


Вы просто не умеете готовить plain C:

Код
int DoSomething()
{
  UREG result=0;
  ATOMIC_BLOCK(_нужный_режим_)
  {
    ...bla-bla-bla...
    if (foo) {
                  result=1;continue;
    }
    ...bla-bla-bla...
    if (bar) {
                  result=2;continue;
    }
    ...bla-bla-bla...
    if (baz) {
                  result=3;continue;
    }
  }
  return result;
}


Как видите, все намного проще smile.gif

ЗЫ: ATOMIC_BLOCK можно покурить в инклудах гнуся. Кстати, в гнусе можно и прямо return 1 делать в ветках. Но я не сторонник пользовать гнутые фичи.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 13 2009, 07:37
Сообщение #56


Гуру
******

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



Цитата(Rst7 @ Mar 13 2009, 09:16) *
Вы просто не умеете готовить plain C:
plain или непереносимые расшинения гнуся?


--------------------
На любой вопрос даю любой ответ
"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
Rst7
сообщение Mar 13 2009, 07:40
Сообщение #57


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
или непереносимые расшинения гнуся?


Где Вы увидели в моем примере непереносимые расширения? wink.gif Я специально обратил внимание, что в гнусе еще проще, но непереносимо.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
vik0
сообщение Mar 13 2009, 07:41
Сообщение #58


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 27-07-08
Из: теплые края
Пользователь №: 39 233



Цитата(Rst7 @ Mar 13 2009, 09:16) *
Вы просто не умеете готовить plain C:

Умею. Но просто мне больше по вкусу С++ smile.gif
Цитата
Код
...

Как видите, все намного проще smile.gif

Согласен. Я и не утверждал что это нельзя сделать на С. Просто (лично мне) С++ вариант кажется более изящным, что ли. А оверхеда (о чем, собственно, изначально и шла речь) он не вносит.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 13 2009, 07:53
Сообщение #59


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
непереносимые расшинения гнуся?


Дабы закрыть вопрос про переносимость. Вот такое я нынче в EWAVR пользую:

Код
#pragma inline=forced
UREG __get_state_and_cli(void)
{
  UREG v=__save_interrupt();
  __disable_interrupt();
  return v;
}

#define ATOMIC_BLOCK() for(UREG __iter=0,__state=__get_state_and_cli();!__iter;__restore_interrupt(__state),__iter++)


void TestAtomic(void)
{
  ATOMIC_BLOCK()
  {
    OSCCAL++;
  }
}


Цитата(vik0 @ Mar 13 2009, 09:41) *
Умею.


Вы выбрали плохой пример для демонстрации превосходства плюсов в количестве писанины. Что заставляет усомниться в умении smile.gif


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 13 2009, 08:15
Сообщение #60


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Mar 13 2009, 11:53) *
Дабы закрыть вопрос про переносимость. Вот такое я нынче в EWAVR пользую:

Кстати, а в ИАРе return внутри for() как себя чувствует?
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 13 2009, 08:19
Сообщение #61


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
Кстати, а в ИАРе return внутри for() как себя чувствует?


В смысле внутри {}? Как обычный return. Т.е. тут он не восстановит состояние SREG. В гнусе хитрый костыль для этого есть.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Mar 13 2009, 08:20
Сообщение #62


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(_Pasha @ Mar 13 2009, 11:15) *
Кстати, а в ИАРе return внутри for() как себя чувствует?

А что с ним может стать?
Но вообще это дурной стиль.
лучше break;


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 13 2009, 08:23
Сообщение #63


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
лучше break;


Конкретно в такой критической секции, изготовленной из for, нужен continue


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 13 2009, 08:29
Сообщение #64


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Mar 13 2009, 12:19) *
тут он не восстановит состояние SREG

Ну, это понятно. При всей красоте ATOMIC_BLOCK, всегда надо помнить, из чего он сделан smile.gif

Я даже инициализацию требухи в начале main() пишу не иначе как ATOMIC_BLOCK(ATOMIC_FORCEON), с явным нежеланием отказываться от этой фичи в дальнейшем.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 13 2009, 08:33
Сообщение #65


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
всегда надо помнить, из чего он сделан


В гнусе есть специальный костыль - суть плюсовый деструктор переменной. Вот он и пользуется в гнусевом атомике. Можно из такого блока выходить чем угодно, хоть return, хоть break, хоть goto (не уверен). longjump - нельзя.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Mar 13 2009, 08:50
Сообщение #66


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Rst7 @ Mar 13 2009, 12:33) *
Можно из такого блока выходить чем угодно... хоть goto (не уверен)


Проверил - можно. smile.gif
Текст для проверки:
Код
volatile int ff;

int main (void) __attribute__((OS_main));

int main (void)
{
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
{
DDRB = 1;
if(ff) goto aaa;
PORTB=1;
}
ff += 41*DDRB;
aaa:
for(uint8_t j=0; j<3;j++)
{
ff += pgm_read_byte(&(BCD[j]));
}


return 0;
}

Листинг
CODE

00000070 <main>:

int main (void) __attribute__((OS_main));

int main (void)
{
ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
70: 2f b7 in r18, 0x3f ; 63
return 1;
}

static __inline__ uint8_t __iCliRetVal(void)
{
cli();
72: f8 94 cli
{
DDRB = 1;
74: 31 e0 ldi r19, 0x01 ; 1
76: 34 b9 out 0x04, r19 ; 4
if(ff) goto aaa;
78: 80 91 08 01 lds r24, 0x0108
7c: 90 91 09 01 lds r25, 0x0109
80: 89 2b or r24, r25
82: 09 f0 breq .+2 ; 0x86 <main+0x16>
84: 39 c0 rjmp .+114 ; 0xf8 <main+0x88>
PORTB=1;
86: 35 b9 out 0x05, r19 ; 5
(void)__s;
}

static __inline__ void __iRestore(const uint8_t *__s)
{
SREG = *__s;
88: 2f bf out 0x3f, r18 ; 63
}
ff += 41*DDRB;
8a: 80 91 08 01 lds r24, 0x0108
8e: 90 91 09 01 lds r25, 0x0109
92: 24 b1 in r18, 0x04 ; 4
94: 49 e2 ldi r20, 0x29 ; 41
96: 24 9f mul r18, r20
98: 90 01 movw r18, r0
9a: 11 24 eor r1, r1
9c: 28 0f add r18, r24
9e: 39 1f adc r19, r25
a0: 30 93 09 01 sts 0x0109, r19
a4: 20 93 08 01 sts 0x0108, r18
aaa:
for(uint8_t j=0; j<3;j++)
{
ff += pgm_read_byte(&(BCD[j]));
a8: 80 91 08 01 lds r24, 0x0108
ac: 90 91 09 01 lds r25, 0x0109
b0: e4 e3 ldi r30, 0x34 ; 52
b2: f0 e0 ldi r31, 0x00 ; 0
b4: 24 91 lpm r18, Z+
b6: 82 0f add r24, r18
b8: 91 1d adc r25, r1
ba: 90 93 09 01 sts 0x0109, r25
be: 80 93 08 01 sts 0x0108, r24
c2: 80 91 08 01 lds r24, 0x0108
c6: 90 91 09 01 lds r25, 0x0109
ca: 31 96 adiw r30, 0x01 ; 1
cc: 24 91 lpm r18, Z+
ce: 82 0f add r24, r18
d0: 91 1d adc r25, r1
d2: 90 93 09 01 sts 0x0109, r25
d6: 80 93 08 01 sts 0x0108, r24
da: 80 91 08 01 lds r24, 0x0108
de: 90 91 09 01 lds r25, 0x0109
e2: 31 96 adiw r30, 0x01 ; 1
e4: e4 91 lpm r30, Z+
e6: 8e 0f add r24, r30
e8: 91 1d adc r25, r1
ea: 90 93 09 01 sts 0x0109, r25
ee: 80 93 08 01 sts 0x0108, r24
}


return 0;
}
f2: 80 e0 ldi r24, 0x00 ; 0
f4: 90 e0 ldi r25, 0x00 ; 0
f6: 08 95 ret
f8: 2f bf out 0x3f, r18 ; 63
__asm__ volatile ("" ::: "memory");
fa: d6 cf rjmp .-84 ; 0xa8 <main+0x38>
Go to the top of the page
 
+Quote Post
Kirill24
сообщение Oct 25 2009, 11:57
Сообщение #67





Группа: Участник
Сообщений: 8
Регистрация: 11-10-09
Пользователь №: 52 859



Посоветуйте книжку для НАЧИНАЮЩЕГО(чайника)smile3046.gif по Си-программированию для микроконтроллеров. Можно на английском или немецком. Самое главное, чтобы матерьял объснялся хорошо.

Зарание всех благодарю за помощь santa2.gif

Сообщение отредактировал Kirill24 - Oct 25 2009, 12:03
Go to the top of the page
 
+Quote Post
chief_olimp
сообщение Oct 25 2009, 14:17
Сообщение #68


Местный
***

Группа: Участник
Сообщений: 249
Регистрация: 31-10-05
Из: Украина Нетешин
Пользователь №: 10 344



Шпак Ю.А.
Программирование на языке С для AVR и PIC микроконтроллеров.
МК-Пресс, Киев, 2006, 400стр. ил.
Часть 1
Часть 2
Ссылка отсюда
Неполохой help по avr-libc
Это все для среды WINAVR если речь идет про AVR. Вообще WINAVR посложнее будет чем к примеру CV, но в нем меньше закрытости кода что ли, за счет меньшего количества готовых функций. Отсюда большая гибкость но это уже совсем другой вопрос. Удачи в освоении

Сообщение отредактировал chief_olimp - Oct 25 2009, 14:22
Go to the top of the page
 
+Quote Post
kurtis
сообщение Oct 25 2009, 18:11
Сообщение #69


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Цитата
Си-программированию для микроконтроллеров

Программирование на С для МК ничем принципиально не отличается от программирования для больших ПК. Мне очень понравился Герберт Шилдт "Полный справочник по С".

Цитата
Можно на английском или немецком.

Книги ищите в торрентах. Например поищите здесь по запросу embedded.
Go to the top of the page
 
+Quote Post
smac
сообщение Oct 25 2009, 21:23
Сообщение #70


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(Kirill24 @ Oct 25 2009, 14:57) *
Посоветуйте ...

Как начинающий посоветую Кернигана и Ричи - учиться можно на ПК, а параллельно программить для МК, читая доки к выбранному компилятору.
Go to the top of the page
 
+Quote Post
arm123
сообщение Nov 9 2009, 11:41
Сообщение #71


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 22-10-09
Пользователь №: 53 141



У меня такой вопрос:
к примеру есть функция с такой конструкцией:

Код
какие-то действия
if( условие )
{
   ***
}
else
{
  ***
}


В одной ветке мне нужна для работы локальная переменная, к примеру count, а для другого не нужно. Как лучше обьявлять эту переменную?
Вот так:
Код
какие-то действия
if( условие )
{
   uint32_t count;
   ***
}
else
{
  ***
}


млм же предпочительнее все-таки так:
Код
uint32_t count;
какие-то действия
if( условие )
{
   *** (тут count используется)
}
else
{
  *** (тут count не используется)
}


Спасибо.

Сообщение отредактировал arm123 - Nov 9 2009, 11:42
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 9 2009, 11:58
Сообщение #72


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Г.Саттер, А.Александреску "Стандарты программирования на С++. 101 правило и рекомендации" :

правило 18 - Объявляйте переменные как можно локальнее. Переменных должно быть как можно меньше, а время их жизни - как можно короче.

Подробно в книге на стр. 47
Go to the top of the page
 
+Quote Post
WHALE
сообщение Nov 9 2009, 13:02
Сообщение #73


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



Дык в топике вроде речь идет о С? И если компилятор не поддерживает С99,то тогда без вариантов..


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
arm123
сообщение Nov 9 2009, 14:05
Сообщение #74


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 22-10-09
Пользователь №: 53 141



Я пользуюсь компилятором IAR. Сдесь вроде поддерживает smile.gif раз уж локально можно обьявлять где угодно
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 9 2009, 14:33
Сообщение #75


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



И не забыть про реентабельность(переносимость) кода.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 9 2009, 14:34
Сообщение #76


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(WHALE @ Nov 9 2009, 15:02) *
Дык в топике вроде речь идет о С? И если компилятор не поддерживает С99,то тогда без вариантов..
В начале блока { } можно объявлять хоть в до-ансишном K&R, у которого ещё прототипов функций не было, так что в данном случае именно
Код
if( условие )
{
   uint32_t count;
   ***
}
else
{
  ***
}
или, к примеру, так
Код
switch( aaa )
{
    case bbb:
    {
        uint32_t count;
        ***
    }
    break;
    case ccc:
    {
        float sum;
        ***
    }
    break;
}
и это должен нормально отработать любой компилятор.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
arm123
сообщение Nov 9 2009, 14:37
Сообщение #77


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 22-10-09
Пользователь №: 53 141



С точки зрения быстродействия все таки да мне кажется переменные нужно объявлять как можно локальнее... к примеру тогда максимальное число переменных будут загружаться через регистры а не через память. Прав я или нет? В чем ещё преимущества объявления переменных как можно локальнее.

Сообщение отредактировал arm123 - Nov 9 2009, 15:05
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 9 2009, 15:30
Сообщение #78


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Цитата(arm123 @ Nov 9 2009, 17:37) *
С точки зрения быстродействия все таки да мне кажется переменные нужно объявлять как можно локальнее... к примеру тогда максимальное число переменных будут загружаться через регистры а не через память. Прав я или нет? В чем ещё преимущества объявления переменных как можно локальнее.


Я привел ссылку на конкретную книгу где все по пунктам расписано. Наверное не сложно эту книгу найти и прочесть.
Go to the top of the page
 
+Quote Post
arm123
сообщение Nov 9 2009, 15:52
Сообщение #79


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 22-10-09
Пользователь №: 53 141



Цитата(sergeeff @ Nov 9 2009, 18:30) *
Я привел ссылку на конкретную книгу где все по пунктам расписано. Наверное не сложно эту книгу найти и прочесть.

Там анализ идет в первую очередь касательно удобочитаемости и большей вероятностью ошибится нежели вопрос оптимизации и быстродействия.
Go to the top of the page
 
+Quote Post
kurtis
сообщение Nov 9 2009, 16:05
Сообщение #80


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Не забудьте инициализировать переменную, т.е. должно быть как-то так
Код
какие-то действия
if (условие) {
   uint32_t count = SOME_VALUE; // какое-то нужно Вам значение
   ***
}
else {
  ***
}

У Вас тут ошибки не закралось? Я хочу сказать, что за переделами if(){} не будет существовать такой переменной как count или будет использована переменная из глобальной области видимости.
Как дальше по тексту будет использоваться переменная count?
Go to the top of the page
 
+Quote Post
arm123
сообщение Nov 9 2009, 19:41
Сообщение #81


Участник
*

Группа: Участник
Сообщений: 23
Регистрация: 22-10-09
Пользователь №: 53 141



Цитата(kurtis @ Nov 9 2009, 20:05) *
У Вас тут ошибки не закралось? Я хочу сказать, что за переделами if(){} не будет существовать такой переменной как count или будет использована переменная из глобальной области видимости.
Как дальше по тексту будет использоваться переменная count?

ну если быть точным то ситуация такая
Код
uint32_t count;
какие-то действия
if( условие )
{
   *** (тут count используется)
}
else
{
  *** (тут count не используется)
}
***
(тут count не используется)


Ну я для себя ответ понял, переменные нужно делать максимально локальнее, за исключением циклов smile.gif
Go to the top of the page
 
+Quote Post
Waso
сообщение Nov 13 2009, 15:13
Сообщение #82


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Добрый день! или не день =) ... Влеплю сюда вопрос по Си++.

Не пойму как реализовать следующую идею:
Заводим класс клавиатуры, в котором описан метод(процедура) опроса клавиатуры, которая обновляет находящуюся в этом-же классе переменную - битовую маску нажатых клавиш. (сколько клавиш-столько бит)
Код
class MtxKeypad
{
private:
  volatile KeyMapType NewKeyMap;   //  считываемая в данный момент карта клавиш
public:
  volatile KeyMapType KeyMap;       // последняя считанная карта клавиш

  // typedef Mtx_Button<1,1> Key_1;        // !! эти строки относятся к вопросу сабжа
// typedef Mtx_Button<1,2> Key_2;        // тут объявляются все кнопки и их расположение (строка,столбец)
// typedef Mtx_Button<2,1> Key_Enter;    
// typedef Mtx_Button<4,1> Key_Cancel;

  void Scan() {  // метод опроса клавиатуры
// ....
      KeyMap=NewKeyMap;
// ....
  }
};

далее заводим шаблон класса отдельной кнопки, который умеет сообщать, нажата эта кнопка или нет:
Код
template <int Col, int Row>
class Mtx_Button : public MtxKeypad
{
    //friend class MtxKeypad;    // это вот ХЗ надо тут или нет
private:
static const KeyMapType mask=(1UL<<(Row*5+Col));
public:
  inline uint8_t Pressed() {return (MtxKeypad::KeyMap & mask)!=0;}
};

И нужно использовать потом так:
Код
int main()
{
    MtxKeypad Keys;
    Mtx_Button<4,1> Key_A;
    for(;;)
    {
        Keys.Scan();
        if(MtxKeypad::Key_1::Pressed()) pin2.Toggle();  // ошибка
        if(Key_A.Pressed()) pin2.Toggle();  // работает если добавить Key_A.Scan(); но тут отдельный объект с отдельными переменными - неправильно
    }
}

Так вот ВНИМАНИЕ ВОПРОС: как правильно описать классы, если мне надо чтоб дочерние объекты не копировали родительский метод и переменные, а пользовались ими, влияли на них.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 13 2009, 22:34
Сообщение #83


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Наследовать кнопку от клавиатуры - это, имхо, переборsmile.gif Достаточно хранить в кнопке ссылку на клавиатуру.
Типа так:
Код
// шаблон кнопки
template<int row, int col, typename matrix>
class button
{
private:
    matrix& m_;  // ссылка на клавиатуру
public:
    button(matrix& M): m_(M) {}
    bool pressed() { return m_.keymap & (row*5+col); }
};

// класс клавиатуры
class kbd
{
public:
    button<0, 0, kbd> Enter(this);
    void Scan();
}

void main()
{
    kbd Kbd;
    Kbd.Scan();
    if (Kbd.Enter.presed())
    {
    }
}


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 13 2009, 22:40
Сообщение #84


Гуру
******

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



Цитата(Waso @ Nov 13 2009, 17:13) *
чтоб дочерние объекты не копировали родительский метод и переменные, а пользовались ими, влияли на них.
Делать такие функции-члены и переменные родителя статическими. Если родитель может существовать более чем в одном экземпляре - надо вместо наследования использовать указатель или ссылку. Т.е. кнопка живет отдельным объектом и в конструкторе получает ссылку или указатель на клавиатуру. Или кнопка является членом класса клавиатуры, и для доступа к клавиатуре получает ссылку или указатель в конструкторе.


--------------------
На любой вопрос даю любой ответ
"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
Waso
сообщение Nov 15 2009, 10:34
Сообщение #85


Местный
***

Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470



Хорошо, но тогда эти ссылки будут храниться в ОЗУ, а ето непозволительный оверхед! Если даже в классе кнопки ссылку обьявить как константу и задавать в конструкторе, компилятор всеравно ее пихает в ОЗУ.. sad.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 15 2009, 18:14
Сообщение #86


Гуру
******

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



Цитата(Waso @ Nov 15 2009, 12:34) *
Если даже в классе кнопки ссылку обьявить как константу и задавать в конструкторе, компилятор всеравно ее пихает в ОЗУ.. sad.gif
А что ему еще делать? Если клавиатура одна - делайте ее члены и функции-члены статическими в базовом классе. Если клавиатур у вас несколько - кнопка должна знать, к какой имеено обращаться. Значит, ей нужна переменная для хранения указателя или ссылки. Даже если этот указатель компилятор расположит во флеше (и таких указателей несколько, ведь клавиатур тоже несколько) - ему надо как-то эти указатели различать, значит он вынужден будет хранить в кнопке какие-то данные, позволяющие выбрать нужный указатель.


--------------------
На любой вопрос даю любой ответ
"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
kurtis
сообщение Nov 17 2009, 22:33
Сообщение #87


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Встретил в исходниках такую вот конструкцию
Код
#define putnstr(str,n)  do {            \
        printf ("%.*s", n, str);    \
    } while (0)

Почему использован цикл do-while ведь все-равно printf() один раз будет вызвано, как с ним, так и без него?
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 18 2009, 07:39
Сообщение #88


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(kurtis @ Nov 18 2009, 01:33) *
Встретил в исходниках такую вот конструкцию
Код
#define putnstr(str,n)  do {            \
         printf ("%.*s", n, str);    \
     } while (0)

Почему использован цикл do-while ведь все-равно printf() один раз будет вызвано, как с ним, так и без него?
Такая конструкция применяется если в теле макроса более одной операции (в данном случае эта конструкция излишняя). Пример:
Код
#define func(a) do { aa(a); bb(a); } while(0)
#define func2(a) { aa(a); bb(a); }

if (some) func(a); else blablabla(a); // Ok
if (some) func2(a); else blablabla(a); // Syntax error
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 18 2009, 14:51
Сообщение #89


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Код
do { aa(a); bb(a); } while(0)

Уже обсуждалось, поиск в помощь, сообщение от Сергея Борща было.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 18 2009, 15:39
Сообщение #90


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата
if (some) func2(a); else blablabla(a); // Syntax error

Разве? Почему?
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 18 2009, 15:45
Сообщение #91


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Herz @ Nov 18 2009, 17:39) *
Разве? Почему?


Код
if (1)
{
};
else
{
}

потому что - Syntax error near 'else'. ";" после закрывющей скобки это уже второй оператор (пустой оператор), а else получается как сам по себе.
верхнее равносильно такому:
Код
if(1)
{
   foo1();
}
foo2();
else
{
}
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 18 2009, 15:59
Сообщение #92


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Herz @ Nov 18 2009, 20:39) *
Разве? Почему?
Потому, что между if и else знак ";" (точка с запятой) встречается.
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 18 2009, 20:26
Сообщение #93


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(rezident @ Nov 18 2009, 17:59) *
Потому, что между if и else знак ";" (точка с запятой) встречается.


Хм, ну так не ставить его и всё. laughing.gif Оно, может, на читабельность как-то повлияет... По-моему, даже положительно. Понятно станет, что макрос.
Go to the top of the page
 
+Quote Post
XVR
сообщение Nov 19 2009, 07:52
Сообщение #94


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Herz @ Nov 18 2009, 23:26) *
Хм, ну так не ставить его и всё. laughing.gif Оно, может, на читабельность как-то повлияет... По-моему, даже положительно. Понятно станет, что макрос.
Понятно станет, если БУДЕТ известно, что макрос. А если нет, то понятно станет, что ';' забыли поставить crying.gif
Go to the top of the page
 
+Quote Post
Herz
сообщение Nov 19 2009, 08:18
Сообщение #95


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Цитата(XVR @ Nov 19 2009, 09:52) *
Понятно станет, если БУДЕТ известно, что макрос. А если нет, то понятно станет, что ';' забыли поставить crying.gif


Если забыли, компилятор такого точно не пропустит.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2009, 09:38
Сообщение #96


Гуру
******

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



Цитата(Herz @ Nov 19 2009, 10:18) *
Если забыли, компилятор такого точно не пропустит.
Потом по каким-то причинам вы захотите заменить макрос на честную функцию и будете перелопачивать всю программу, исправляя непонятно откуда появившиеся ошибки? Не проще ли сразу написать в макросе do {} while(0) ?


--------------------
На любой вопрос даю любой ответ
"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
baralgin
сообщение Nov 19 2009, 20:47
Сообщение #97


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Цитата(Сергей Борщ @ Nov 19 2009, 11:38) *
Потом по каким-то причинам вы захотите заменить макрос на честную функцию и будете перелопачивать всю программу...

А почему сразу функции не писать? В смысле бывают ситуации когда без них не обойтись? ("инлайнизация" не в счёт, т.к. обычно легко решается этот вопрос).
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 19 2009, 23:53
Сообщение #98


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(baralgin @ Nov 19 2009, 22:47) *
В смысле бывают ситуации когда без них не обойтись?

Даже когда включена максимальная оптимизация и inline функция действительно инлайнится, все равно на практике встречаются ситуации когда макросы дают более эффективный код.

Бывают еще такие ситуации:

file1.h:
Код
#include "file2.h"

typedef struct
{
   ...
   ..
   .
   some_file2_enum_type field_n;
   ..
} some_complex_struct_t;

А в file2.h ну очень хочется объявить функцию которая работает с field_n из file1.h, а подключить file1 низя. Макрос спасает.


Или вот конкретная ситуация, хотим чтобы string литерал не занимал RAM впустую.
Go to the top of the page
 
+Quote Post
baralgin
сообщение Nov 20 2009, 10:02
Сообщение #99


Частый гость
**

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Цитата(defunct @ Nov 20 2009, 01:53) *
Даже когда включена максимальная оптимизация и inline функция действительно инлайнится, все равно на практике встречаются ситуации когда макросы дают более эффективный код.

Только что столкнулся как раз с таким. Keil (-O3, Otime ) отказался инлайнить очевидную функцию(static), даже __INLINE в этом случае не воспринял crying.gif , хотя в других местах за ним такого не замечал(постоянно слежу за получаемым кодом). Видимо решил сэкономить, т.к. подряд 10 "вызовов". В итоге "макросный" вариант выполняется в два раза быстрее...

В предложенном первом примере, нельзя разве в функцию передать указатель(или ссылку) на поле? Хотя как поведет себя компилятор в таком случае конечно же вопрос, да и не очень эстетично выходит в целом. Примерно понятно в общем.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:10
Рейтинг@Mail.ru


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