Перейти к содержанию
    

' 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так что там на счет шляпы ? Можете какой-нибудь химией посыпать ))) Типа усилителя вкуса и аромата )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так что там на счет шляпы ?

А чего это уже второй раз разговор о шляпах заводите?

Скомпилили простейший исходник каким-то компилятором в мутный код, допустим, что он рабочий. Ну и? Добавтьте к своей коллекции паскалевских компиляторов еще один и положите на полочку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чего это уже второй раз разговор о шляпах заводите???

Такжеж вы обвинили меня в подлоге. Вот и намекаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такжеж вы обвинили меня в подлоге.

Ошибался:(. Повторяю - получен некий мутный код. Вопрос причем тут шляпа?

И где тут про подлог:

Полагаю просто нажали "кнопочку" мышкй и получили "результат". Проблема только в том, что это не результат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абасраццо!!! Неужели !!! Случилось !!!

Наконец-то !!! То, о чём так неоднократно говорили большевики стопяццот страниц назад было выложено - прошивка для АВР, скомпилённая паскальским компилером !

Значит, всё таки паскалёвый компилятор для АВР есть в природе.

 

Тема раскрыта, зачот.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значит, всё таки паскалёвый компилятор для АВР есть в природе.

Совершенно очевидно, что и не один. Тут "целый диск" поминали. И это никто не оспаривал. Вопрос в их пригодности для практического применения за пределами "контроллеров светодиодов". Качество кода опять-же при рассмотрении не впечатлило, хотя я с AVR редко работаю... Кому не лень, компильните ферзей под IAR - сравним. Хоть какая-то польза будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое впечатление, что оптимизация отсутсвует:

^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 атмеги.

Может что-то включить в настройках?

На первый взгляд код ужасен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кому не лень, компильните ферзей под 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можем в симуляторе глянуть количество тактов. Выбирайте N

Да полагаю можно просто на листинг посмотреть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно просто на листинг посмотреть.

 

Да там все в порядке :) Ну можно конечно немного более оптимально написать, но это не ко мне :)

 

 

 

Конечно, если ограничиться 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да там все в порядке :)

Как там ... "Имеющий глаза, да увидит. Имеющий разум, да поймет"

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну так уж и быть. Оптимально было бы накодить нечто такое

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...