LINUX.ORG.RU

Релиз компилятора SDCC 3.6.0

 ,


1

2

12 июня было объявлено о выходе новой стабильной версии Small Device C Compiler (компилятор языка C для встраиваемых устройств). Он поддерживает архитектуры 8051, DS390, Z80, Z180, Rabbit 2000, HC08, STM8 и PIC (работа в процессе). Основные изменения:

  • Заимствование наработок из основной ветки binutils 2.25.
  • Уменьшено использование памяти при работе компилятора.
  • Изменён диалект языка по-умолчанию на --std-sdcc11.
  • Новое диагностическое сообщение для пропущенного спецификатора типа. Теперь неявное указание типа int не является допустимым в режимах, отличных от C90. (модераторам: Поправьте это, ибо я не уверен в правильности. «Diagnostic for missing type specifier: No implicit int outside of C90 mode anymore»)
  • Generic selections из C11.
  • Тип char теперь беззнаковый по умолчанию.
  • Символьные константы теперь имеют тип int вместо char.
  • ISO C95 и ISO C11 wide character constants (?).
  • ISO C95 и ISO C11 wide string literals (?).
  • В стандартной библиотеке появилась базовая поддержка wide characters: c16rtomb(), mbrtoc16(), mbsinit(), mbtowc(), mbrlen(), mbrtoc32, c32rtomb(), mbrtowc(), wcrtomb(), mblen(), wctomb().
  • Переработка обработчиков прерываний для z80, z180, r2k, r3ka, tlcs90, gbz80.
  • Для stm8 учитывается баг аппаратного делителя.
  • Добавлен вывод ELF/DWARF для stm8.
  • Для ELF выводится таблица символов.
  • Для PIC16 теперь по умолчанию используется начальный инициализатор crt0iz, который инициализирует глобальные и статические переменные как 0.
  • Переработано руководство пользователя. Теперь информация, относящаяся к конкретному порту, находится в чётко обозначенной секции.
  • Ну и, конечно же, множество исправлений ошибок и улучшений.

Доступны официальные бинарные сборки для всех основных платформ. Исходные коды и документация также доступны на официальном сайте.

>>> Подробности

★★★

Проверено: splinter ()
Последнее исправление: DeadEye (всего исправлений: 4)

начальный инициализатор crt0iz, который инициализирует глобальные и статические переменные как 0.

А что, какой-то начальный инициализатор этого не делает?

anonymous
()

Годно!

Помню в университетские годы использовал его что бы на Linux собирать под 8051.

realloc ★★★★
()
Ответ на: комментарий от reprimand

Для MIPS есть gcc, sdcc в первую очередь для тех случаев, куда gcc не втащить.

ncrmnt ★★★★★
()

Автар, что там с отладкой для stm8?

Симулятор хоть есть? Если есть, то как к нему цепляться отладчиком, и поддерживаются ли прерывания?

shkolnick-kun ★★★★★
()

Я всё никак не решусь обновить и затестить новую версию. По сравнению с 3,5 даже промежуточная 3,5,5 была просто небо в плане пожирания памяти. А ещё надо бы глянуть, починили ли они peephole правила для stm8. А то A |= 1 << 1; и A |= 1 << 7; преобразовывались в одну асм-команду, а если позиция сдвига была [2-6], то мы получали полный фарш из загрузки адреса в индексный регистр, загрузки в аккумулятор и OR с аккумулятором.

Кто пользуется, отписываемся, особенно о привнесённых новшествах.

ramon13666 ★★★
() автор топика
Последнее исправление: ramon13666 (всего исправлений: 1)
Ответ на: комментарий от shkolnick-kun

А хз. Симулятор типа есть, вот только прицепится к нему из отладчика sddb у меня не получилось — всегда запускался симулятор для 8051. Я дебажу по-старинке — светодиодиком.

ramon13666 ★★★
() автор топика
Ответ на: комментарий от ramon13666

Печаль. А то на меня выходил разработчик порта для stm8 и предлагал портировать туда BuguRTOS, но без отладчика вообще, это будет БОЛЬ!

shkolnick-kun ★★★★★
()
Ответ на: комментарий от shkolnick-kun

А спроси у того разработчика, как отдебажить код. Они используют симулятор для regression tests (как написано на их сайте). Проблема в том, что если работу st-link по протоколу swd отреверсили и добавили в openocd, то SWIM (как, похоже, и всё семейство stm8) оказалось нах никому не нужны ввиду «копеечности» stm32. Насколько мне известно, опенсорс реализация общения с ст-линком по SWIM была сделана только одним человеком и называется stm8flash.

ramon13666 ★★★
() автор топика
Последнее исправление: ramon13666 (всего исправлений: 2)
Ответ на: комментарий от ramon13666

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

sehellion ★★★★★
()
Ответ на: комментарий от ramon13666

Спрашивал, там над бэкэндом работает https://github.com/spth, а над симулятором и отладчиком другие люди.

Алсо, похоже, что он запилил порт atom_threads на sdcc и интерес к бугурту потерял.

shkolnick-kun ★★★★★
()
Ответ на: комментарий от ramon13666

Кстати, в среде разработки stvd используется gdb для отладки...
Но там нет поддержки sdcc...
А что, если написать враппер для sdcc, чтобы преобразовывать опции командной сроки какого - нибудь Cosmic или Raisonancе в sdcc???

ОЛОЛО, нужно кастануть сюда кого-нибудь грамотного...

shkolnick-kun ★★★★★
()
Ответ на: комментарий от shkolnick-kun

И кстати, на выходе резонанса при использованиии stvd я вижу .elf...

Так что может взлететь...

shkolnick-kun ★★★★★
()
Ответ на: комментарий от shkolnick-kun

Я, конечно, грамотный как валенок. Но в новости

Добавлен вывод ELF/DWARF для stm8

Разве не это нужно для работы с gdb?

ramon13666 ★★★
() автор топика
Ответ на: комментарий от sehellion

Если стояли lock-bits, тогда нельзя записать новое значение во флеш или еепром, пока не сбросишь их (это произведёт полное стирание чипа). А, если верить написанному на гитхабе, stm8flash не умеет читать/писать локбиты.

ramon13666 ★★★
() автор топика

А как указать адрес размещения кода и данных при компиляции под z80? Как ограничить адресное пространство доступное для кода?

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

sdccman.pdf читал? Там есть опции типа

ramon@ramon-desktop:~$ sdcc --help
…
Linker options:
      --code-loc            <nnnn> Code Segment Location
      --code-size           <nnnn> Code Segment size
      --stack-loc           <nnnn> Stack pointer initial value
      --data-loc            <nnnn> Direct data start location
…
В архиве с доками есть руководство по assembler-linker. Находишь опции, а там уже их можно и компилеру передать.

ramon13666 ★★★
() автор топика

Гаспада, а давайте спаём. Есть прекрасная песня и называется она «Пиши на Си».

When I find my code in tons of trouble,
Friends and collegues come to me,
Speaking words of wisdom:
«Write in C».

As the deadline fast approaches,
And bugs are all I can see,
Somewhere, someone whispers:
«Write in C».

Write in C, write in C,
Write in C, write in C,
LISP is dead and buried,
Write in C.

anonymous
()

У меня пара «интересных вопросов»,

1. а кто-нибудь пробовал при помощи этой штуки делать что-нибудь с китайскими mp3-плеерами на базе SOC с ядром 8051? Их ведь тыщи, многие имеют lcd, там крутится какая-то своеобразная OS, для многих есть документация на чип - неужто никому неинтересно?

2. А оно может собрать UZI[x]? Тоже занимательная задача, - поиметь «юникс» на девайсе с 8-и битным ядром и собственным lcd (применительно к тем же китайским плеерам).

Olegarch
()
Ответ на: комментарий от Olegarch

2. А оно может собрать UZI[x]?

В рассылке часто бывает некий Alan Cox, тебе такой не знаком? Он как раз о z80 и вещает.

ramon13666 ★★★
() автор топика

Тип char теперь беззнаковый по умолчанию.

wtf?

Символьные константы теперь имеют тип int вместо char.

wtf x 2?

Зачем ломать совместимость с подавляющим большинством библиотек??

someoneelsenotme
()
Ответ на: комментарий от ramon13666

некий Alan Cox, тебе такой не знаком?

Мне-то знаком, но слышать про этого человека «некий» для меня - очень странно. Хотя, да, кто сейчас вспомнит из молодёжи, что когда он был мейнтейнером онтопика, ядро Linux было просто великолепным... Не то, что сегодня...

Olegarch
()
Ответ на: комментарий от ramon13666

https://github.com/EtchedPixels/FUZIX

Это - всё ещё мой любимый Z80.

Меня же интересовал 8051.

P.S. Хотя, как я вижу - там есть TGL6502, можно посмотреть и на него.

Olegarch
()
Последнее исправление: Olegarch (всего исправлений: 1)
Ответ на: комментарий от Olegarch

А разве есть узикс на архитектуры кроме з80? Да и что спрашивать, возьми и собери, о результатах расскажешь.

ramon13666 ★★★
() автор топика
Ответ на: комментарий от Olegarch

Я простой юзер, кто там сейчас разрабатывает ядро и прочее даже не в курсе. За Коха слышал только на лоре. Ну и ты не уловил шутки юмора в той фразе.

ramon13666 ★★★
() автор топика
Ответ на: комментарий от ramon13666

Ну и ты не уловил шутки юмора в той фразе.

Я знаю Алана как очень грамотного, нудного и очень вьедливого разработчика. При нём ядро Linux было просто вылизано до мелочей. И начало сильно портится после его отставки. Знаю, что он разделяет мою собственную любовь к процессору z80. Он, по моему мнению, - один из двух наиболее адекватных (второй - это уважаемый Сергеей Вакуленко) людей во всём около-юниксовом комьюнити. Это не та персона, шутки о которой я приемлю. По мне - современным разработчикам до него расти и расти.

Olegarch
()
Ответ на: комментарий от Olegarch

Я даже не знал, что Кох перестал заниматься ядром. Помню, он был одним из главных мейнтейнеров.

ramon13666 ★★★
() автор топика
Ответ на: комментарий от Olegarch

Да и проще надо быть. А то веет снобизмом.

ramon13666 ★★★
() автор топика

Прогнал я один свой код для стм8. Генерация кода не поменялась (в моём случае), хотя служебные комментарии в *.lst файлах говорят о том, что логика работы немного изменилась. Теперь компилятор не позволил мне вызвать функцию не указывая параметр (билд 9506 такое позволял). Пришлось явно записать 0, из-за чего итоговая прошивка даже подросла в размерах. Peephole rules практически не менялись, некоторые моменты сгенерированного кода явно избыточны.

ramon13666 ★★★
() автор топика
Ответ на: комментарий от someoneelsenotme

Зачем ломать совместимость с подавляющим большинством библиотек??

Вообще-то, «подавляющее большинство библиотек» как раз подразумевает тип int для символьных констант, ибо так написано в стандарте C. И для информации:

vp:/tmp$ cat a.c 
#include <stdio.h>
int main () { printf("%u\n", sizeof '+'); }
vp:/tmp$ gcc -O2 a.c
vp:/tmp$ ./a.out 
4
vp:/tmp$ gcc --version |head -1
gcc (GCC) 4.8.5 20150611 (prerelease)
anonymous
()

Тип char теперь беззнаковый по умолчанию.

А теперь все старые проекты надо исправлять на signed char?

splinter ★★★★★
()
Ответ на: комментарий от Olegarch

что-нибудь с китайскими mp3-плеерами на базе SOC с ядром 8051?

И как ты будешь туда хотя бы заливать прошивку? Вот есть wifi rtl8187b с SoC, где 8051. Нигде в открытом драйвере даже не упоминается firmware или подобное. eeprom снаружи содержит пару конфигурационных байт, значит пзу с firmware внутри soc. Предполагаю, какие-то команды переводят SoC в режим, когда можно заменить прошивку, но как их реально узнать, кроме перебора?

panzerito
()
Ответ на: комментарий от panzerito

ps Хотя, по-моему, правильней называть rtl8187b не soc, а asic. Или, если есть cu, то это уже soc?

panzerito
()
Ответ на: комментарий от splinter

Ты подтвердил новость, но сам так и не перешёл по ссылке? Есть опция --fsigned-char

ramon13666 ★★★
() автор топика
Ответ на: комментарий от sehellion

Согласен. Ещё и еепром нельзя считать/записать, если у тебя стлинк_1. А именно такой стоит в дискавери. Я поражаюсь компании СТМ - чипы по цене песка, но сами же урезают возможность их использования. Видать, их интересуют только крупные заказчики, любители их не волнуют. Могли бы нанять пару человек для допила sdcc, но нет, мы лучше с космиком добазаримся, чтоб нам сделали меньше ограничений в специальной версии. Кст, Филипп делал сравнение компиляторов для stm8.

ramon13666 ★★★
() автор топика

Этим компилятором собирается FUZIX. Ура.

unt1tled ★★★★
()
Ответ на: комментарий от panzerito

Во всех стандартах?

Насколько мне известно, по крайней мере в C89 и C99. Но сами стандарты я не читал, информация получена из третьих источников. Кажется, даже у Страуструпа что-то было на эту тему в его «Язык программирования С++».

anonymous
()
Ответ на: комментарий от anonymous

Кажется, даже у Страуструпа что-то было на эту тему в его «Язык программирования С++».

Причем здесь С++ если речь о С?

someoneelsenotme
()
Ответ на: комментарий от BRE

Отличный вопрос: зачем нужен компилятор, если есть среда разработки? Анонимус уже не тот. :(

так называемые среды разработки уже включают в себя компиляторы.

Если есть человек, который пишет на чистом Си. Рекомендую редакторы vim и nano. Nano простой, и это гут! Vim позволяет не выходя из программы дать команду bash-у, чтобы исходный файл скомпилировался.

Vim и nano — ваши друзья!

anonymous
()
Ответ на: комментарий от anonymous

так называемые среды разработки уже включают в себя компиляторы.

которые умеют компилировать для z80?

BRE ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.