Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: xdata и Keil 3.3
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Metallist64
Уважаемые специалисты помогите в следующем:
при объявлении массива
unsigned char xdata DATA_BUFFER[7] ;

никак не могу изменить значения в этом массиве.
Он записывает код для отображения цифры в порт,
Фигня в том, что при объявлении в idata все пучком!
Такое ощущение будто нельзя записать в xdata.
Помогите, кто сталкивался !!!!
PS controller ADuC 848.
Палыч
Цитата(Metallist64 @ Jan 16 2009, 11:00) *
Такое ощущение будто нельзя записать в xdata.
Наверное, в качестве xdata используется On-chip RAM? Не знаю как в ADuC 848, а вот в Atmel'овских МК для её (On-chip RAM) работы нужно выставить в единицу какой-то там бит в каком-то регистре... Возможно то же самое и в Вашем контроллере. Сам Keil инструкцию для использования On-chip RAM - не генерит (может - это я не нашёл как его заставить...). Я правил startup.a51 - вставлял в него руками эту команду.
Metallist64
Палыч! Огромное спасибо! Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.
в нем строку XRAMEN EQU 0.
После изменения на XRAMEN EQU 1 все стало хорошо.
Большое спасибо!!!
Теперь буду внимательнее смотреть, что компилятор подлинковывает!
Metallist64
Недолго я радовался. Возникла следующая проблема.
При работе с 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. и все работает.
Палыч
Цитата(Metallist64 @ Jan 18 2009, 01:07) *
От чего может зависеть такое поведение???
Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.
VladimirYU
Цитата(Палыч @ Jan 19 2009, 09:29) *
Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.

и count_10_hz также.
Нет ли еще прерываний более высокого приоритеота, чем таймер 0, где используется count_10_hz?
Чем черт не шутит, попробуйте count_10_hz++ вынести из if.
Палыч
Цитата(VladimirYU @ Jan 19 2009, 09:53) *
Чем черт не шутит, попробуйте count_10_hz++ вынести из if.
Не стоит... Другое дело, что count_10_hz забыли проинициировать нулём в начале программы. Жлательно в if записать не "==", а ">="
VladimirYU
Цитата(Палыч @ Jan 19 2009, 10:14) *
...Желательно в if записать не "==", а ">="

Согласен, но похоже у автора проблема разрешилась.
Палыч
Цитата(Metallist64 @ Jan 18 2009, 01:07) *
У товарища стоит тот же Keil 3.30 Он работает с хdata не устанавливая XRAMEN EQU 1 смотрел сам. Стоит XRAMEN EQU 0. и все работает.
Возможно, Ваш товарищ где-то руками поставил оператор, записывающий в регистр CFG848 (c адресом AFh) константу, котарая разрешает работать On-chip RAM
777777
Цитата(Metallist64 @ Jan 16 2009, 11:25) *
Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.
в нем строку XRAMEN EQU 0.
После изменения на XRAMEN EQU 1 все стало хорошо.

Интересно, как содержимое файла *.A51 может влиять на С-компилятор?
Палыч
Цитата(777777 @ Jan 21 2009, 08:21) *
Интересно, как содержимое файла *.A51 может влиять на С-компилятор?
C чего Вы решили, что влияет на С-компилятор? Влияет на работу программы. В этом файле находятся команды, влияюшие на работу частей МК. А, уж, писать программы для работы с этими частями МК можно и на ассемблере, и на Си.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.