|
выбор программирования |
|
|
|
May 21 2007, 14:08
|

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

|
Цитата(WHALE @ May 21 2007, 16:46)  А в С как-то стандартизирована раздельная компиляция? Вообще-то да. Из нее вытекают хотя бы такие ключевые слова как extern и static (применительно к глобальным переменным). Цитата 5.1.1.1 Program structure 1 A C program need not all be translated at the same time. The text of the program is kept in units called source files, (or preprocessing files) in this International Standard. A source file together with all the headers and source files included via the preprocessing directive #include is known as a preprocessing translation unit. After preprocessing, a preprocessing translation unit is called a translation unit. Previously translated translation units may be preserved individually or in libraries. The separate translation units of a program communicate by (for example) calls to functions whose identifiers have external linkage, manipulation of objects whose identifiers have external linkage, or manipulation of data files. Translation units may be separately translated and then later linked to produce an executable program. Forward references: linkages of identifiers (6.2.2), external definitions (6.9), preprocessing directives(6.10).
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2007, 14:49
|

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

|
2 Сергей Борщ Ну со static и extern в CV все в порядке и стандарту соответствует. 2 IgorKossak Хм,ну при компиляции многофайловых проектов error он в конкретных файлах вы- дает и с указанием строки исходника.Так-что и тут мимо. А насчет прекомпилированных библиотек я,чесговоря,не в курсе,в чем их преимущество Не подскажете?
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
May 21 2007, 15:24
|

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

|
Цитата(WHALE @ May 21 2007, 16:49)  Хм,ну при компиляции многофайловых проектов error он в конкретных файлах вы- дает и с указанием строки исходника.Так-что и тут мимо. Не мимо. Представьте что у вас исходников на 10 минут компиляции. Вы меняете один файл и что? ждать ~10 минут пока все перекомилируется? А если вы допустили ошибку напр. забыли ";". То ждать еще ~10 минут? уже 20.. А так перекомпилируется лишь только этот измененный файл и все. На лицо экономия Ваших 10-ти (20-ти) минут времени. 2 WHALE: Ой, кажись я мимо кассы ;> думал вы о раздельной компиляции говорили, а Вы о CV.. С CV я не работал, и спорить-то с вами не могу. Можете просто проигнорировать мой пост.
|
|
|
|
|
May 21 2007, 15:44
|

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

|
Цитата(WHALE @ May 21 2007, 17:49)  2 Сергей Борщ Ну со static и extern в CV все в порядке и стандарту соответствует. Глубоко его не копал, но судя по тому, что перед компиляцией идет вставка всех файлов в main.c, то как он отреагирует на такие ситуации: 1)Есть uart.c и adc.c. В каждом из этих файлов объявлено по статическому массиву: static uint8_t Buffer[16] и static uint8_t Buffer[8]. При раздельной компиляции это два совершенно разных массива, каждый из которых "виден" только в пределах своего файла. Что будет в CV? 2)В adc.c и uart.c объявлено два одинаковых uint8_t Counter. В случае раздельной компиляции получаем сообщение об ошибке на стадии линковки. В CV, как я понимаю, получаем сообщение о двойном определнии переменной. Вроде все красиво ибо в обоих случаях ошибка. Теперь представим, что в одном из файлов эту переменную забыли объявить. При раздельной компиляции всегда получаем сообщение об ошибке. В CV, судя по тому что он "сшивает" файлы в алфавитном порядке, получаем: если забыли объявить в adc.c - сообщение об ошибке, а если забыли определить в uart.c - вместо сообщения об ошибке получаем молчаливое использование Counter из adc.c, а это уже криминал. Я правильно понял механизм?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 21 2007, 15:49
|

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

|
defunct Да нет,в данном случае как-раз в точку,отдельный файл в CV запустить на компиляцию нельзя,так что тут обстоит именно так,как вы описали. Но 10 минут?Наверно,я никогда не работал с по- настоящему большими проектами  2 Сергей Борщ Вы,наверно,с какой-то очень старой версией дело имели Сейчас дело обстоит именно так,как вы и описали-массив,обьявленный в одном файле,не виден в другом без обьявления его в нем как extern. И в случае обьявления двух одинаковых массивов(переменных) в разных файлах будет ошибка линкера.
--------------------
"Hello, word!" - 17 errors 56 warnings
|
|
|
|
|
May 21 2007, 15:51
|

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

|
Цитата(defunct @ May 21 2007, 18:24)  2 WHALE: Ой, кажись я мимо кассы ;> думал вы о раздельной компиляции говорили, а Вы о CV.. С CV я не работал, и спорить-то с вами не могу. Можете просто проигнорировать мой пост. Нет, не мимо. Я смотрел CV год назад, а сейчас специально скачал доку и убедился, что технология не изменилась, и все происходит именно как вы и предположили - малейшее исправление и компилится весь проект целиком. WHALE - только ради бога не принимайте мои объяснения как наезд на компилятор. Возможно благодаря своему визарду он очень неплох для самодельшиков-любителей, для которых самое главное - чтобы конструкция заработала. Но эта простота создания несложных устройств оборачивается недостатком, когда приходится делать что-то более сложное, выходящее за рамки визардов или сменить компилятор на "настоящий" и упереться в проблемы на ровном, как казалось раньше, месте. Мне приходилось делать маленький демо-проект в CV примерно год назад, чтобы показать заказчику как на CV писать прогу для нашей железки, в которой в области загрузчика уже "вшиты" некоторые функции. Они довольно долго использовали CV, творили на нем довольно большие проекты. Но тут малейшая "нестандартность" ставила их в тупик. Отсутствие этапа линковки меня тогда сильно "подкосило". Вывернулся, но пришлось кроме документации изучить еще исходники его библиотек на предмет неописанных в доке прагм, использовать асм-вставки, в общем бррр. Например, требовалось простейшую функцию разместить в опреденных адресах (ее по этому адресу вызывает код, работающий в области загрузчика). В "правильном" компиляторе я бы завел свой сегмент, указал положить код функции в этот сегмент, а линкеру указал бы в какие адреса этот сегмент разместить. А вот что получилось в CV: Код #asm .CSEG Magic: ;****Store current address location .org INC_PTR INC R16 CPI R16,Tx_BufferSize BRNE NotOverwrap CLR R16 NotOverwrap: RET
.org Magic ;****Restore address location #endasm
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 22 2007, 10:24
|

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

|
Цитата(WHALE @ May 21 2007, 18:06)  Если вспомнить тему топика,от которой мы довольно далеко ушли,то речь шла именно о qwick start на С для AVR.И CV позволяет это сделать с наименьшими затратами. "CV не читал, но..." :-) Собственно, мне его "преимущества" начисто не нужны, к "традиционному" пути компиляции-линковки привык очень давно, т.е. он мне точно ничего не ускорил бы. Но свои 5 копеек для тех, кто такого опыта не имеет, вставлю. Очень настороженно отношусь к заявлениям о том, что то-то и то-то позволяет "очень быстро стартовать". Очень часто этот быстрый старт идёт за счёт некоторых, зачастую не нужных, абстракций (читать про дырявые абстракции), в результате чего чуть только дошёл до какой-то черты, нарвался на прореху в абстракции - движение резко замедляется и в итоге "быстрый старт" приводит к "медленному движению". Кроме того - "быстрый в освоении" инструмент дааалеко не всегда "удобный в работе", в какой-то статье (читал очень давно, кажется, Виктор Вагнер про "дружественные интерфейсы") был хороший пример про карандаш - его "интерфейсу" люди учатся в детстве несколько лет, но зато этим инструментом можно сделать столько и такого! Так что лучше потратить немного времени и освоить более мощный инструмент. Тем более, что, на самом деле, не так и сложно "стартовать по-минимуму" в том же IAR-е или в связке AVRstudio + WinAVR. Но зато помом можно будет потихоньку доразбираться, а не попасть в колею, из которой выбраться можно только со значительными усилиями и потратив гораздо больше времени.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
May 22 2007, 11:30
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
И я от себя чуть-чуть добавлю. 1) Начал изучать Си года два назад. Почитал - выбрал IAR. По отзывам. Ну с неделю чтобы въехать вообще, а теперь уже никакого дискомфорта не чувствую. У меня уже свой xcl файл и свои настройки все и первые библиотеки появились. Так что разговор о какой-то сложности - просто разговор. Надо банально отбросить лень и засучить рукова - и всё получится. 2) Очень часто, говоря о преимуществах говорят о наличии встроенных библиотек для различной переферии. Например для HD44780. Так вот моё мнение - это не достоинство, а недостаток для начинающих программистов. Так эту библиотеку написать - неделя работы максимум, зато она будет сделана именно так, как надо вам, а не абстрактно. В любой момент её можно модифицировать, развить, встроить куда-то. И, главное, вы будете понимать что к чему. А то мне тут пишут люди, и спрашивают примитивные вещи. И трудно объяснить. Я то понимаю как библиотека CV работает, - одного взгляда было достаточно, а он не понимает как ему подстроить схему под библиотеку. Кому такие знания нужны?!!
Но с другой стороны, Вы должны определится сами. Может вам это надо на пол-года, а потом вы будете музыкой заниматься, тогда можно на что угодно. А если на длительный период и для сложных проектов, то надо серьёзно подойти и сравнить характеристики.
|
|
|
|
|
May 22 2007, 16:14
|

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

|
Цитата(SasaVitebsk @ May 22 2007, 14:30)  Но с другой стороны, Вы должны определится сами. Может вам это надо на пол-года, а потом вы будете музыкой заниматься, тогда можно на что угодно. Какие там постройки оказываются самыми долговечными? ;-) А музыкой тоже так - "нарисуйте мне, в каком порядке струны нажимать, а то с нотами разбираться неохота, вдруг я через пол-года начну автомобили ремонтировать"? ;-) Даже если на пол-года планировать - и три недели можна потратить на более приличный инструмент, оно окупится временем же. Полуоффтоп: как-то с братом вешали одну лампу... Так вышло, что незадолго перед этим оба толи Урсулу Ле Гуин читали, толи ещё кого-то в этом духе. В процессе работы родилось Закрепляющее заклятие: Для того, чтобы продолжить действие сотворяющего заклятия после его совершения следует стать лицом к сотворённому, поднять обе руки вверх и в стороны и устало, но твёрдо произнести "Пусть временно побудет так!"
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|