Leka 1 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба ' 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 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба ' count=' тут: Дурдом :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Ну так что там на счет шляпы ? Можете какой-нибудь химией посыпать ))) Типа усилителя вкуса и аромата ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Ну так что там на счет шляпы ? А чего это уже второй раз разговор о шляпах заводите? Скомпилили простейший исходник каким-то компилятором в мутный код, допустим, что он рабочий. Ну и? Добавтьте к своей коллекции паскалевских компиляторов еще один и положите на полочку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба А чего это уже второй раз разговор о шляпах заводите??? Такжеж вы обвинили меня в подлоге. Вот и намекаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Такжеж вы обвинили меня в подлоге. Ошибался:(. Повторяю - получен некий мутный код. Вопрос причем тут шляпа? И где тут про подлог: Полагаю просто нажали "кнопочку" мышкй и получили "результат". Проблема только в том, что это не результат. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
forever failure 0 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Абасраццо!!! Неужели !!! Случилось !!! Наконец-то !!! То, о чём так неоднократно говорили большевики стопяццот страниц назад было выложено - прошивка для АВР, скомпилённая паскальским компилером ! Значит, всё таки паскалёвый компилятор для АВР есть в природе. Тема раскрыта, зачот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Значит, всё таки паскалёвый компилятор для АВР есть в природе. Совершенно очевидно, что и не один. Тут "целый диск" поминали. И это никто не оспаривал. Вопрос в их пригодности для практического применения за пределами "контроллеров светодиодов". Качество кода опять-же при рассмотрении не впечатлило, хотя я с AVR редко работаю... Кому не лень, компильните ферзей под IAR - сравним. Хоть какая-то польза будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
733259 0 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Такое впечатление, что оптимизация отсутсвует: ^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 5 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Кому не лень, компильните ферзей под 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Можем в симуляторе глянуть количество тактов. Выбирайте N Да полагаю можно просто на листинг посмотреть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба можно просто на листинг посмотреть. Да там все в порядке :) Ну можно конечно немного более оптимально написать, но это не ко мне :) Конечно, если ограничиться 15ю ферзями, то будет заметно короче (вместо long - short), и быстрее Maximum stack usage in bytes: Function CSTACK RSTACK -------- ------ ------ queens 258 4 Segment part sizes: Function/Label Bytes -------------- ----- count 2 queens 316 Others 6 316 bytes in segment CODE 6 bytes in segment INITTAB 2 bytes in segment NEAR_Z 316 bytes of CODE memory (+ 6 bytes shared) 2 bytes of DATA memory Листинги в аттаче lst.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Да там все в порядке :) Как там ... "Имеющий глаза, да увидит. Имеющий разум, да поймет" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба Ну так уж и быть. Оптимально было бы накодить нечто такое typedef unsigned char UREG; typedef unsigned long QV; typedef struct { QV arow; QV aleft; QV aright; QV aposs; }QA; unsigned int queens(unsigned int N, unsigned int count) { QA a[32]; QV poss, place, val = (1<<N)-1; UREG pos=1; a[1].arow=a[1].aleft=a[1].aright=0; poss=a[1].aposs=val>>(N/2); while(pos) { QA *p=a+pos; if(poss) { place = poss & -poss; poss &= ~place; if(pos==1 && !poss && (N & 1))count<<=1; if(pos!=N) { p[0].aposs=poss; poss=p[1].arow=p[0].arow|place; poss|=p[1].aleft=(p[0].aleft|place)<<1; poss|=p[1].aright=(p[0].aright|place)>>1; p[1].aposs=poss=~(poss) & val; pos++; } else { ++count; } } else { poss=p[-1].aposs; pos--; } } return count; } Maximum stack usage in bytes: Function CSTACK RSTACK -------- ------ ------ queens 524 4 Segment part sizes: Function/Label Bytes -------------- ----- queens 434 434 bytes in segment CODE 434 bytes of CODE memory Errors: none Warnings: none Листинг в аттаче lst2.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 14 декабря, 2008 Опубликовано 14 декабря, 2008 · Жалоба А результат работы АВР как смотреть будем? Так что для корректного сравнения надо еще аналогичный вывод приделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться