Project

General

Profile

Компилятор Си 89

Added by Natalia_multiclet about 11 years ago

Обсуждение,замечания, пердложения


Replies (41)

RE: Компилятор Си 89 - Added by dimon075 about 10 years ago

Обработка прерываний в компиляторе предусмотрена?

RE: Компилятор Си 89 - Added by krufter_multiclet about 10 years ago

В процессоре Р1 в компиляторе Си, так впрочем и на ассемблере предусмотрена обработка прерываний только от системного таймера. Т.е. регистр прерываний INTR отражает все прерывания, а также Вы можете опрашивать состояние регистров периферии, однако переход на параграф для обработки прерываний происходит в процессоре Р1 только от системного таймера. От периферии использовать прерывания запрещено вследствие аппаратной ошибки. В процессорах Р2 и R1 проблем с прерываниями нет и Вы сможете использовать обработчики прерываний для процессоров Р2 и R1 в компиляторе Си. Обязательно распишу в подробностях пример для СИ.

RE: Компилятор Си 89 - Added by overclocker over 9 years ago

А почему бы вам не выложить кодогенератор для существующего компилятора? Тогда всякие фрики вроде меня могли бы самостоятельно экспериментировать с существующим компилятором.

RE: Компилятор Си 89 - Added by Natalia_multiclet over 9 years ago

кодогенератор в ближайшее время выложим, чтобы у вас была возможность с ним поработать

RE: Компилятор Си 89 - Added by m.bakhterev over 9 years ago

Существующий C89 можно получить при помощи Git следующим образом:

git clone git://multiclet.com/lcc-kit/lcc-kit.git

После чего следуйте инструкциям в файле lcc-kit/INSTALL. Если возникнут проблемы и вопросы, обращайтесь

RE: Компилятор Си 89 - Added by m.bakhterev over 9 years ago

Актуальная информация о исходных текстах MCC/LCC размещена здесь: http://multiclet.com/community/projects/mcc-lcc/wiki

RE: Компилятор Си 89 - Added by overclocker over 9 years ago

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

RE: Компилятор Си 89 - Added by abondarev over 8 years ago

Добрый день.

Я являюсь разработчиком ОСРВ Embox и мы портируем ее на мультиклеточную платформу. Сейчас удалось собрать проект загрузить и вывести первую строчку с помощью printf. Ряд проблем с поддержкой C99 мы решили с помощью стороннего проекта по конвертации, часть заткнули с помощью напильника и такой то матери, но столкнулись с отсутствием attribute в компиляторе и .section в ассемблере (или их аналогов). С последним проблема возникла из за того, что компановщику нужно обязательно указывать первым файлом объектник у которого текст начинается со стартового кода, а это крайне не удобно. То есть отсутствует механизм с помощью которого можно указать линкеру порядок размещения символов, их группировка и так далее. Сложно ли добавить такую директиву а ассемблер, ну и какое нибудь подобие атрибутов в компилятор? Мне кажется это сильно бы упростило жизнь не только нам но и многим другим.

С уважением, Антон Бондарев

RE: Компилятор Си 89 - Added by y.chemodanov over 8 years ago

Изучите документацию по ассемблеру и линкеру. Их средств достаточно для решения проблемы с размещением crt0.

Поддержка attribute в компиляторе C в ближайшее время не планируется.

RE: Компилятор Си 89 - Added by abondarev over 8 years ago

Спасибо, за ответ.

Действительно просмотрел что директива .section поддерживается. Просто пользовался готовым crt0.o
Попробуем использовать

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

Столкнулся с необычным поведением функции. Если кратко, то для корректной работы с переменными вроде как нужно присутствие локальной переменной с таким же типом внутри функции. Не могли вы проверить, повторяется ли это у вас. В файле main.c на строчке 238 - 240 чуть более подробный комментарий, хотя как одно влияет на другое я понять не могу.

jul29.zip (9.62 KB) jul29.zip

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu wrote:

Столкнулся с необычным поведением функции. Если кратко, то для корректной работы с переменными вроде как нужно присутствие локальной переменной с таким же типом внутри функции. Не могли вы проверить, повторяется ли это у вас. В файле main.c на строчке 238 - 240 чуть более подробный комментарий, хотя как одно влияет на другое я понять не могу.

А можете расписать подробнее поведение функции? Но мы завтра проверим ваш пример. Внутри функции не нужно присутствие никаких дополнительных переменных, функции итак работают.

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu, простите за задержку, ваш пример проверим до конца этой недели и дадим ответ.

RE: Компилятор Си 89 - Added by abondarev over 8 years ago

поробовал .section в ассемблере. Ассемблер их действительно принимает, но если указать опцию "x" в атрибутах секции, то линкер пишет

mc-ld: fatal error: crt0.o: multiple .text section defenition

А если не добавлять то ассемблер пишет
mc-as crt0.s --include-path=./include -g --arch=MCp042R100102  --output=crt0.o
crt0.s:178:6: error: operation 'getl' must be placed in '.text' section
crt0.s:179:6: error: operation 'wrl' must be placed in '.text' section
crt0.s:180:6: error: operation 'jmp' must be placed in '.text' section
crt0.s:181:2: error: operation 'complete' must be placed in '.text' section
crt0.s:195:5: error: operation 'jmp' must be placed in '.text' section
crt0.s:196:5: error: operation 'getl' must be placed in '.text' section
crt0.s:197:5: error: operation 'getl' must be placed in '.text' section
crt0.s:198:5: error: operation 'getl' must be placed in '.text' section
crt0.s:199:5: error: operation 'subl' must be placed in '.text' section
crt0.s:200:5: error: operation 'subl' must be placed in '.text' section
crt0.s:201:5: error: operation 'wrl' must be placed in '.text' section
crt0.s:202:5: error: operation 'wrl' must be placed in '.text' section
crt0.s:203:5: error: operation 'setl' must be placed in '.text' section
crt0.s:204:5: error: operation 'setl' must be placed in '.text' section
crt0.s:208:5: error: operation 'setl' must be placed in '.text' section
crt0.s:210:2: error: operation 'setl' must be placed in '.text' section
crt0.s:211:2: error: operation 'setl' must be placed in '.text' section
crt0.s:213:5: error: operation 'getq' must be placed in '.text' section
crt0.s:214:5: error: operation 'or' must be placed in '.text' section
crt0.s:215:5: error: operation 'setq' must be placed in '.text' section
crt0.s:217:3: error: operation 'complete' must be placed in '.text' section
crt0.s:226:5: error: operation 'rdl' must be placed in '.text' section
crt0.s:227:5: error: operation 'wrl' must be placed in '.text' section
crt0.s:231:5: error: operation 'getl' must be placed in '.text' section
crt0.s:232:5: error: operation 'addl' must be placed in '.text' section
crt0.s:233:5: error: operation 'setl' must be placed in '.text' section
crt0.s:239:3: error: operation 'complete' must be placed in '.text' section
crt0.s:259:2: error: operation 'rdl' must be placed in '.text' section
crt0.s:260:2: error: operation 'rdl' must be placed in '.text' section
crt0.s:261:5: error: operation 'getl' must be placed in '.text' section
crt0.s:262:5: error: operation 'mull' must be placed in '.text' section
crt0.s:263:5: error: operation 'addl' must be placed in '.text' section
crt0.s:264:2: error: operation 'wrl' must be placed in '.text' section
crt0.s:267:5: error: operation 'jmp' must be placed in '.text' section
crt0.s:268:2: error: operation 'complete' must be placed in '.text' section

Я брал crt0.s из примеров. Просто добавил там .boot секцию.
Попытака передать линкеру скрипт не помогает, такое ощущение что он вообще его игнорит
Файлы во вложении

crt0.s (33.2 KB) crt0.s
script.lds (131 Bytes) script.lds

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

krufter_multiclet wrote:

montesquieu wrote:

Столкнулся с необычным поведением функции. Если кратко, то для корректной работы с переменными вроде как нужно присутствие локальной переменной с таким же типом внутри функции. Не могли вы проверить, повторяется ли это у вас. В файле main.c на строчке 238 - 240 чуть более подробный комментарий, хотя как одно влияет на другое я понять не могу.

А можете расписать подробнее поведение функции? Но мы завтра проверим ваш пример. Внутри функции не нужно присутствие никаких дополнительных переменных, функции итак работают.

Да это вроде как очевидно, но конкретно в этом примере что-то идет не так. Может быть, я где-то накосячил. А так это простой пример работы с UART'ом, числа конвертируются в строки и отсылаются в порт.

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

abondarev, информацию передал разработчику линкер скриптов, в понедельник будет готов ответ.
montesquieu, подтверждаю, что функция работает некорректно, скорее всего все связано с выравниванием при формировании стека.
Ошибка в коде или в стеке сообщим сразу как установим причину.

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

И еще вопрос, где у компилятора функция malloc() и где файл <stdlib.h>, с которым она ассоциируется?
И можно ли как-то удалить в geany из вывода информации при компиляции предупрежения типа "warning: empty paragraph"? Как я понял, особо ни на что они не влияют, но своим частым появлением они забивают другие предупреждения.

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu wrote:

И еще вопрос, где у компилятора функция malloc() и где файл <stdlib.h>, с которым она ассоциируется?
И можно ли как-то удалить в geany из вывода информации при компиляции предупрежения типа "warning: empty paragraph"? Как я понял, особо ни на что они не влияют, но своим частым появлением они забивают другие предупреждения.

1) Функция malloc() у нас еще не реализована, как и стандартная библиотека Си stdlib. Реализацией данной библиотеки сейчас не занимаемся. Если данная библиотека Вам необходима прямо сейчас, то вы можете сказать об этом на форуме, а также указать реализация каких функций библиотеки необходима в первую очередь. На основании ваших сообщений руководство может изменить приоритет текущих задач или подключить дополнительные ресурсы для реализации данной библиотеки.

2)Предупреждения "empty paragraph" появляются при формировании отладочной информации, т.е. когда вы собираете проект в режиме "Debug" в IDE Geany или с опцией -g при компиляции. По текущему плану сотрудник компании, который занимается оптимизирующей опцией компилятора обещал убрать данные предупреждения осенью этого года после завершения работ по оптимизирующей опции. Временно вы можете собирать проект в режиме "Relize" и данных предупреждений не будет. Но если вы отлаживаетесь на модели в среде Geany, то придется пока потерпеть. Если вдруг у нас появится дополнительный ресурс по данному направлению, то проблема будет устранена быстрее. Надо нам наверно по всем утилитам и IDE завести таблицу правок по каждой версии(сейчас исправления фиксируются кратко в разделе "Новости").

P.S. по вашей программе мы нашли, что портится стек, сейчас устанавливаем причину данного явления.

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

krufter_multiclet wrote:

1) Функция malloc() у нас еще не реализована, как и стандартная библиотека Си stdlib. Реализацией данной библиотеки сейчас не занимаемся. Если данная библиотека Вам необходима прямо сейчас, то вы можете сказать об этом на форуме, а также указать реализация каких функций библиотеки необходима в первую очередь. На основании ваших сообщений руководство может изменить приоритет текущих задач или подключить дополнительные ресурсы для реализации данной библиотеки.

Эх, у меня были такие мысли, но я всячески гнал их от себя. Конечно она нужна, как жеж без нее. Не то чтобы она была нужна прям "срочно-срочно", и мне не хотелось бы вас излишне напрягать, но я был бы рад её увидеть в ближайшее время.

krufter_multiclet wrote:

2)Предупреждения "empty paragraph" появляются при формировании отладочной информации, т.е. когда вы собираете проект в режиме "Debug" в IDE Geany или с опцией -g при компиляции. По текущему плану сотрудник компании, который занимается оптимизирующей опцией компилятора обещал убрать данные предупреждения осенью этого года после завершения работ по оптимизирующей опции. Временно вы можете собирать проект в режиме "Relize" и данных предупреждений не будет. Но если вы отлаживаетесь на модели в среде Geany, то придется пока потерпеть. Если вдруг у нас появится дополнительный ресурс по данному направлению, то проблема будет устранена быстрее. Надо нам наверно по всем утилитам и IDE завести таблицу правок по каждой версии(сейчас исправления фиксируются кратко в разделе "Новости").

Спасибо, а где этот режим можно включить в Geany? Я потыкался в менюшках, но данной опции не нашел.

krufter_multiclet wrote:

P.S. по вашей программе мы нашли, что портится стек, сейчас устанавливаем причину данного явления.

О, так это все-таки не моя ошибка? Удивительно.

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu wrote:

Эх, у меня были такие мысли, но я всячески гнал их от себя. Конечно она нужна, как жеж без нее. Не то чтобы она была нужна прям "срочно-срочно", и мне не хотелось бы вас излишне напрягать, но я был бы рад её увидеть в ближайшее время.

Да мы понимаем, что нужна полная библиотека stdlib, но пока нет свободных ресурсов на ее написание. Ваши пожелания мы добавили в свой стек задач).

Спасибо, а где этот режим можно включить в Geany? Я потыкался в менюшках, но данной опции не нашел.

На стр. 22 вот тут http://multiclet.com/docs/PO/quick_start_LDM_R1.pdf есть на рис. 14 скриншот. Там окошко Debug, его замените на Relize в строке Compile Type.

О, так это все-таки не моя ошибка? Удивительно.

Это мы еще устанавливаем.

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

Ага, сделал, спасибо.
Я смотрю, вы обновили Руководство прользователя? И даже добавили фотографию с правильным подключением программатора к плате?) Молодцы.

RE: Компилятор Си 89 - Added by abondarev over 8 years ago

Прислали новый линкер, ошибка ушла. Спасибо!

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu wrote:

Ага, сделал, спасибо.
Я смотрю, вы обновили Руководство прользователя? И даже добавили фотографию с правильным подключением программатора к плате?) Молодцы.

Это мы отдельным документом сделали - "Руководство пользователя по быстрому запуску".

abondarev wrote:

Прислали новый линкер, ошибка ушла. Спасибо!

Пожалуйста. Прикреплю бета версию линковщика к данному сообщению для Windows и Linux, пока ее не выложили в SDK.

mc-ld.exe (2.54 MB) mc-ld.exe для Windows
mc-ld (2.24 MB) mc-ld для Linux

RE: Компилятор Си 89 - Added by krufter_multiclet over 8 years ago

montesquieu wrote:

О, так это все-таки не моя ошибка? Удивительно.

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

RE: Компилятор Си 89 - Added by montesquieu over 8 years ago

Да? Хорошо. (Всё-таки компилятор...)

(1-25/41)