LINUX.ORG.RU

Выпуск Small Device C Compiler 3.5.0

 


1

2

24 июня было объявлено о выходе новой версии компилятора SDCC для 8-ми битных микроконтроллеров. Основные изменения по сравнению с предыдущей версией:

  • диалект языка по умолчанию сменён с --std-sdcc89 на --std-sdcc99;
  • сокращено потребление памяти (наиболее заметно при больших значениях --max-allocs-per-node);
  • уменьшено время компиляции для stm8 (наиболее заметно при больших значениях --max-allocs-per-node);
  • переработано и дополнено руководство пользователя;
  • функция atoll() для конвертирования строки в long long (доступно не для всех устройств, прим. переводчика);
  • соглашение о вызовах __z88dk_fastcall и __z88dk_callee для более эффективного вызова функций и большей совместимости с z88dk;
  • добавлена опция конфигурации сборки --disable-non-free;
  • опция --lospre-unsafe-read переименована в --allow-unsafe-read;
  • множество изменений и исправлений ошибок.

Текущая версия компилятора поддерживает архитектуры семейства MCS51 (8031, 8032, 8051, 8052 и другие), Dallas DS80C390, Freescale (Motorola) HC08 (hc08, s08), Zilog Z80 (Z80, Z180, gbz80, Rabbit 2000/3000, Rabbit 3000A) и STMicroelectronics STM8 . В разработке поддержка Microchip PIC и Toshiba TLCS-90.

Исходные коды, скомпилированные бинарные файлы для различных ОС и архитектур, а также документация доступны на sourceforge.

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

★★★

Проверено: fallout4all ()
Последнее исправление: cetjs2 (всего исправлений: 3)

Да и вооще, где Эдуард? Cast Eddy_em, расскажи нам историю успеха использования sdcc в разработке оборудования с применением stm8. Как твои ощущения, заметил ли ты развитие компилятора, с какими трудностями и глюками столкнулся, недостатки и подводные камни.

P.S. Он, оказывается, забанен. Ну хоть из под анонимуса напиши :)

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

8k flash. ну и когда озу нет вобще, как на тини28, на С писать приятно. или как на тини13 где флэша 512 инструкций всего. а тини13 досихпор самая часто применяемая тини для мелочи всякой потому что очень дешевая и везде есть. в том числе и в корпусе дип.

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

вот так написанный цикл будет распознан и оптимизирован:

for (i=0;i<10;i++) { ...

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

for (i=0;i<10;++i) { ...

Взял я такие кусочки кода

  for (i = 0; i < 31; ++i){
    GPIOB->ODR += i;
  }
  for (i = 0; i < 31; i++){
    GPIOB->ODR += i;
  }
скомпилировал с опциями
sdcc -mstm8 -DSTM8S003 --fverbose-asm --max-allocs-per-node 1000000 main.c
и получил в обоих случаях одинаковый код:
                                    130 ;	main.c: 11: for (i = 0; i < 31; ++i){
                                    131 ; genAssign
      000008 0F 01            [ 1]  132 	clr	(0x01, sp)
                                    133 ; genLabel
      00000A                        134 00102$:
                                    135 ;	main.c: 12: GPIOB->ODR += i;
                                    136 ; genPointerGet
      00000A AE 50 05         [ 2]  137 	ldw	x, #0x5005
      00000D F6               [ 1]  138 	ld	a, (x)
                                    139 ; genPlus
      00000E 1B 01            [ 1]  140 	add	a, (0x01, sp)
                                    141 ; genPointerSet
      000010 AE 50 05         [ 2]  142 	ldw	x, #0x5005
      000013 F7               [ 1]  143 	ld	(x), a
                                    144 ;	main.c: 11: for (i = 0; i < 31; ++i){
                                    145 ; genPlus
      000014 0C 01            [ 1]  146 	inc	(0x01, sp)
                                    147 ; genCmp
                                    148 ; genCmpTop
      000016 7B 01            [ 1]  149 	ld	a, (0x01, sp)
      000018 A1 1F            [ 1]  150 	cp	a, #0x1f
                                    151 ; peephole j5 changed absolute to relative unconditional jump.
      00001A 25 EE            [ 1]  152 	jrc	00102$

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

Когда ОЗУ нет вообще, документация для avr-libc говорит нам, что на С писать ты не сможешь, только на асме. А на tiny13a, где флеша 1 кб (твои 512 инструкций), на С можно сделать кнопки + индикация светодиодами + eemprom + АЦП + ШИМ (как программный, так и аппаратный). А если не играться _delay_ms() на каждый чих, то ещё и место может остаться. При этом ни разу не упёрся в предел по оперативной памяти на этой тиньке (ога, 64 байта которой). Наверно потому, что не пытался впихнуть невпихуемое.

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

скомпилировал с опциями

sdcc -mstm8 -DSTM8S003 --fverbose-asm --max-allocs-per-node 1000000 main.c

и получил в обоих случаях одинаковый код:

...

Ну, повезло. Я имел ввиду вот этот документ: http://sdcc.sourceforge.net/doc/sdccman.pdf , который надо читать начиная от 100-ой страницы. Глава 'Optimizations'. там описано, зачем ручками один switch на несколько бить.

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

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

К сожалению, этот документ неполный, неясный и устаревший. И не всё, что там написано, как мы видим, является достоверной информацией для данного релиза компилятора. В документации есть ещё более интересные моменты о приведении типа char (uint8_t) к int (signed int16_t) при совершении битовых операций. Однако в листинге я такого не заметил.

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

К сожалению, этот документ неполный, неясный и устаревший. И не всё, что там написано, как мы видим, является достоверной информацией для данного релиза компилятора. В документации есть ещё более интересные моменты о приведении типа char (uint8_t) к int (signed int16_t) при совершении битовых операций. Однако в листинге я такого не заметил.

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

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

так что лучше исходники подгонять под их оптимизации

Смотрим ассемблерный листинг и подгоняем. На документацию у них, похоже, времени нет.

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

этот компилятор не умеет выбрасывать ненужный код во время линковки

Компилятор не занимается линковкой. И не только этот, прикинь!

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

Все отлично, кроме некоторых косяков: sdcc != gcc, с этим приходится мириться. И оптимизация там говеная. А в остальном все ОК.

Eddy_Em ☆☆☆☆☆
()

«8-ми» - ппц какой-то, либо «восьмибитных», либо «8-битных». Поправьте, пожалуйста

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

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

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

И оптимизация там говеная

Для Z80 вполне себе ничего. Иногда и IAR уделывает.

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

да ни кто не заставляет менять привычки.

я вот как то давно пытался на С набыдлокодить на тини 26. уперся во что то и переписывал три дня на асме. скорее всего из за плохого понимания работы компилятора не буду отмазыватся. с тех пор пишу только а асме.

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

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

тру парни

ты щас местных говнописарей на скромность проверяешь? зря. ☺


а по теме. я совсем не тру просто любитель. для работы с авр у меня многие годы связка geany+avra+avrdude+avrisp_mk2. не разу еще на подводила.

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

Не, тру парни это как ты. А вот VirtualBox+семёрочка максимальная+AVR Studio + проброс USB порта от программатора. Вот это уже не тру :)

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