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

xdata и Keil 3.3

Уважаемые специалисты помогите в следующем:

при объявлении массива

unsigned char xdata DATA_BUFFER[7] ;

 

никак не могу изменить значения в этом массиве.

Он записывает код для отображения цифры в порт,

Фигня в том, что при объявлении в idata все пучком!

Такое ощущение будто нельзя записать в xdata.

Помогите, кто сталкивался !!!!

PS controller ADuC 848.

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


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

Такое ощущение будто нельзя записать в xdata.
Наверное, в качестве xdata используется On-chip RAM? Не знаю как в ADuC 848, а вот в Atmel'овских МК для её (On-chip RAM) работы нужно выставить в единицу какой-то там бит в каком-то регистре... Возможно то же самое и в Вашем контроллере. Сам Keil инструкцию для использования On-chip RAM - не генерит (может - это я не нашёл как его заставить...). Я правил startup.a51 - вставлял в него руками эту команду.

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


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

Палыч! Огромное спасибо! Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.

в нем строку XRAMEN EQU 0.

После изменения на XRAMEN EQU 1 все стало хорошо.

Большое спасибо!!!

Теперь буду внимательнее смотреть, что компилятор подлинковывает!

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


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

Недолго я радовался. Возникла следующая проблема.

При работе с xdata в прерываниях возникают постоянные траблы.

Конструкции вида :

void timer0 (void) interrupt 1        
{
    if(count_10_hz++ == 100)
    {
        count_10_hz = 0;                
        count_for_increment++;
    }
    return;
}

толи вешают МК толи, что. Но на индикаторе содержимое count_for_increment постоянно останавливается на разных значениях в рависимости от count_10_hz.

Процессор 848 AduC. Причем ступор полный.

Может кто сталкивался с этим??? От чего может зависеть такое поведение???

 

ПС У товарища стоит тот же Keil 3.30 Он работает с хdata не устанавливая XRAMEN EQU 1 смотрел

сам. Стоит XRAMEN EQU 0. и все работает.

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


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

От чего может зависеть такое поведение???
Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.

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


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

Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.

и count_10_hz также.

Нет ли еще прерываний более высокого приоритеота, чем таймер 0, где используется count_10_hz?

Чем черт не шутит, попробуйте count_10_hz++ вынести из if.

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


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

Чем черт не шутит, попробуйте count_10_hz++ вынести из if.
Не стоит... Другое дело, что count_10_hz забыли проинициировать нулём в начале программы. Жлательно в if записать не "==", а ">="

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


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

...Желательно в if записать не "==", а ">="

Согласен, но похоже у автора проблема разрешилась.

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


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

У товарища стоит тот же Keil 3.30 Он работает с хdata не устанавливая XRAMEN EQU 1 смотрел сам. Стоит XRAMEN EQU 0. и все работает.
Возможно, Ваш товарищ где-то руками поставил оператор, записывающий в регистр CFG848 (c адресом AFh) константу, котарая разрешает работать On-chip RAM

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


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

Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.

в нем строку XRAMEN EQU 0.

После изменения на XRAMEN EQU 1 все стало хорошо.

Интересно, как содержимое файла *.A51 может влиять на С-компилятор?

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


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

Интересно, как содержимое файла *.A51 может влиять на С-компилятор?
C чего Вы решили, что влияет на С-компилятор? Влияет на работу программы. В этом файле находятся команды, влияюшие на работу частей МК. А, уж, писать программы для работы с этими частями МК можно и на ассемблере, и на Си.

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


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

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

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

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

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

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

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

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

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

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