Metallist64 0 16 января, 2009 Опубликовано 16 января, 2009 · Жалоба Уважаемые специалисты помогите в следующем: при объявлении массива unsigned char xdata DATA_BUFFER[7] ; никак не могу изменить значения в этом массиве. Он записывает код для отображения цифры в порт, Фигня в том, что при объявлении в idata все пучком! Такое ощущение будто нельзя записать в xdata. Помогите, кто сталкивался !!!! PS controller ADuC 848. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 16 января, 2009 Опубликовано 16 января, 2009 · Жалоба Такое ощущение будто нельзя записать в xdata.Наверное, в качестве xdata используется On-chip RAM? Не знаю как в ADuC 848, а вот в Atmel'овских МК для её (On-chip RAM) работы нужно выставить в единицу какой-то там бит в каком-то регистре... Возможно то же самое и в Вашем контроллере. Сам Keil инструкцию для использования On-chip RAM - не генерит (может - это я не нашёл как его заставить...). Я правил startup.a51 - вставлял в него руками эту команду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 16 января, 2009 Опубликовано 16 января, 2009 · Жалоба Палыч! Огромное спасибо! Нашел фаил STARD_AD.A51 . Он есть в дереве проекта. в нем строку XRAMEN EQU 0. После изменения на XRAMEN EQU 1 все стало хорошо. Большое спасибо!!! Теперь буду внимательнее смотреть, что компилятор подлинковывает! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Metallist64 0 17 января, 2009 Опубликовано 17 января, 2009 · Жалоба Недолго я радовался. Возникла следующая проблема. При работе с 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. и все работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба От чего может зависеть такое поведение???Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment. и count_10_hz также. Нет ли еще прерываний более высокого приоритеота, чем таймер 0, где используется count_10_hz? Чем черт не шутит, попробуйте count_10_hz++ вынести из if. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба Чем черт не шутит, попробуйте count_10_hz++ вынести из if.Не стоит... Другое дело, что count_10_hz забыли проинициировать нулём в начале программы. Жлательно в if записать не "==", а ">=" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба ...Желательно в if записать не "==", а ">=" Согласен, но похоже у автора проблема разрешилась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 19 января, 2009 Опубликовано 19 января, 2009 · Жалоба У товарища стоит тот же Keil 3.30 Он работает с хdata не устанавливая XRAMEN EQU 1 смотрел сам. Стоит XRAMEN EQU 0. и все работает.Возможно, Ваш товарищ где-то руками поставил оператор, записывающий в регистр CFG848 (c адресом AFh) константу, котарая разрешает работать On-chip RAM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
777777 0 21 января, 2009 Опубликовано 21 января, 2009 · Жалоба Нашел фаил STARD_AD.A51 . Он есть в дереве проекта. в нем строку XRAMEN EQU 0. После изменения на XRAMEN EQU 1 все стало хорошо. Интересно, как содержимое файла *.A51 может влиять на С-компилятор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 9 21 января, 2009 Опубликовано 21 января, 2009 · Жалоба Интересно, как содержимое файла *.A51 может влиять на С-компилятор?C чего Вы решили, что влияет на С-компилятор? Влияет на работу программы. В этом файле находятся команды, влияюшие на работу частей МК. А, уж, писать программы для работы с этими частями МК можно и на ассемблере, и на Си. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться