На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
    > МК-51 массив
      p.s. А еще бывают вариации 8051 с двумя DPTR, тогда вместо гонять туда-сюжа содержимое DPTR достаточно бит DPSEL в управляющем регистре инвертировать.
        То же самое надо сделать на си-51, но когда я пишу
        ExpandedWrap disabled
          int mas[1500];

        получаю ошибку auto segment too large
          Где пишешь? Локально в функции?
            да
              В настройках компилятора надо указать использование внешнего ОЗУ.
                Объявил массив так
                ExpandedWrap disabled
                   array: ds 1500
                  array_address xdata array + 0

                насколько это правильно?
                Сообщение отредактировано: hawk1 -
                  ExpandedWrap disabled
                    void main (void) {
                     
                    /*------------------------------------------------
                    Setup the serial port for 1200 baud at 16MHz.
                    ------------------------------------------------*/
                    #ifndef MONITOR51
                        SCON  = 0x50;               /* SCON: mode 1, 8-bit UART, enable rcvr      */
                        TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
                        TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
                        TR1   = 1;                  /* TR1:  timer 1 run                          */
                        TI    = 1;                  /* TI:   set TI to send first char of UART    */
                    #endif
                     
                      while (1) {
                         const int n = 1500;
                         int array[1500];
                         int i;
                         int sum;
                         int min;
                         int avg;
                         for (i = 0; i < n; i++)
                            array[i] = rnd();  
                         sum = 0;
                         min = array[0];
                         for (i = 0; i < n; i++)
                         {
                            sum += array[i];
                            if (array[i] < min)
                              min = array[i];
                         }
                         avg = sum / n;
                         P0 = avg / 2 + min;
                         printf("%d",P0);
                      }
                    }

                  \получаю предупреждение 'rnd'' missing function-prototype
                    Ты C сейчас изучаешь что ли?
                      Попросили сделать.
                        hawk1, на си надо явно указать, что данные живут во внешней ОЗУ.

                        В sdcc это делается так:
                        ExpandedWrap disabled
                          char __xdata mas[100500];


                        В Keil ЕМНИП оно так и называется xdata.
                          Программу написал, как теперь проверить ее правильность?
                            Откомпилировать? Запустить под отладчиком? Залить в реальное устройство и посмотреть?
                              В лбщем задание такое. Написать программу на асм 51,выполняющую обработку массива, хранящегося во внешней памяти. Алгоритм avg/2+min. Результат выводится через последователдьный порт. На си сджелал, на асм никак
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0358 ]   [ 15 queries used ]   [ Generated: 19.04.24, 14:37 GMT ]