Ru-Board.club
← Вернуться в раздел «Программы»

» Keil uVision

Автор: ddddF
Дата сообщения: 30.04.2007 17:07

Цитата:
Ну почему же? И чем это принципиально отличается от использования ассемблерных вставок, тем более в предложенном тобой ниже варианте, когда компилятор генерирует только заголовок функции?

Принципивально отличие в том, что в варианте asm {} просто пишется код функции на ассемблере и все. А если писать в отдельном модуле, то необходимы (например):

NAME MODASM ; Name of the program module
?PR?FUNCASM?MODASM SEGMENT CODE     ; Seg for program code in 'functions'
PUBLIC "имена функций и проч"
RSEG ?PR?FUNCASM?MODASM    ; Program segment

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

Автор: PapaKarlo
Дата сообщения: 30.04.2007 18:31
ddddF

Цитата:
А если писать в отдельном модуле, то необходимы (например):

А если еще и инструкции кодировать , то надо писать что-то типа mov DPTR,#Array и т.п. тогда как при кодировании на "с" требуется в N>>1 раз меньше строк, хотя и там придется объявить extern void ExampleFunc(char data1, char data2, char* addres) и включать это объявление во все модули, использующие ExampleFunc, хотя и не надо писать RSEG, а еще не надо писать END в конце файла, а с другой стороны... Треп, конечно Любое решение имеет свои преимущества и недостатки.


Цитата:
о правилах, по которым компилятор располагает передаваемые параметры в функциях
Ответил ли я на вопрос, или надо более подробно? Если да, пиши в ПМ. И успехов!

Автор: PapaKarlo
Дата сообщения: 30.04.2007 22:31
Evgeny972

Цитата:
1. создаешь новую Multi-Project Workspace: Project:New:Multi-Project Workspace

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

ddddF

Цитата:
написал макроассемблер

Респект! Я же интенсивно использую встроенный в А51 макроассемблер, причем (по историческим причинам) стандартный, а не MPL, который помощнее будет. Переходить на MPL опять же "мешают" многолетние наработки. И, честно говоря, мне очень не хватает возможностей макроассемблера в препроцессоре "С" Но с завистью вспоминаю (хоть и смутно) о мощи макроассемблера для IBM 360.
Вообще, я стараюсь по максимуму использовать возможности существующих инструментальных средств, будь то макроассемблер или интерпретатор командной строки (например, для сборки multi-target проекта, использующего мои библиотеки, требующие перетрансляции, написал систему командных файлов).

А теперь, благодаря любезной помощи Evgeny972, буду изучать возможности multi-project workspace.

Что уже заметил - реализация сыровата. Начиная с того, что хотя активный workspace соответствует файлу, в дереве имя файла/workspace не отображается - просто "workspace" и все тут. Можно сказать, что придирка, но с моей точки зрения - признак "необъектного" подхода.

Нет отметки активного проекта (впрочем, виден в шапке окна).

Интересная возможность - Batch Build, но, хотя можно выбрать именно target'ы для построения, список может быть единственным, т.е. привязанным ко всему workspace. Интереснее было бы иметь варианты. Ведь если есть возможность выбора, значит, предполагается наличие вариантов, а каждый раз задавать их вручную неудобно.

В общем, мне как мед, так уже и ложкой
Автор: ddddF
Дата сообщения: 30.04.2007 19:44

Цитата:
Ответил ли я на вопрос, или надо более подробно?

Да, спасибо! Я смотрел файл с51.chm - там это описано.

Цитата:
А если еще и инструкции кодировать

Вообщем-то, частично, я так и делал: написал макроассемблер который позволял писать:
R7 = 4, DPTR++, и т.д. В результате имел краткость, похожую на си и эффективность ассемблера.
Кстати, ассемблер для ADSP от Analog Devices тоже такое позволяет.
Вообщем, хотя мы и нафлудили тут маленько, но тема все-таки ожила. Надеюсь на ее продолжение .
Автор: ddddF
Дата сообщения: 01.05.2007 09:03
Evgeny972

Цитата:
У меня версия 3.51 (С51 8.08а),

А такой вопрос: есть улучшения в этой версии от 8.06? (Имею ввиду: исправления, устойчивость работы). Или только расширен список поддерживаемых процессоров?
Стоит ли ставить эту версию?

PapaKarlo

Цитата:
Но с завистью вспоминаю (хоть и смутно) о мощи макроассемблера

Вот-вот: я тоже думаю, что хороший макроассемблер = эффективный и компактный код.



Автор: Evgeny972
Дата сообщения: 30.04.2007 21:02
А почему нафлудили? Для этого она (тема) и создана.
PapaKarlo
Цитата:
Все, конечно, просто. Но команда Project:Manage:Multi-Project Workspace в меню деактивирована.


У меня версия 3.51 (С51 8.08а), но думаю это суть дела не меняет:
1. создаешь новую Multi-Project Workspace: Project:New:Multi-Project Workspace
Сохраняешь ее (я сделал Examples.mpw в папке C:\Keil\C51\Examples)
2. Открывается окно Create New Multi-Project Workspace
3. Доавляешь в нем СУЩЕСТВУЮЩИЕ проекты (я взял проекты из папки см. выше).
4. Все

Добавлено:
Открываешь полученную Multi-Project Workspace той же командой Project: Open, только смени в окне открытия Files of type на Multi Project Workspace
Автор: Evgeny972
Дата сообщения: 01.05.2007 10:18
ddddF PapaKarlo

Цитата:
хороший макроассемблер = эффективный и компактный код

Категорически поддерживаю. Я начинал с Intel-овских средств для 8051/80/86/286.
И еще, я с тоской вспоминаю язык PL/M. Развитие С извратило первоначальный концепт этого языка:
1. В С-модуле максимум 22 строки (дисплеи имели стандартно 24 строки: 2 - служебная область редактора, 22 - область текста). Первые компиляторы С не генерировали файл листинга по определению!
2. В основном, выходом компилятора был ассемблерный код, который анализировался и (при необходимости) оптимизировался вручную.
ddddF
Цитата:
А такой вопрос: есть улучшения в этой версии от 8.06?
Ответ с оффсайта
Цитата:
What's New in C51 Version 8.08a
[µVision3 IDE/Debugger/Simulator]
Corrected a problem that caused a delay when starting signal functions. This delay has been removed and the startup behavior is identical to releases prior to version 8.06.
[µVision3 IDE/Debugger/Simulator]
Corrected a problem with JBC instructions with regards to I/O ports. JBC instructions now read the SFR register (Px) instead of the I/O port value (PORTx).
[µVision3 IDE/Debugger/Simulator]
Corrected a problem that could cause the IDE to crash when the mouse was right-clicked in the project window when no item was selected.
[µVision3 IDE/Debugger/Simulator]
Added peripheral display dialogs for Port 4 and Port 5 of the NXP 89LPC952.
[µVision3 IDE/Debugger/Simulator]
Added a new debugging options for Infineon XC800 devices. Under Project — Options — Debug — ULINK Settings, Disable interrupts during steps has been implemented. This option disables interrupts during single-stepping which has the effect of executing instructions only from the current function.
[µVision3 IDE/Debugger/Simulator]
Added support for Infineon TLE78xx devices.
[µVision3 IDE/Debugger/Simulator]
Corrected problems with simulating the external interrupt inputs EINT0 and EINT1 on Infineon XC800 devices.
[µVision3 IDE/Debugger/Simulator]
Corrected debugger startup problems with the Infineon DAS server.
[Cx51 Compiler]
Corrected a problem that neglected to perform integer promotion on complex arithmetic with char/unsigned char and multiplication or division.
[AX51 Macro Assembler]
Added definition for the _DATE2_ macro for the A51 and AX51 Macro Assemblers.
Автор: PapaKarlo
Дата сообщения: 30.04.2007 22:31
Evgeny972

Цитата:
1. создаешь новую Multi-Project Workspace: Project:New:Multi-Project Workspace

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

ddddF

Цитата:
написал макроассемблер

Респект! Я же интенсивно использую встроенный в А51 макроассемблер, причем (по историческим причинам) стандартный, а не MPL, который помощнее будет. Переходить на MPL опять же "мешают" многолетние наработки. И, честно говоря, мне очень не хватает возможностей макроассемблера в препроцессоре "С" Но с завистью вспоминаю (хоть и смутно) о мощи макроассемблера для IBM 360.
Вообще, я стараюсь по максимуму использовать возможности существующих инструментальных средств, будь то макроассемблер или интерпретатор командной строки (например, для сборки multi-target проекта, использующего мои библиотеки, требующие перетрансляции, написал систему командных файлов).

А теперь, благодаря любезной помощи Evgeny972, буду изучать возможности multi-project workspace.

Что уже заметил - реализация сыровата. Начиная с того, что хотя активный workspace соответствует файлу, в дереве имя файла/workspace не отображается - просто "workspace" и все тут. Можно сказать, что придирка, но с моей точки зрения - признак "необъектного" подхода.

Нет отметки активного проекта (впрочем, виден в шапке окна).

Интересная возможность - Batch Build, но, хотя можно выбрать именно target'ы для построения, список может быть единственным, т.е. привязанным ко всему workspace. Интереснее было бы иметь варианты. Ведь если есть возможность выбора, значит, предполагается наличие вариантов, а каждый раз задавать их вручную неудобно.

В общем, мне как мед, так уже и ложкой
Автор: ddddF
Дата сообщения: 01.05.2007 11:34
Evgeny972

Цитата:
Ответ с оффсайта
Цитата:What's New in C51

Спасибо! Список исправлений солидный, впечатляет.
Ну, а субьективные ощущения?
Автор: ddddF
Дата сообщения: 01.05.2007 09:03
Evgeny972

Цитата:
У меня версия 3.51 (С51 8.08а),

А такой вопрос: есть улучшения в этой версии от 8.06? (Имею ввиду: исправления, устойчивость работы). Или только расширен список поддерживаемых процессоров?
Стоит ли ставить эту версию?

PapaKarlo

Цитата:
Но с завистью вспоминаю (хоть и смутно) о мощи макроассемблера

Вот-вот: я тоже думаю, что хороший макроассемблер = эффективный и компактный код.



Автор: PapaKarlo
Дата сообщения: 01.05.2007 21:58
ddddF

Цитата:
Список исправлений солидный, впечатляет.
Ну, а субьективные ощущения?
Как для меня, то, поскольку я симулятором пользуюсь редко, а комплексной арифметикой вообще не пользуюсь, интерес представляет разве что макро __DATE2__ (сейчас использую __DATE__ для получения компонент текущей даты в численном виде, приходится имя месяца в число превращать). Иными словами, для меня лично заявленные изменения значения не имеют. Да и субъективные ощущения - все то же, что и раньше.

Evgeny972

Цитата:
И еще, я с тоской вспоминаю язык PL/M. Развитие С извратило первоначальный концепт этого языка
PL/M никогда не использовал, в отличие от PL/1 (не для микропроцессоров, конечно). Не совсем понял, в каком смысле развитие C могло извратить PL/M - по моим представлениям последний был разработан как развитие PL/1 для МП, тогда как язык C изначально проектировался как переносимый язык высокого уровня, позволяющий добиться эффективной реализации практически на любой платформе от МП до суперкомпьютеров. Т.е. исходные пункты были несколько различными.
Также не понял, какое влияние на концепцию языка оказывали дисплеи? С-модуль - это одна функция? Ну, а возможности конкретных компиляторов по генерации результатов определяются чаще всего разработчиком компилятора, а не языка.
Автор: Evgeny972
Дата сообщения: 01.05.2007 10:18
ddddF PapaKarlo

Цитата:
хороший макроассемблер = эффективный и компактный код

Категорически поддерживаю. Я начинал с Intel-овских средств для 8051/80/86/286.
И еще, я с тоской вспоминаю язык PL/M. Развитие С извратило первоначальный концепт этого языка:
1. В С-модуле максимум 22 строки (дисплеи имели стандартно 24 строки: 2 - служебная область редактора, 22 - область текста). Первые компиляторы С не генерировали файл листинга по определению!
2. В основном, выходом компилятора был ассемблерный код, который анализировался и (при необходимости) оптимизировался вручную.
ddddF
Цитата:
А такой вопрос: есть улучшения в этой версии от 8.06?
Ответ с оффсайта
Цитата:
What's New in C51 Version 8.08a
[µVision3 IDE/Debugger/Simulator]
Corrected a problem that caused a delay when starting signal functions. This delay has been removed and the startup behavior is identical to releases prior to version 8.06.
[µVision3 IDE/Debugger/Simulator]
Corrected a problem with JBC instructions with regards to I/O ports. JBC instructions now read the SFR register (Px) instead of the I/O port value (PORTx).
[µVision3 IDE/Debugger/Simulator]
Corrected a problem that could cause the IDE to crash when the mouse was right-clicked in the project window when no item was selected.
[µVision3 IDE/Debugger/Simulator]
Added peripheral display dialogs for Port 4 and Port 5 of the NXP 89LPC952.
[µVision3 IDE/Debugger/Simulator]
Added a new debugging options for Infineon XC800 devices. Under Project — Options — Debug — ULINK Settings, Disable interrupts during steps has been implemented. This option disables interrupts during single-stepping which has the effect of executing instructions only from the current function.
[µVision3 IDE/Debugger/Simulator]
Added support for Infineon TLE78xx devices.
[µVision3 IDE/Debugger/Simulator]
Corrected problems with simulating the external interrupt inputs EINT0 and EINT1 on Infineon XC800 devices.
[µVision3 IDE/Debugger/Simulator]
Corrected debugger startup problems with the Infineon DAS server.
[Cx51 Compiler]
Corrected a problem that neglected to perform integer promotion on complex arithmetic with char/unsigned char and multiplication or division.
[AX51 Macro Assembler]
Added definition for the _DATE2_ macro for the A51 and AX51 Macro Assemblers.
Автор: Evgeny972
Дата сообщения: 03.05.2007 10:29
PapaKarlo
Развитие С не извратило PL/M а убило его. PL/M был язык среднего уровня для микроконтроллеров Intel - это их детище. Он никогда не был развитием PL/1, а специально заточен под архитектуру Intel. Все Intel-овские операционки (ISIS , iRMX) были написаны на PL/M + macroAssembler.
Цитата:
Также не понял, какое влияние на концепцию языка оказывали дисплеи? С-модуль - это одна функция?
Имено так: первоначальная концепция С в этом и состояла. И первые компиляторы С генерировали ассеблерный код, который уже потом обрабатывался ассемлером, т.е. первоначально это был более продвинутый макропрочессор.
Автор: ddddF
Дата сообщения: 01.05.2007 11:34
Evgeny972

Цитата:
Ответ с оффсайта
Цитата:What's New in C51

Спасибо! Список исправлений солидный, впечатляет.
Ну, а субьективные ощущения?
Автор: PapaKarlo
Дата сообщения: 03.05.2007 20:34
Evgeny972

Цитата:
PL/M был язык среднего уровня для микроконтроллеров Intel - это их детище. Он никогда не был развитием PL/1

Конечно, термин "развитие" применен мной крайне неудачно - идея, что язык, спроектированный для разработки программ для 32-разрядного компьютера с мощной системой команд и мегабайтными ресурсами памяти, получил бы "дальнейшее развитие" в расчете на создание программ под четырехбитный ЦПУ с набором из 45 команд , никогда не посещала мою голову. Но все же

Цитата:
Гэри Килдалл ... эмулировал чип Intel 4004 на машине IBM-360, после чего разработал язык программирования PL/M (Programming Language / Microprocessor - "язык программирования для микропроцессора"). За основу был взят PL/I - основной язык программирования для IBM-360.
Хотя я, повторюсь, PL/M никогда не использовал (в отличие от PL/1), но имел возможность сравнить синтаксис языков, так что приведенная мной выше цитата у меня сомнений не вызывает.

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

то тут я позволю себе высказать определенные сомнения. Язык С был разработан не для микропроцессоров, но для PDP-11 (более того, по некоторым сведениям Ритчи и (вот фамилию второго не припомню) разрабатывали переносимый язык программирования для поддержки другой своей разработки - UNIX, хотя в этом я могу ошибаться. Кроме того, реализация конкретного компилятора и концепция языка - это, как говорят в Одессе, две большие разницы. Понятие же модуля в языке С, если я не ошибаюсь, четко не выражено. (Да и вообще, модуль - это скорее сущность, используемая компоновщиком/библиотекарем, а компиляторы и ассемблеры только поддерживают их, создавая модули из исходных текстов). Может быть, в первоначальных версиях под модулем подразумевался файл (или другая единица хранения исходного текста, "скармливаемая" компилятору), и накладывалось ограничение, что файл мог содержать лишь одну функцию (это - всего лишь мое предположние)? Если так, то я сомневаюсь, что среда программирования с такими в ее основу положенными концепциями могла просуществовать достаточно долго, чтобы "убить" конкурирующую.

О реализации, при которой компилятор только генерирует ассемблерный текст: не сомневаюсь, что такая реализация в определенных условиях может быть оптимальным (промежуточным) решением. Но тут такой вот вопросик: если компилятор достаточно примитивен в вопросах генерации результата, то насколько сложно перевести генерируемый им текст на языке ассемблера, т.е на машинно-ориентированном языке, в собственно машинно-ориентированный объектный код? И в чем может заключаться порочность внутреннего, прозрачного для пользователя использования ассемблера для генерации ассемблерного кода? Ну, а если кто-то когда-то разработал среду программирования, в которой бедный программист должен был вручную заправлять перфоленточку с ассемблерным текстом в считывающее устройство, то надо не забывать о том, что программисты первых компьютеров сообщали свои программные идеи электронному мозгу путем соединения контактов на лицевой панели специальными перемычками и были счастливы

У защиты вопрос к обвинению: чем именно обвиняемый (язык С) нанес смертельное ранение пострадавшему (языку PL/M)? Не сочти за ехидство, просто интересна твоя точка зрения.

По поводу 22 строк в функции (чтобы все сразу было видно на экране). В эпоху развития языков и методологии программирования было очень модным (и зачастую небесполезным) обсуждать стиль программирования (я бы сказал, кодирования, или еще точнее - оформления текста программы). Безусловно, намучавшись с конструкциями типа "IF(A451**SQRT(FUNC(357E-5*XYZ896))) 1,2,3456", светлые умы того времени призывали к такой записи программ, чтобы ее мог понять не только компилятор, но и автор спустя месяц после завершения своего титанического труда. Одной из идей была та, что продуманное разбиение программ на модули должно дать процедуры текстуально такого размера, чтобы их можно было охватить взглядом и, соответственно, проследить логику, не листая лихорадочно N страниц бумаги и уж тем более экрана (листы бумаги можно все же положить рядом, а рулон распечатки развернуть в длинном корридоре ). Но все же к концепции конкретного языка это имеет приблизительно такое же отношение, как гарнитура, которой напечатана Библия, к вести о спасении

И, наконец, к вопросу, "кто убил PL/M" Аналогичный вопрос можно задать по отношению к DR-DOS и GEM (другим детищам Гэри Килдалла), по отношению к языку Ада (или Пентагон все еще поддерживает его использование?), к компьютерным и системным архитектурам, вышедшим из недр DEC. И почему все мы до сих пор пользуемся этими немного повзрослевшими, но все же примитивными калькуляторными процессорами I4004, пардон, I8086, нет, опять малость промахнулся, Core/K8 (но присутствие одного только аккумулятора чего стоит!), а не переходим стройными рядами в число поклонников RISC или хотя бы архтектур с правильной, симметричной по отношению к регистрам системы команд? Кто виноват? И что делать?

P.S. Я слезно прошу модераторов простить мне этот маленький оффтоп.
Автор: ddddF
Дата сообщения: 04.05.2007 10:51
Уважаемые! Ваша дискуссия, безусловно, интересна!
Но, все-таки, не будем забывать о теме.
А по сказанному выше: вроде бы нет пока темы о сравнении (выборе) языков программирования для ма-а-а-леньких процессоров, может стоит создать ее?
И, кстати, о выборе сред программирования тоже.
Автор: PapaKarlo
Дата сообщения: 04.05.2007 19:41
ddddF

Цитата:
вроде бы нет пока темы о сравнении (выборе) языков программирования для ма-а-а-леньких процессоров, может стоит создать ее?
И, кстати, о выборе сред программирования тоже

Создавать стоит, если есть, так сказать, затравка: было бы неплохо, чтобы создающий написал что-нибудь достаточно информативное по этому поводу. ИМХО.
Автор: ufosoft
Дата сообщения: 18.05.2007 07:10
кеил 7.10 нормально,а 7.50 выдает следущее

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?C?COPYP2
MODULE: dc2_v_ed2.obj (DC2_V_ED2)

*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: ?C?COPYP2
MODULE: dc2_v_ed2.obj (DC2_V_ED2)
ADDRESS: 8B14H

Program Size: data=19.1 xdata=1557 code=43747
LINK/LOCATE RUN COMPLETE. 2 WARNING(S), 0 ERROR(S)

как избавится
Автор: PapaKarlo
Дата сообщения: 18.05.2007 10:20
ufosoft
Посмотри по листингу для DC2_V_ED2, использование какой функции генерирует вызов CCOPYP2. Вообще-то упоминание такого символа присутствует во всех библиотеках C51xx.lib, так что с большой вероятностью недоразумение где-то у тебя.
Автор: PapaKarlo
Дата сообщения: 29.05.2007 18:33

ufosoft

Цитата:
7.10 нормально,а 7.50 выдает следущее

Нашел ли причину? Может быть интересным для других.
Автор: ufosoft
Дата сообщения: 27.06.2007 10:52
данную строку нашел в *.obj очевидно подпрограмма библиотеки к которой нет обращения или 7.50 кривой (нет такой п\п)?

Добавлено:
нашел в *.M51 ссылку C:\KEIL\C51\LIB\C51S.LIB (?C?COPYP2)
после замены из 7.10 файла C51S.LIB ошибки изчезли !!!???
Автор: PapaKarlo
Дата сообщения: 01.05.2007 21:58
ddddF

Цитата:
Список исправлений солидный, впечатляет.
Ну, а субьективные ощущения?
Как для меня, то, поскольку я симулятором пользуюсь редко, а комплексной арифметикой вообще не пользуюсь, интерес представляет разве что макро __DATE2__ (сейчас использую __DATE__ для получения компонент текущей даты в численном виде, приходится имя месяца в число превращать). Иными словами, для меня лично заявленные изменения значения не имеют. Да и субъективные ощущения - все то же, что и раньше.

Evgeny972

Цитата:
И еще, я с тоской вспоминаю язык PL/M. Развитие С извратило первоначальный концепт этого языка
PL/M никогда не использовал, в отличие от PL/1 (не для микропроцессоров, конечно). Не совсем понял, в каком смысле развитие C могло извратить PL/M - по моим представлениям последний был разработан как развитие PL/1 для МП, тогда как язык C изначально проектировался как переносимый язык высокого уровня, позволяющий добиться эффективной реализации практически на любой платформе от МП до суперкомпьютеров. Т.е. исходные пункты были несколько различными.
Также не понял, какое влияние на концепцию языка оказывали дисплеи? С-модуль - это одна функция? Ну, а возможности конкретных компиляторов по генерации результатов определяются чаще всего разработчиком компилятора, а не языка.
Автор: Evgeny972
Дата сообщения: 27.06.2007 14:13
ufosoft
Это у них не в первой. Исправляют один баг, плодят другие.
Автор: Evgeny972
Дата сообщения: 03.05.2007 10:29
PapaKarlo
Развитие С не извратило PL/M а убило его. PL/M был язык среднего уровня для микроконтроллеров Intel - это их детище. Он никогда не был развитием PL/1, а специально заточен под архитектуру Intel. Все Intel-овские операционки (ISIS , iRMX) были написаны на PL/M + macroAssembler.
Цитата:
Также не понял, какое влияние на концепцию языка оказывали дисплеи? С-модуль - это одна функция?
Имено так: первоначальная концепция С в этом и состояла. И первые компиляторы С генерировали ассеблерный код, который уже потом обрабатывался ассемлером, т.е. первоначально это был более продвинутый макропрочессор.
Автор: ufosoft
Дата сообщения: 28.06.2007 15:02
Где найти нормальную (полную) версию , а не ***аlfa? я так понял на сайте кейла все алфа были только урезанные (библиотека 710 больше чем 750а).

Добавлено:
Вопрос по кейл что такое BITS TO ROUND FLOAT COMPARE (в свойствах проекта), на что и как влияет?
Автор: Evgeny972
Дата сообщения: 28.06.2007 17:17
ufosoft
То что размер библиотеки меньше, не значит что она урезаная.
версии с а в конце - исправленные версии без а.

Цитата:
что такое BITS TO ROUND FLOAT COMPARE

Ну батенька: обозначает, до какой резолюции округляются числа с плавающей запятой при сравнении - меньше резолюция, сравнение быстее, но точночть меньше:
к примеру: есть два числа 1.011 и 1.019 (вместо бит говорим о цифрах после запятой)
если зададим 1: 1.011 ->1.0 и 1.019 -> 1.0 - два числа равны
если зададим 2: 1.011 ->1.01 и 1.019 -> 1.02 - второе больше


Автор: eugene7
Дата сообщения: 11.07.2007 18:59
А кто сравнивал качество компиляции кода для новой версии? Я попробывал перейти с 7.50 на 8.08a и у меня размер увеличился примерно байт на 150. Общий размер проекта примерно 60 кБ. Уровень оптимизации - 9. Если увеличивать уровень оптимизации до 11, то размер еще больше увеличивается. Вообще с оптимизацией у Keil-a странная ситуация, coloring register тоже ничего не дает или дает совершенную мелочь. При том, что эта фича достаточно небезопасная, если активно использовать прерывания.

Кстати, обнаружил в версии 8.08a новый забавный баг, которого не было в 7.50. Если объявить переменную T (большая буква T), или член структуры T, то компилятор вылетает с какой-то дурацкой ошибкой.

Тут раньше обсуждался вопрос про передачу параметров из asm в С файлы. Есть такая директива как #pragma SRC. Пишешь ее в начале С-файла и компилятор генерит из этого файла asm-файл с готовыми хидерами, секциями, реализацимя фунций и т.д. В этом файле меняешь функции как тебе надо, потом отключаешь от проекта исходный С-файл и подключаешь этот asm-файл - и готово.
Автор: PapaKarlo
Дата сообщения: 03.05.2007 20:34
Evgeny972

Цитата:
PL/M был язык среднего уровня для микроконтроллеров Intel - это их детище. Он никогда не был развитием PL/1

Конечно, термин "развитие" применен мной крайне неудачно - идея, что язык, спроектированный для разработки программ для 32-разрядного компьютера с мощной системой команд и мегабайтными ресурсами памяти, получил бы "дальнейшее развитие" в расчете на создание программ под четырехбитный ЦПУ с набором из 45 команд , никогда не посещала мою голову. Но все же

Цитата:
Гэри Килдалл ... эмулировал чип Intel 4004 на машине IBM-360, после чего разработал язык программирования PL/M (Programming Language / Microprocessor - "язык программирования для микропроцессора"). За основу был взят PL/I - основной язык программирования для IBM-360.
Хотя я, повторюсь, PL/M никогда не использовал (в отличие от PL/1), но имел возможность сравнить синтаксис языков, так что приведенная мной выше цитата у меня сомнений не вызывает.

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

то тут я позволю себе высказать определенные сомнения. Язык С был разработан не для микропроцессоров, но для PDP-11 (более того, по некоторым сведениям Ритчи и (вот фамилию второго не припомню) разрабатывали переносимый язык программирования для поддержки другой своей разработки - UNIX, хотя в этом я могу ошибаться. Кроме того, реализация конкретного компилятора и концепция языка - это, как говорят в Одессе, две большие разницы. Понятие же модуля в языке С, если я не ошибаюсь, четко не выражено. (Да и вообще, модуль - это скорее сущность, используемая компоновщиком/библиотекарем, а компиляторы и ассемблеры только поддерживают их, создавая модули из исходных текстов). Может быть, в первоначальных версиях под модулем подразумевался файл (или другая единица хранения исходного текста, "скармливаемая" компилятору), и накладывалось ограничение, что файл мог содержать лишь одну функцию (это - всего лишь мое предположние)? Если так, то я сомневаюсь, что среда программирования с такими в ее основу положенными концепциями могла просуществовать достаточно долго, чтобы "убить" конкурирующую.

О реализации, при которой компилятор только генерирует ассемблерный текст: не сомневаюсь, что такая реализация в определенных условиях может быть оптимальным (промежуточным) решением. Но тут такой вот вопросик: если компилятор достаточно примитивен в вопросах генерации результата, то насколько сложно перевести генерируемый им текст на языке ассемблера, т.е на машинно-ориентированном языке, в собственно машинно-ориентированный объектный код? И в чем может заключаться порочность внутреннего, прозрачного для пользователя использования ассемблера для генерации ассемблерного кода? Ну, а если кто-то когда-то разработал среду программирования, в которой бедный программист должен был вручную заправлять перфоленточку с ассемблерным текстом в считывающее устройство, то надо не забывать о том, что программисты первых компьютеров сообщали свои программные идеи электронному мозгу путем соединения контактов на лицевой панели специальными перемычками и были счастливы

У защиты вопрос к обвинению: чем именно обвиняемый (язык С) нанес смертельное ранение пострадавшему (языку PL/M)? Не сочти за ехидство, просто интересна твоя точка зрения.

По поводу 22 строк в функции (чтобы все сразу было видно на экране). В эпоху развития языков и методологии программирования было очень модным (и зачастую небесполезным) обсуждать стиль программирования (я бы сказал, кодирования, или еще точнее - оформления текста программы). Безусловно, намучавшись с конструкциями типа "IF(A451**SQRT(FUNC(357E-5*XYZ896))) 1,2,3456", светлые умы того времени призывали к такой записи программ, чтобы ее мог понять не только компилятор, но и автор спустя месяц после завершения своего титанического труда. Одной из идей была та, что продуманное разбиение программ на модули должно дать процедуры текстуально такого размера, чтобы их можно было охватить взглядом и, соответственно, проследить логику, не листая лихорадочно N страниц бумаги и уж тем более экрана (листы бумаги можно все же положить рядом, а рулон распечатки развернуть в длинном корридоре ). Но все же к концепции конкретного языка это имеет приблизительно такое же отношение, как гарнитура, которой напечатана Библия, к вести о спасении

И, наконец, к вопросу, "кто убил PL/M" Аналогичный вопрос можно задать по отношению к DR-DOS и GEM (другим детищам Гэри Килдалла), по отношению к языку Ада (или Пентагон все еще поддерживает его использование?), к компьютерным и системным архитектурам, вышедшим из недр DEC. И почему все мы до сих пор пользуемся этими немного повзрослевшими, но все же примитивными калькуляторными процессорами I4004, пардон, I8086, нет, опять малость промахнулся, Core/K8 (но присутствие одного только аккумулятора чего стоит!), а не переходим стройными рядами в число поклонников RISC или хотя бы архтектур с правильной, симметричной по отношению к регистрам системы команд? Кто виноват? И что делать?

P.S. Я слезно прошу модераторов простить мне этот маленький оффтоп.
Автор: ddddF
Дата сообщения: 11.07.2007 20:16

Цитата:
потом отключаешь от проекта исходный С-файл и подключаешь этот asm-файл - и готово.

Это тоже вариант, конечно. Только в "больших" Си есть возможность написания кусков асм в си-файлах. Вот это по-настоящему удобно - можно писать быстро, оптимально и оперативно менять код. По поводу оптимизации в keil-e: странные бывают штуки с оптимизацией, слов нет! Будем надеяться, что альтернатива все-таки будет.
Автор: ddddF
Дата сообщения: 04.05.2007 10:51
Уважаемые! Ваша дискуссия, безусловно, интересна!
Но, все-таки, не будем забывать о теме.
А по сказанному выше: вроде бы нет пока темы о сравнении (выборе) языков программирования для ма-а-а-леньких процессоров, может стоит создать ее?
И, кстати, о выборе сред программирования тоже.

Страницы: 12345

Предыдущая тема: Бесплатный софт, Freeware


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.