Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Pascal для AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Огурцов
Цитата(zltigo @ Dec 13 2008, 09:27) *
Огурцов продолжает нести пургу

Ничуть, проверено, как и сказал выше на WinAVR-GCC. Вообще, считаю его хорошим компилятором, поэтому всякие "но он имеет и недостатки" не катят. Особенно в форуме AVR/PIC.
Ну а про остальное - вам тоже нужно объяснять чем case от if/switch отличается ? Грустно.

Ссылки на компилеры: (сейчас e-lab стащу)

http://e-lab.de/index_en.html

Embedded Pascal for the AVR http://users.iafrica.com/r/ra/rainier/pasavr.exe

MikroElektronika Advanced Pascal Compiler for AVR #16194 http://www.dontronics-shop.com/mikroelektr...er-for-avr.html

Табличка внизу http://www.computerbase.de/lexikon/Atmel_AVR

Во, ребята отрываются )

Код
Programming in C is:
for(;P("\n").R-;P("|"))for(e=3DC;e-;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);
and hunting for pointer BUGs for ever ...............


zltigo
Цитата(Огурцов @ Dec 13 2008, 13:30) *
Во, ребята отрываются )

Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству".


Цитата(Огурцов @ Dec 13 2008, 13:30) *
Вообще, считаю его хорошим компилятором....

Вы многе еще чего "считаете", причем совершенно догматично-безосновательно sad.gif.
Код
    152          void show_mode_if(void)
   \                     show_mode_if:
    153          {
   \   00000000   939A               ST      -Y, R25
   \   00000002   938A               ST      -Y, R24
    154              if( ( mod_flag & MF_MODE_MASK ) == 2 )
   \   00000004   ....               LDI     R30, mod_flag
   \   00000006   8100               LD      R16, Z
   \   00000008   7003               ANDI    R16, 0x03
   \   0000000A   3002               CPI     R16, 2
   \   0000000C   F459               BRNE    ??show_mode_if_0
    155              {    PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \   0000000E   B302               IN      R16, 0x12
   \   00000010   7F08               ANDI    R16, 0xF8
   \   00000012   BB02               OUT     0x12, R16
    156                  PORTD |= PD_LED_RANDOM;
   \   00000014   9A92               SBI     0x12, 0x02
    157                  srand( (ushort)run_cnt + 1 );
   \   00000016   ....               LDI     R30, run_cnt
   \   00000018   8180               LD      R24, Z
   \   0000001A   E090               LDI     R25, 0
   \   0000001C   9601               ADIW    R25:R24, 1
   \   0000001E   018C               MOVW    R17:R16, R25:R24
   \   00000020   ....               RCALL   srand
   \   00000022   C010               RJMP    ??show_mode_if_1
    158              }
    159              else if( ( mod_flag & MF_MODE_MASK ) == 1 )
   \                     ??show_mode_if_0:
   \   00000024   3001               CPI     R16, 1
   \   00000026   F429               BRNE    ??show_mode_if_2
    160              {     PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \   00000028   B302               IN      R16, 0x12
   \   0000002A   7F08               ANDI    R16, 0xF8
   \   0000002C   BB02               OUT     0x12, R16
    161                   PORTD |= PD_LED_TRIANGULAR;
   \   0000002E   9A91               SBI     0x12, 0x01
   \   00000030   C009               RJMP    ??show_mode_if_1
    162              }
    163              else if( ( mod_flag & MF_MODE_MASK ) == 0 )
   \                     ??show_mode_if_2:
   \   00000032   2300               TST     R16
   \   00000034   F019               BREQ    ??show_mode_if_3
    164              {     PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
    165                   PORTD |= PD_LED_SAW;
    166              }
    167              else
    168              {     mod_flag &= (~MF_MODE_MASK);
   \   00000036   8100               LD      R16, Z
   \   00000038   7F0C               ANDI    R16, 0xFC
   \   0000003A   8300               ST      Z, R16
    169                  PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \                     ??show_mode_if_3:
   \   0000003C   B302               IN      R16, 0x12
   \   0000003E   7F08               ANDI    R16, 0xF8
   \   00000040   BB02               OUT     0x12, R16
    170                   PORTD |= PD_LED_SAW;
   \   00000042   9A90               SBI     0x12, 0x00
    171              }
    172          }
   \                     ??show_mode_if_1:
   \   00000044   9189               LD      R24, Y+
   \   00000046   9199               LD      R25, Y+
   \   00000048   9508               RET




    174          void show_mode_sw(void)
   \                     show_mode_sw:
    175          {
   \   00000000   939A               ST      -Y, R25
   \   00000002   938A               ST      -Y, R24
    176              switch( mod_flag & MF_MODE_MASK )
   \   00000004   ....               LDI     R30, mod_flag
   \   00000006   8100               LD      R16, Z
   \   00000008   7003               ANDI    R16, 0x03
   \   0000000A   F0B9               BREQ    ??show_mode_sw_0
   \   0000000C   950A               DEC     R16
   \   0000000E   F069               BREQ    ??show_mode_sw_1
   \   00000010   950A               DEC     R16
   \   00000012   F481               BRNE    ??show_mode_sw_2
    177              {
    178              case 2:
    179                  PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \   00000014   B302               IN      R16, 0x12
   \   00000016   7F08               ANDI    R16, 0xF8
   \   00000018   BB02               OUT     0x12, R16
    180                  PORTD |= PD_LED_RANDOM;
   \   0000001A   9A92               SBI     0x12, 0x02
    181                  srand( (ushort)run_cnt + 1 );
   \   0000001C   ....               LDI     R30, run_cnt
   \   0000001E   8180               LD      R24, Z
   \   00000020   E090               LDI     R25, 0
   \   00000022   9601               ADIW    R25:R24, 1
   \   00000024   018C               MOVW    R17:R16, R25:R24
   \   00000026   ....               RCALL   srand
   \   00000028   C00C               RJMP    ??show_mode_sw_3
    182                  break;
    183
    184              case 1:
    185                   PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \                     ??show_mode_sw_1:
   \   0000002A   B302               IN      R16, 0x12
   \   0000002C   7F08               ANDI    R16, 0xF8
   \   0000002E   BB02               OUT     0x12, R16
    186                   PORTD |= PD_LED_TRIANGULAR;
   \   00000030   9A91               SBI     0x12, 0x01
   \   00000032   C007               RJMP    ??show_mode_sw_3
    187                   break;
    188
    189              default:
    190                   mod_flag &= (~MF_MODE_MASK);
   \                     ??show_mode_sw_2:
   \   00000034   8100               LD      R16, Z
   \   00000036   7F0C               ANDI    R16, 0xFC
   \   00000038   8300               ST      Z, R16
    191
    192              case 0:
    193                   PORTD &= (~(PD_LED_SAW|PD_LED_TRIANGULAR|PD_LED_RANDOM));
   \                     ??show_mode_sw_0:
   \   0000003A   B302               IN      R16, 0x12
   \   0000003C   7F08               ANDI    R16, 0xF8
   \   0000003E   BB02               OUT     0x12, R16
    194                   PORTD |= PD_LED_SAW;
   \   00000040   9A90               SBI     0x12, 0x00
    195              }
    196          }
   \                     ??show_mode_sw_3:
   \   00000042   9189               LD      R24, Y+
   \   00000044   9199               LD      R25, Y+
   \   00000046   9508               RET


Но это в общем-то Ваши проблемы smile.gif, до тех пор, пока Вы не начнете публично их обсуждать.
ReAl
Цитата(Aesthete Animus @ Nov 12 2008, 19:09) *
То есть, вы уже успели прочитать студентам курс лекций про asm, IAR, avr-gcc, CodeVision, BASCom
Боже упаси!
Как только начинают обучение с "курсов лекций" "по IAR", "по GCC", "по CodeVision" - всё, сливай воду. Для ознакомления с перспективами такого подхода ("... аппараты Бимена. В тех проклятых лентах, которые дали мне образование был предусмотрен спектрограф Хенслера... ... мне скажут, что мой мозг предназначен для Хенслера...") - читать Азимова, рассказз "Профессия" ( "Специальность"? В украинском переводе "Фах", кстати, я очень рад, что он был у дочери в курсе иностранной литературы).


Цитата(defunct @ Nov 17 2008, 01:14) *
вместо goto и метки можно воспользоваться любым оператором цикла и break, производительность от этого не пострадает.

Код
do
{
     .....
     if ( x ) break;
     ....
     if ( y ) break;
     ..
} while (0);


а смотреться будет, на мой взгляд красивше нагляднее.
Нафиг-нафиг. Пробовал в детстве, но аллергией на goto, навязанной излишне академичными книжками, переболел. Даже с комментарием /* while(0) */ в начале возле do { всё равно плохо. Поначалу кажется - "о как красиво". А потом при модификациях вдруг цикл добавить, из которого выходить нужно - и путаница "это тот break или другой"?
Итого где можно выделить в функцию и return (да, аллергии на несколько точек выхода из функции у меня тоже нет), то выделяю, пусть даже она один раз вызывается.
Где обилие локальных переменных данной функции, к которым нужно обеспечить доступ в блоке, затрудняет выделение блока кода в функцию (локальных функций ведь, привет от паскаля, в стандартном С нет, а привыкать к этому расширению gcc не хочу, не так часто надо), там goto.



Цитата(DSIoffe @ Nov 14 2008, 10:04) *
А ссылочка от gotty очень хороша. Рекомендую всем любителям убедительных фраз.
И чем она хороша? Агрессии не меньше, чем в этой теме. Правильные слова - правильны как-то независимо от языка.
Пример про "на паскале вы НЕ МОЖЕТЕ такого написать" - ну извините. Если у кого-то поведение зависит от того, стоит ли рядом кто-то, кто НЕ РАЗРЕШАЕТ гадить где ешь - то это его личные проблемы.
Точно так же можно ругать какой-то естественный человеческий язык за многообразие конструкций и оттенков (их ещё и понять может быть тяжело человеку, плохо знающему этот язык! он же ещё и жидкость для ухода за кожаными кошельками может на щёки себе натереть!!!). На человеческом языке поэты могут писать стихи, основанные на игре звучания слов практически без какого-либо смысла, учёные могут писать сложные тексты, непонятные школьникам (ничего, подучатся и поёмут, если захотят, зато между учёными коммуникация эффективнее, чем если бы они пытались писать "понятно для всех"), а можно и ругательства на стенах баллончиком с краской писать. Давайте запретим эти языки, как "растлевающие малолетних".
Там правильно в начале сказано про
Цитата
проблему нехватки квалифицированных специадистов с "правильно поставленными мозгами"
- но это проблема не "использования языка С", а обучения им пользоваться, так же как и обписанные да обписянные подъезды - проблема не человеческого языка как такового. Более того, там же сказано (стр. 6)
Цитата
даже если школьники прошли какие-то школьные курсы ... "постановка мозгов" им в школе (за редкими исключениями) нередко оказывается выполненной настолько неправильно ... , что послежствия ощущаются годы
- а ведь в школе не С и не С++ дают, а Паскаль. Значит - не панацея и даже не облегчает ничего.
Кстати, как вам конструкция "за редкими исключениями нередко оказывается" - я об неё споткнулся.
Может, автору надо изучить вместо русского какой-то другой язык? В котором "он НЕ МОЖЕТ такого написать"? Или "за редким исклдючением" касалось слов "в школе" а не "оказывается выполненной"?

Что касается паскаля... Язык как язык.
Можно и на нём закрутить нерабочий текст с трудно отыскиваемыми ошибками.
Можно и на нём работать в малых объёмах (да какая-то мега128 с внешней ОЗУ-шкой и тем более ARM имеют ресурсов больше, чем "Robotron-1715" на Z80 с CP/M и паскалем или чем "Электроника-60"/"ДВК-2", для которых тоже на паскале писалось). Ну если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет.

Писал когда-то парень по соседству для "Электроники-60" на паскале интерпертатор языка управления лабораторной установкой с КАМАК-ом. Насколько я помню, треть программы - асмовые вставки, и не только в кусках обмена с аппаратурой. Но "самый верх" - на паскале довольно красивый получалося. А когда я выбирал для себя на чём более-менее окончательно остановиться, я пописал немного и на паскале, и на С, посравнивал генерируемый код. У паскаля он был гораздо страшнее. Особых оптимизаций тогда не на чём было делать, а С оказался гораздо ближе к реальным процессам.
Убедился, что на С мне в большинстве случаев удастся обойтсиь без асм-вставок (он их и не позволял), а если вдруг таки надо будет - то одну-две подпрограммы на ассемблере просто напишу. Вот и всего выбора. begin/end на него вообще не повлияли :-)

Сейчас у дочери в школе паскаль - ну и нормально. Главное что не бейсик, как в предыдущей. Может даже лучше, что не С - весь С всё равно не дадут, а с укороченного подмножества потом переучиваться может оказаться труднее, как совсем новое пойдёт органичнее.
Показал и как множествами пользоваться, и вложенными функциями (почему-то в школе это опустили).
Aesthete Animus
Цитата(ReAl @ Dec 13 2008, 15:05) *
Боже упаси!
Как только начинают обучение с "курсов лекций" "по IAR", "по GCC", "по CodeVision" - всё, сливай...

В тех моих словах должно было звучать бурлеско...
ReAl
Цитата(777777 @ Dec 8 2008, 15:35) *
Неповоротливость, как и гибкость, зависят только от языка, но никак не от компилятора. Почему, например, для перевда буквы в нижний регистр нельзя просто установить бить 0x40, как в Си (c |= 0x40), а надо сначала получить код символа, выполнить с ним арифметическую операцию, а потом преобразовать опять в символ?
Ну, вообще говоря, и на С часто (и правильно) рекомендуется делать это через ctype.h tolower(), а не врукопашную битиками жоглировать.



Цитата(Aesthete Animus @ Dec 13 2008, 16:50) *
В тех моих словах должно было звучать бурлеско...
ф-ф-ф-ф-фуууухххх...


Цитата(ARV @ Dec 10 2008, 10:17) *
P.S. Во времена популярности Turbo C и Turbo Pascal неоднократно раскручивал "Сишников" (я тогда был студентом-адептом паскаля) на тест: экзешник хелловорда на паскале всегда получался на 12-15 килобайт меньше, чем на паскале smile.gif а заполнение экрана посимвольно всегда завершалось быстрее, чем при сишной реализации. и это повергало Сишников (стаж работы годы против моих студенческих дней) в уныние, которое они "обоснованно" (при помощи Тurbo Debugger-а) доказывали тем, что printf Cи использует "стандартную" функцию MS DOS для вывода на дисплей, а "нестандартный паскаль" напрямую через прерывание BIOS действует. smile.gif не правда ли, все это вызывает смех сейчас, когда хелловорд на любом языке перевалил за сотню килобайт и на трехгигагерцовом пне запускается порой 1,5 секунды smile.gif

1) как это на 12-15 ??? На паскале занимало минус 6-9 килобайт?
Специально достал старючий компакт и развернул TURBOC20
Код
#include <stdio.h>

int main()
{
    printf("Hello, %s!\n",  "world");
    return 0;
}

>tcc -mt h.c
>dir h.exe

Код
13.12.2008  16:36             6 548 H.EXE

Кстати, mingw32-gcc даёт файл 6144 байт.

2) Нестандартность вывода через биос приводит к тому, что в принципе вроде бы и консольная программа, а вывод в файл не перенаправить. Приходилось print screen делать.
в качестве стёба - теперь я знаю, кто мне присылает скриншоты выдачи avreal вместо перенаправленного в файл вывода - привыкшие к этому на турбопаскальных программах
Но если очень хотелось, то и на турбо-С можно было работать через биос
Код
#include <conio.h>

int main()
{
    сprintf("Hello, %s!\n",  "world");
    return 0;
}

Код
13.12.2008  16:48             6 098 H1.EXE

Это при всех стандартных действиях. А если одну заглушку поставить, это надо где-то по старым исходникам глянуть, то в программах, не пользующихся некоторыми вещами из стандартной библиотеки можно было раза в два меньше получить для программы, выполняющей реальную работу.
Огурцов
Цитата(zltigo @ Dec 13 2008, 11:16) *
Ну так и отрывались-бы там вместе. Вместо этого начинаете выказывать глупость в местах, где ее способны оценить по "достоинству".

Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится.

Цитата(zltigo @ Dec 13 2008, 11:16) *
Вы многе еще чего "считаете", причем совершенно догматично-безосновательно sad.gif.

Только не безосновательно, а бездоказательно - приводить здесь какие-то доказательства - пустая трата времени. Зевак (или жевак) выше хорошо про это написал. А вот основания "считать" как раз есть - личный опыт. И я ему верю, исходя из личного опыта )))


Цитата(ReAl @ Dec 13 2008, 12:05) *
если иметь подходящий компилятор. А если их нет - то хоть в ООН жалуйся на маркетологов и издательства, которые "служат усилителем", легче не станет.

Зачем же в ООН. Компилятор паскаля не на много сложнее хорошего программатора wink.gif
Aesthete Animus
Цитата(Огурцов @ Dec 13 2008, 18:37) *
Это не моя "глупость". К сожалению. Но шарж этот на си весьма нравится.

Гыгыгы... Вам сюда: http://www.ioccc.org/main.html :-D
Вот только подобное не имеет отношение к программированию на Си. Писать такой код, подобно пайке при включенном питании, то есть тому, за что сиюжеминутно следует отрывать руки.
Огурцов
Цитата(Aesthete Animus @ Dec 13 2008, 15:47) *
Вот только подобное не имеет отношение к программированию на Си.

Имеет, имеет. И даже обфускаторы для этого не нужны )
Или можете привести такое же для паскаля ? Давайте, вместе посмеемся.
ReAl
Цитата(ARV @ Dec 11 2008, 12:57) *
ок. можем переиграть условия. вот код, 1 в 1 аналогичный предложенному "другими" людьми:
Код
var
    c : char;
begin
  repeat
    read(c);
    write(c);
  until c = #$0d;
end.
размер exe-шника из-под Delphi7 15360 байт. скажите, не говорит ли это о том, что результат из-под Паскаля как минимум не хуже Сишного ни по размеру итогового файла. ни по скорости его исполнения?
А как там с переносимостью/ошибкоустойчивостью с указанием явной константы вместо символа конца строки? wink.gif А то как ch |= 0x40, так надо locase()/tolower(), а тут уже можно #$0d вместо '\n' ?
Аналог предыдущего с ограничением длины строки
Код
#include <stdio.h>

int main()
{
    char buf[32];
    fgets(buf, 31, stdin);
    puts(buf);
    return 0;
}
mingw32-gcc - 6144 байта.
О полной идентичности работы говорить тяжело - с перенаправлением в любом случае можно на вход получить файл вместо консоли и при этом while( putchar(getchar()) != '\n' ) ; (независимо от того, написано так или как ранее с промежуточной переменной и do {} while ) будет работать некорректно в случае файла, не содержащего '\n' - застрянет в вечном цикле.
Что она и делает. И паскальская (BP7, других нет) тоже, только она ещё и по Ctrl-C не снимается, в отличие от С-шной.


Цитата(ARV @ Dec 11 2008, 12:57) *
P.S. самое странное, что действительно, при этом коде вывродится 2 строки, как у gotty! если поначалу я подозревал, что тут какой-то подвох с его стороны, то теперь я сам не понимаю. как это возможно... судя по всему, дело в буфферизации ввода-вывода ОС... однако, это по-моему, странно sad.gif
консоль традиционно построчно-буферизованная.
Огурцов
Посмотрел компиляторы по ссылкам выше.

Embedded Pascal for the AVR - похоже, старенький, сыренький и к тому же мертвенький.
e-lab - довольно большой дистрибутив, а возможности не очень впечатлили, и какой-то заморочный, требует напряга. Разбирайтесь сами.
MikroElektronika Advanced Pascal Compiler for AVR - ничотак, на первый взгляд все по уму, вполне может быть взять за отправную точку.
ReAl
Цитата(gotty @ Dec 11 2008, 13:54) *
Боюсь Вас огорчить, но я даже не буду пытаться. Языки слишком разные, паскаль для программиста дружелюбнее, а си для - целевого железа. Если хотите меряться строками динамической длинны - вам к С++.
В этой задаче в этой формулировке "истинные" строки не нужны, достаточно маленкого буфера фиксированной длины (проверки на наличие файла в паскалевском варианте этого в явном виде не было, как оно себя без файла - не знаю).
Код
#include <stdio.h>

int main()
{
    char buf[32];
    FILE *pf = fopen("1.txt", "rt");
    if( pf) {
        while( fgets(buf, 31, pf) ) {
            fputs(buf, stdout);
        }
        fclose(pf);
    }
    return 0;
}

Поскольку на таком буфере выданный наружу 1-килобайтный файл посимвольно совпал с файлом 1.txt - проверять на многомегабайтном файле смысла не вижу.
Длина exe-шника - традиционные для моего mingw32-gcc 6144 байта (весь рантайм в msvcrt.dll, а своего кода меньше, чем надо для того, чтобы вылезти за выравнивание формата файла exe).

Цитата(ARV @ Dec 11 2008, 13:46) *
ваш ход! smile.gif
Ну вот он. Правда, он не упирается в строку из одного символа перевода строки, но этого из _текстового_ условия и не следовало, только из кода на паскале :-)
Да, кстати, скомпилированный turboC 2.0 exe - 7544 байт. Работает в точности так же, как и 32-битный exe от mingw32-gcc (а это уже относится к немцам к разговорам о переносимости между 16-бытними и 32-битными системами).
Ваш же исходник, скомпилированный даже гораздо более "свежим" BP7/dos, хоть и занял 2304 байта, но радостно копирует первые 255 байт и всё. Потому, что стоит readln/writeln и первое же чтение пропускает всё до конца файла (он, кстати, сделан так, что символа новой строки не содержит вообще smile.gif ). С read/write работает нормально, но это уже не Ваш исходник :-), "абстрактно" рассчитанный на "строки у нас правильные" 32-битный счётчик символов в начале строки, а не на 8-битный.
zltigo
Цитата(Огурцов @ Dec 13 2008, 19:01) *
Или можете привести такое же для паскаля ? Давайте, вместе посмеемся.

Двавайте. Поскольку Вы не сможете скомпилировать свой пример, который, как Вы утверждаете, написан на Си, то я уже давно грустно смеюсь над дуростью. Даже сквозь отсутствие форматирования (язык Си ведь не заставляет писать неформатированные тексты?), и однобуквенные названия функций( язык Си понимает и осмысленые имена), и просто бредовый повтояющийся (фантазии совсем-совсем не хватило?) набор манипуляций с указателем передаваеммым некой функции, видно минимум три несовместимых с языком ошибки. Более подробно о том, что это за "пример на C", Вам расскжет любой компилятор. На таком уровне и я могу написать любой набор символов и сказать, что это Паскаль. Компилятор паскаля его не поймет, но разве это имеет какое-то значение для Вас sad.gif sad.gif sad.gif? Вы, как выяснилось, можете смеяться и без всякой причины.
Огурцов
Цитата(zltigo @ Dec 13 2008, 16:39) *
Поскольку Вы не сможете скомпилироваь свой пример

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

Цитата(zltigo @ Dec 13 2008, 16:39) *
На таком уровне и я могу написать любой набор символов и сказать, что это Паскаль.

Давайте. Сравним читаемость "кода".
ReAl
Цитата(ARV @ Dec 11 2008, 14:02) *
хоть я от вас и не слышал утверждения, что Паскаль хуже Си (или С++), прошу вас высказаться: вы так же считаете, что ХУЖЕ? или все-таки согласны, что ПАСКАЛЬ не хуже, не лучше, а такой же, просто иной язык.
Хоть вопрос и не ко мне - так в том-то и дело, что как только среднестатистический "паскалист" начинает говорить о С, то он сразу начинает с яростных "наездов" на синтаксис/отсутствие проверок/пропускание ошибок/..., с тупых примеров, аналогичных приведенному, с того, что С - "птичий" write-only язык и т.п., при этом обижаясь на аналогичные по сути "наезды"на паскаль, но уж себя-то считая объективным и хладнокровными. Так что не надо говорить, что "односторонне неуравновешенные специалисты нервно холиварят про паскаль".
Просто, как тут уже говорилось, "С-шников" больше - поэтому когда они хором отвечают, то кажется, что они "неуравновешеннее". А нефиг бросать гранату в штабель ящиков с точно такими же гранатами, только покрашенными в другой цвет.


Цитата(ARV @ Dec 12 2008, 11:09) *
я и не говорю, что кривость рук исправляет компилятор... но на остальное-то вы обратили внимание? был бы компилятор построже
Это Вы о чём? О том, что Ваш исходник со строкой и readln/writeln , скомпилированный "компилятором построже" BC7 работает совершенно не так, как он же, скомпилированный дельфями или чем там? Абстракция "правильных строк" оказалась-то дырявой и "расслабиться" позволяет не только С...
zltigo
Цитата(Огурцов @ Dec 13 2008, 19:48) *
Во-первых, я знаю....

Знаете/Не знаете этого уже я не знаю и мне безразлично. Но, если действительно знаете, то все еще хуже sad.gif, ибо сознательные подтасовки хуже натуральной дурости.

Цитата(Огурцов @ Dec 13 2008, 19:48) *
Давайте. Сравним читаемость "кода".

Легко. Это доведенный (речь идет не о безумных манипуляциях, а о только минимальном форматировании, и назначении неких "осмысленных" имен и исправлении явных синтаксических ошибок дабы откомпилировать ) исходник Вашей любимой псевдосишной фиговины.
Код
    for(; function( a_string ).found; function( b_string ) )
    {    
        for( index = 0x3DC; index; function( c_string + (*selector++ / 8) % 2 ) )
            function( d_string + (*selector / 4 ) % 2 );
    }

Напишите сие на Паскале. Посмотрим, будет-ли эта Ваша ГАЛИМАТЬЯ хоть сколь-нибудь более читаемой на Паскале.

Ремарка. Не удержался. За такое:
Код
    function( d_string + (*selector / 4 ) % 2 );

надо бить по голове отдельно, ибо безмозгло и нечитабельно дважды используюется деление вместо банального анализа бита:
Код
    function( (*selector & BIT3) ? d_string + 1 : d_string );
XVR
Кстати, снова по поводу 'феерического коменческого успеха' Delphi. Кто нибудь может сказать, почему несмотря на весь 'феерический' успех Borland продал всю эту Дельфи со всеми потрохами фирме Embarcadero Technologies?
Hmm
XVR
Не было такого. А что-то вроде Borland->Inprice->...->CodeGear->Embarcadero...
Для Borland Delphi стало "мелочью" и "в тягость", т.е. убыточным бизнесом и эта фирма сосредоточилась на основном направлении ('Products for the Software Development Life Cycle').
733259
Цитата
А что-то вроде Borland->Inprice->
Borland->Inprice - ИМХО переименование, потом они вернулись к старому имени, т.е. не продажа.
Огурцов
Цитата(zltigo @ Dec 13 2008, 17:52) *
Напишите сие на Паскале. Посмотрим, будет-ли эта Ваша ГАЛИМАТЬЯ хоть сколь-нибудь более читаемой на Паскале.

Так на си я уже вариант приводил, зачем еще раз приводить ? Я ожидал, что вы на паскале выдадите такое же веселенькое.
Hmm
733259
Могет быть smile.gif или выделили подразделение. Помню только, что прибыль в %, приносимая этим продуктом стала очень мала в соотношении ко всей прибыли. Мда ...
Огурцов
Цитата(XVR @ Dec 13 2008, 19:56) *
Кто нибудь может сказать, почему несмотря на весь 'феерический' успех Borland продал всю эту Дельфи со всеми потрохами фирме Embarcadero Technologies?

Не знаю уже, кто там кому что продал, но на мой взгляд проблема вызвана выпуском MS FrameWork и C#. После чего борланд бросился догонять m$, поступил подло, закрыв линию delphi 7.0, и выпустил delphi 8.0. Что есть принципиально иной продукт со всех точек зрения, в т.ч. и по совместимости/переносимости исходников. Прогать на пародии естественно не эстетично, поэтому вряд ли многие прогеры перешли на D8. Кто-то видимо остался на D7, кто-то перешел на иное поле. Я перешел на C#. По принципу паскаль - лучше от борланда, но шарп - от микрософта.
733259
Вставлю 5 копеек.
ИМХО разговор ушел куда-то в сторону от микроконтроллеров.
Вот буквально 2 дня назад закончил проект, заодно перешел на ARM с AVR - оказалось ничего хитрого, наехал правда на один косяк, еррату не читал. Все прошло гладко (ИМХО) еще из-за того что о компилере вооще не беспокоился - собрал gcc для arm-elf - всё сразу заработало без глюков и неожиданностей. Половину прошивки передрал из своих старых исходников тупым копипастом, всё заработало. Надо же smile.gif
История банальная конешно, но реальная.
Т.е. - вот реальная кроссплатформенность. Мне еще PIC32 нравится. Будет задача - думаю тоже использую без проблем. Windows - Linux - то же самое!
В случае си! А паскаль? А нет его по факту нигде кроме PC и под винду.
О чем тогда говорить? Может хороший язык, может нет, не знаю, потому ни похвалить ни покритиковать не могу, но мне (ИМХО) его знать не нужно!
zltigo
Цитата(Огурцов @ Dec 14 2008, 00:11) *
Я ожидал, что вы на паскале выдадите такое же веселенькое.

Этот набор символов был веселеньким? Ну тогда я не знаю, как Вас рассмешить. Ну, разве только..., ээээ.... может пузико пощекотать?
Огурцов
Цитата(733259 @ Dec 13 2008, 21:44) *
А паскаль? А нет его по факту нигде кроме PC и под винду.

Это называется смотрю в книгу форум, вижу фигу. Только что давал линки _для AVR_.

зы: вспомнил еще одну немаловажную причину "феерического коменческого успеха Delphi" - ценовая политика. И это практически никак не связано ни с качеством языка, ни с качеством компилятора. Это хорошо в России практически все работали на ворованном или с жесткими нарушениями лицензий. А буржуи денешку, однако, считают. Наверно совру, но порядок цифр тот - когда дельфи стоила около $3000, микрософт продавала студию за $700. При том, что полный пакет для нескольких разработчиков у борланда стоил под $10k и плюсом нужно было докупать разные нужные компонеты. А микрософт тут же предоставляла бесплатную редакцию и практически полнофункциональную библиотеку(aka framework). И, в общем, когда я для себя покупал студию, особо выбором не страдал - переплачивать в несколько раз даже за любимую компанию борланд и за не менее любимую дельфи не было никакого желания - за $10k тогда нужно было работать целый год на хорошей зарплате, не есть и не пить и спать где-нибудь на лавочке.
733259
Цитата
Это называется смотрю в книгу форум, вижу фигу. Только что давал линки _для AVR_.
Вы, вероятно, просмотрели - я выше говорил о переходе на ARM. Т.е. не AVR, хотя аббревиатуры похожи.
И я посмотрел последнюю ссылку из Вашего поста, которую Вы же сочли "ничотак", доверился профессионалу. А там "Demo version, output is limited to 2K of program words." После gcc - абсолютно не серьёзно. sad.gif
Огурцов
Цитата(733259 @ Dec 13 2008, 22:28) *
Вы, вероятно, просмотрели - я выше говорил о переходе на ARM. Т.е. не AVR, хотя аббревиатуры похожи.

Нет, я не понял, что вам нужен для ARM. А ответил на "А паскаль? А нет его по факту нигде кроме PC и под винду". Если бы вы написали "А паскаль? А нет его по факту нигде кроме PC, под винду и AVR" я бы не ответил. Наверно.

Цитата(733259 @ Dec 13 2008, 22:28) *
И я посмотрел последнюю ссылку из Вашего поста, которую Вы же сочли "ничотак", доверился профессионалу. А там "Demo version, output is limited to 2K of program words." После gcc - абсолютно не серьёзно.

За деньги не серьезно ? Серьезно или на халяву или ворованное ? То GCC - плохой. Упс.
zltigo
Цитата(Огурцов @ Dec 14 2008, 01:17) *
А буржуи денешку, однако, считают.

Верно! Для коммерческих продуктов все хаки за бугром сделаны smile.gif
Цитата
борланда стоил под $10k и плюсом нужно было докупать разные нужные компонеты.

Это правильно! Ламеров нужно стричь. Кудыж-то ламер без "разных нужных компонентов" денется. Правильная политика! Вот сейчас новый владелец накидает еще "нужных компонетнов" добавит несовместимостей, и снова Delfi forever! Сообшество считающих, что они пишут на Паскале (они-же считающие, что то, что захлебывасясь от смеха запостил сюда Огурцов написано на 'C' ) очередной раз испытают прилив гордости. Ну и ладно.
733259
Цитата
Если бы вы написали "А паскаль? А нет его по факту нигде кроме PC, под винду и AVR" я бы не ответил. Наверно.
Не прав, брякнул.
Лучше так - есть, но очень мало распространен на платформах отличных от винды. Почти нет.
Цитата
За деньги не серьезно ?
Именно. Open source и бесплатно - вот магистральный путь. Плохо оттестированные, малоиспользуемые "коммерческие" поделия - не катят. Разве что в крайнем случае.
defunct
Цитата(Огурцов @ Dec 14 2008, 00:17) *
Это называется смотрю в книгу форум, вижу фигу. Только что давал линки _для AVR_.

Вы только линки нашли, а я их пробовал. По крайней мере последние два. Они неполноценные! На последнем даже неправильно работает простая арифметика!!! Далеко уедешь на корче без колес?

Цитата
"А паскаль? А нет его по факту нигде кроме PC, под винду и AVR" я бы не ответил. Наверно.

Так это - попробуйте перенести с PC какую-нить нехитрую программку написанную на Delphi или TP, на корч под AVR. И поделитесь впечатлениями.
zltigo
Цитата(defunct @ Dec 14 2008, 01:54) *
Так это - попробуйте перенести с PC какую-нить нехитрую программку написанную на Delphi или TP, на корч под AVR. И поделитесь впечатлениями.

Судя по этому воплю души Огурцова:
Цитата
поступил подло, закрыв линию delphi 7.0, и выпустил delphi 8.0. Что есть принципиально иной продукт со всех точек зрения, в т.ч. и по совместимости/переносимости исходников. Прогать на пародии естественно не эстетично, поэтому вряд ли многие прогеры перешли на D8

Вы требуете от "прогера" нечто далеко выходящее за рамки....
Leka
Цитата(defunct @ Dec 14 2008, 01:54) *
Вы только линки нашли, а я их пробовал. По крайней мере последние два. Они неполноценные! На последнем даже неправильно работает простая арифметика!!! Далеко уедешь на корче без колес?
Так это - попробуйте перенести с PC какую-нить нехитрую программку написанную на Delphi или TP, на корч под AVR. И поделитесь впечатлениями.

Пример для пробы(сам не буду) - N ферзей, взял в инете .cpp и переписал в .pas
Код
//queens_it.cpp --> *.pas
var
  arow, aleft, aright, aposs : array[0..31] of integer;
  N, count, poss, place, val, pos : integer;    
begin
  N:=1;
  repeat
  write('N=',N:2);
  count := 0;    
  val := (1 shl N) -1;
  pos := 1;
  arow[1] := 0;
  aleft[1] := 0;
  aright[1] := 0;
  aposs[1] := val shr (N div 2);
  poss := aposs[1];
  while(pos <> 0) do begin
    if(poss <>0) then begin
      place := poss and -poss;
      poss := poss and not place;
      if (pos = 1) and (poss = 0) and ((N and 1) <> 0) then
        count := count shl 1;
      if (pos <> N) then begin
        arow[pos + 1] := arow[pos] or place;
        aleft[pos + 1] := (aleft[pos] or place) shl 1;  
        aright[pos + 1] := (aright[pos] or place) shr 1;    
        aposs[pos] := poss;
        pos := pos + 1;                
        poss := not(arow[pos] or aleft[pos] or aright[pos]) and val;
        aposs[pos] := poss;
      end else count := count + 1;
    end else begin
      pos := pos - 1; poss := aposs[pos];
    end;
  end;
  if( not( (N and 1) <> 0) ) then count := count shl 1;
  writeln(' count=', count : 1);
  N:=N+1;
  until N=0;
end.
Огурцов
Цитата(zltigo @ Dec 13 2008, 23:14) *
Вы требуете от "прогера" нечто далеко выходящее за рамки....

Направление мысли правильное.
zltigo
Цитата(Огурцов @ Dec 14 2008, 11:23) *
Направление мысли правильное.

Это я давно уже понял sad.gif. Только вот "прогеры" все еще создают и создают темы "Дайте Паскаль для микроконтроллера" а не "Дайте Delphi 7 для AVR", хотя, думают ( о другом думать просто не обучены sad.gif ) на самом деле они именно о втором!
Огурцов
Цитата(defunct @ Dec 13 2008, 22:54) *
Вы только линки нашли, а я их пробовал. По крайней мере последние два. Они неполноценные! На последнем даже неправильно работает простая арифметика!!!

Не как в си ? lol.gif


Цитата(defunct @ Dec 13 2008, 22:54) *
Так это - попробуйте перенести с PC какую-нить нехитрую программку написанную на Delphi или TP, на корч под AVR. И поделитесь впечатлениями.

И чего ж не сделаешь для упертого сишника )))



Нажмите для просмотра прикрепленного файла
733259
А можно не .hex, а листинг с ассемблером (как в си smile.gif )? Интересно, серьезно.
zltigo
Цитата(Огурцов @ Dec 14 2008, 12:03) *
И чего ж не сделаешь для упертого сишника )))

Ну и к чему этот скриншот? Реально соберите этих-же наипримитивнейших ферзей целиком сделайте прошивочку для какой нибудь AVR-ки. Запустите. Выложите сюда листиги компилятора и map файл. Ну и естественно, компильнуть эти-же исходники, борлондячим Паскалем. Вот тогда и можно будет хоть увидеть хоть что-то кроме потока разговоров о том как славен PC+Win+Delphi. Пока-же на данный момент имеем некий HEX, даже на первый взгляд не имеющий отношения к исходнику на красивейшем скриншоте.
Огурцов
Цитата(zltigo @ Dec 14 2008, 09:19) *
Пока-же на данный момент имеем некий HEX, даже на первый взгляд не имеющий отнощения к исходнику на красивейшем скриншоте.

Придется вам таки сожрать свою шляпу

Нажмите для просмотра прикрепленного файла
zltigo
Цитата(Огурцов @ Dec 14 2008, 13:21) *
Придется вам таки сожрать свою шляпу

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

....
Глянул. Все без изменений.
Убедиться в том, что Вы с помощью этого дивного компилятора получили чер-те знает что очень просто - полученная "прошивка" даже не содержит в себе текстовых строк из исходника, например, " count=". Что и куда Вам засунуть сказать, или сами догадаетесь?
Огурцов
Огаога, я его в текстовом редакторе набирал. Неиначе.
zltigo
Цитата(Огурцов @ Dec 14 2008, 13:30) *
Огаога, я его в текстовом редакторе набирал. Неиначе.

Полагаю просто нажали "кнопочку" мышкй и получили "результат". Проблема только в том, что это не результат.
Leka
' count=' тут:
Код
$024B    $E200        LDI    R16, 32
$024C    $930D        ST    X+, R16
$024D    $E603        LDI    R16, 99
$024E    $930D        ST    X+, R16
$024F    $E60F        LDI    R16, 111
$0250    $930D        ST    X+, R16
$0251    $E705        LDI    R16, 117
$0252    $930D        ST    X+, R16
$0253    $E60E        LDI    R16, 110
$0254    $930D        ST    X+, R16
$0255    $E704        LDI    R16, 116
$0256    $930D        ST    X+, R16
$0257    $E30D        LDI    R16, 61
$0258    $930D        ST    X+, R16
zltigo
Цитата(Leka @ Dec 14 2008, 13:57) *
' count=' тут:

Дурдом sad.gif
Огурцов
Ну так что там на счет шляпы ? Можете какой-нибудь химией посыпать ))) Типа усилителя вкуса и аромата )))
zltigo
Цитата(Огурцов @ Dec 14 2008, 14:54) *
Ну так что там на счет шляпы ?

А чего это уже второй раз разговор о шляпах заводите?
Скомпилили простейший исходник каким-то компилятором в мутный код, допустим, что он рабочий. Ну и? Добавтьте к своей коллекции паскалевских компиляторов еще один и положите на полочку.
Огурцов
Цитата(zltigo @ Dec 14 2008, 12:16) *
А чего это уже второй раз разговор о шляпах заводите???

Такжеж вы обвинили меня в подлоге. Вот и намекаю.
zltigo
Цитата(Огурцов @ Dec 14 2008, 15:27) *
Такжеж вы обвинили меня в подлоге.

Ошибалсяsad.gif. Повторяю - получен некий мутный код. Вопрос причем тут шляпа?
И где тут про подлог:
Цитата
Полагаю просто нажали "кнопочку" мышкй и получили "результат". Проблема только в том, что это не результат.
forever failure
Абасраццо!!! Неужели !!! Случилось !!!
Наконец-то !!! То, о чём так неоднократно говорили большевики стопяццот страниц назад было выложено - прошивка для АВР, скомпилённая паскальским компилером !
Значит, всё таки паскалёвый компилятор для АВР есть в природе.

Тема раскрыта, зачот.
zltigo
Цитата(forever failure @ Dec 14 2008, 15:37) *
Значит, всё таки паскалёвый компилятор для АВР есть в природе.

Совершенно очевидно, что и не один. Тут "целый диск" поминали. И это никто не оспаривал. Вопрос в их пригодности для практического применения за пределами "контроллеров светодиодов". Качество кода опять-же при рассмотрении не впечатлило, хотя я с AVR редко работаю... Кому не лень, компильните ферзей под IAR - сравним. Хоть какая-то польза будет.
733259
Такое впечатление, что оптимизация отсутсвует:
Цитата
^NF.apas,55 :: arow[pos + 1] := arow[pos] or place;
$0126 $E340 LDI R20, @_arow
$0127 $E051 LDI R21, @@_arow
$0128 $9020 012E LDS R2, _pos
$012A $9030 012F LDS R3, _pos+1
$012C $E001 LDI R16, 1
$012D $2711 CLR R17
$012E $2C02 MOV R0, R2
$012F $2C13 MOV R1, R3
$0130 $0E00 ADD R0, R16
$0131 $1E11 ADC R1, R17
$0132 $0C00 LSL R0
$0133 $1C11 ROL R1
$0134 $2E44 MOV R4, R20
$0135 $2E55 MOV R5, R21
$0136 $0C40 ADD R4, R0
$0137 $1C51 ADC R5, R1
$0138 $2C02 MOV R0, R2
$0139 $2C13 MOV R1, R3
$013A $0C00 LSL R0
$013B $1C11 ROL R1
$013C $0E04 ADD R0, R20
$013D $1E15 ADC R1, R21
$013E $2DA0 MOV R26, R0
$013F $2DB1 MOV R27, R1
$0140 $902D LD R2, X+
$0141 $903D LD R3, X+
$0142 $9000 0232 LDS R0, _place
$0144 $9010 0233 LDS R1, _place+1
$0146 $2802 OR R0, R2
$0147 $2813 OR R1, R3
$0148 $2DA4 MOV R26, R4
$0149 $2DB5 MOV R27, R5
$014A $920D ST X+, R0
$014B $921D ST X+, R1
- видно, что 2 раза делаются сложения и сдвиги для [pos] и [роs + 1], ни одного movw почему-то, хотя вроде собрано для 88 атмеги.
Может что-то включить в настройках?
На первый взгляд код ужасен.
Rst7
Цитата
Кому не лень, компильните ферзей под IAR


Отсюда - http://www.wasm.ru/forum/viewtopic.php?pid=128277#p128277 взял только функцию queens и внес небольшие косметические изменения
Код
unsigned int count = 0;

void queens(unsigned int N)
{
  unsigned long arow[32], aleft[32], aright[32], aposs[32];
  unsigned long    poss, place, val = (1<<N)-1;
  unsigned char pos=1;
  
  arow[1]=aleft[1]=aright[1]=0;
  poss=aposs[1]=val>>(N/2);
  
  while(pos)
  {
    if(poss)
    {
      place = poss & -poss;
      poss &= ~place;
      if(pos==1 && !poss && (N & 1))count<<=1;
      if(pos!=N)
      {
    aposs[pos]=poss;
    poss=arow[pos+1]=arow[pos]|place;
    poss|=aleft[pos+1]=(aleft[pos]|place)<<1;
    poss|=aright[pos+1]=(aright[pos]|place)>>1;
    aposs[++pos]=poss=~(poss) & val;
      }
      else
      {
    ++count;
      }
    }
    else
    {
      poss=aposs[--pos];
    }
  }
}


- результат в IAR AVR 5.11B
Код
   Maximum stack usage in bytes:

     Function CSTACK RSTACK
     -------- ------ ------
     queens     526      4


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     count             2
     queens          506
      Others           6


506 bytes in segment CODE
   6 bytes in segment INITTAB
   2 bytes in segment NEAR_Z

506 bytes of CODE memory (+ 6 bytes shared)
   2 bytes of DATA memory


Можем в симуляторе глянуть количество тактов. Выбирайте N
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.