реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> xdata и Keil 3.3
Metallist64
сообщение Jan 16 2009, 08:00
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Уважаемые специалисты помогите в следующем:
при объявлении массива
unsigned char xdata DATA_BUFFER[7] ;

никак не могу изменить значения в этом массиве.
Он записывает код для отображения цифры в порт,
Фигня в том, что при объявлении в idata все пучком!
Такое ощущение будто нельзя записать в xdata.
Помогите, кто сталкивался !!!!
PS controller ADuC 848.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 16 2009, 08:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Metallist64 @ Jan 16 2009, 11:00) *
Такое ощущение будто нельзя записать в xdata.
Наверное, в качестве xdata используется On-chip RAM? Не знаю как в ADuC 848, а вот в Atmel'овских МК для её (On-chip RAM) работы нужно выставить в единицу какой-то там бит в каком-то регистре... Возможно то же самое и в Вашем контроллере. Сам Keil инструкцию для использования On-chip RAM - не генерит (может - это я не нашёл как его заставить...). Я правил startup.a51 - вставлял в него руками эту команду.
Go to the top of the page
 
+Quote Post
Metallist64
сообщение Jan 16 2009, 08:25
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Палыч! Огромное спасибо! Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.
в нем строку XRAMEN EQU 0.
После изменения на XRAMEN EQU 1 все стало хорошо.
Большое спасибо!!!
Теперь буду внимательнее смотреть, что компилятор подлинковывает!
Go to the top of the page
 
+Quote Post
Metallist64
сообщение Jan 17 2009, 22:07
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 29-01-08
Пользователь №: 34 558



Недолго я радовался. Возникла следующая проблема.
При работе с 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. и все работает.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 19 2009, 06:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Metallist64 @ Jan 18 2009, 01:07) *
От чего может зависеть такое поведение???
Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 19 2009, 06:53
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Палыч @ Jan 19 2009, 09:29) *
Конечно, причин тому может быть много, но, первое что приходит в голову: отсутствует спецификатор volatile у переменной count_for_increment.

и count_10_hz также.
Нет ли еще прерываний более высокого приоритеота, чем таймер 0, где используется count_10_hz?
Чем черт не шутит, попробуйте count_10_hz++ вынести из if.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 19 2009, 07:14
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(VladimirYU @ Jan 19 2009, 09:53) *
Чем черт не шутит, попробуйте count_10_hz++ вынести из if.
Не стоит... Другое дело, что count_10_hz забыли проинициировать нулём в начале программы. Жлательно в if записать не "==", а ">="
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jan 19 2009, 08:35
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(Палыч @ Jan 19 2009, 10:14) *
...Желательно в if записать не "==", а ">="

Согласен, но похоже у автора проблема разрешилась.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 19 2009, 09:59
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Metallist64 @ Jan 18 2009, 01:07) *
У товарища стоит тот же Keil 3.30 Он работает с хdata не устанавливая XRAMEN EQU 1 смотрел сам. Стоит XRAMEN EQU 0. и все работает.
Возможно, Ваш товарищ где-то руками поставил оператор, записывающий в регистр CFG848 (c адресом AFh) константу, котарая разрешает работать On-chip RAM
Go to the top of the page
 
+Quote Post
777777
сообщение Jan 21 2009, 05:21
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



Цитата(Metallist64 @ Jan 16 2009, 11:25) *
Нашел фаил STARD_AD.A51 . Он есть в дереве проекта.
в нем строку XRAMEN EQU 0.
После изменения на XRAMEN EQU 1 все стало хорошо.

Интересно, как содержимое файла *.A51 может влиять на С-компилятор?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 21 2009, 07:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(777777 @ Jan 21 2009, 08:21) *
Интересно, как содержимое файла *.A51 может влиять на С-компилятор?
C чего Вы решили, что влияет на С-компилятор? Влияет на работу программы. В этом файле находятся команды, влияюшие на работу частей МК. А, уж, писать программы для работы с этими частями МК можно и на ассемблере, и на Си.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 22:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016