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

Chipcon CC1010. Пытаюсь запихнуть переменные в pdata. Дошел уже до исступления...

Среда Keil uVision2. Поверх поставлен CC1010IDE. Выбрано устройство "CC1010_debug".

 

Пытаюсь разместить массив в pdata и создать на него указатель, расположенный в data.

 

char pdata massiv[32];

char pdata * data ptr_massiv = massiv;

 

code void main()

{

*ptr_massiv = 0xAA;

*(ptr_massiv + 1) = 0xBB;

}

 

В результате при дебаггинге в окне "Watch" смотрю на содержание массива "massiv" - пустой (все элементы равны нулю). Смотрю на *ptr_massiv и *(ptr_massiv + 1) - отображается, что там содержится 0xAA и 0xBB, соответственно!!! При этом ptr_massiv указывает именно на "голову" массива "massiv"! :wacko:

 

В настройках проекта стоит:

Memory model: Compact (variables in PDATA)

Стоит галка напротив "Use On-chip XDATA"

 

В startup.a51:

PPAGEENABLE EQU 1

PPAGE EQU 0

PPAGE_SFR DATA 092H

 

PS. Если массив запихнуть в data или xdata, то все работет ок.

Изменено пользователем Kenelm

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


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

Я плохо знаю CC1010. Возможно, нужно установить некий бит какого-то регистра, чтобы было возможно обращение к внутренней памяти. Возможно, по-умолчанию, обращение идёт в внешней памяти, которой нет?

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


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

Среда Keil uVision2. Поверх поставлен CC1010IDE. Выбрано устройство "CC1010_debug".

В результате при дебаггинге в окне "Watch" смотрю на содержание массива "massiv" - пустой (все элементы равны нулю). Смотрю на *ptr_massiv и *(ptr_massiv + 1) - отображается, что там содержится 0xAA и 0xBB, соответственно!!! При этом ptr_massiv указывает именно на "голову" массива "massiv"! :wacko:

 

PS. Если массив запихнуть в data или xdata, то все работет ок.

 

Добрый день.

 

Вы смотрели содержимое массива именно в Watch? Проверьте содержимое в окне memory, и введите там адрес вашего массива (только префикс типа памяти не забудьте). Если там верная информация (а она должна быть именно такой, потому что через ваши указатели ptr_massiv информация отображается правильная), то не беспокойтесь. Это глюк кейла. Я помню напарывался на подобный эффект, когда в ватчах отображалось не то что там реально находилось. Так что дамп ОЗУ лучший инструмент. Ну и посмотрите карту памяти, реально переменная попала в нужную область или нет (это как второй инструмент контроля над компилятором).

 

Удачи.

 

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


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

Поскольку всё хорошо работает с xdata, но не работает с pdata, то тут какая-то "беда" с командами типа "movx @ri, a".

Вот что нашел в DS:

The instructions MOVX A, @Ri and MOVX @Ri, A moves data to (from) the accumulator, from (to) the address given by the memory page address register MPAGE and the register Ri (R0 or R1). MPAGE gives the 8 most significant address bits, while the register Ri gives the 8 least significant bits. In many 8051 implementations, this type of external RAM access is performed using P2 to give the most significant address bits. Existing software may therefore have to be adapted to make use of MPAGE instead of P2.

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


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

Поскольку всё хорошо работает с xdata, но не работает с pdata, то тут какая-то "беда" с командами типа "movx @ri, a".

Вот что нашел в DS:

Угу, я на эту фразу много раз медитировал. :) MPAGE по умолчанию сбрасывается в 0х00. Ну а мне и надо писать в начальную страницу xdata.

 

Вы смотрели содержимое массива именно в Watch? Проверьте содержимое в окне memory, и введите там адрес вашего массива (только префикс типа памяти не забудьте). Если там верная информация (а она должна быть именно такой, потому что через ваши указатели ptr_massiv информация отображается правильная), то не беспокойтесь.

 

В том-то все и дело, что смотрел и так и так. "ptr_massiv" указывает на "X:00". Смотрю память по этому адресу - пусто! Адрес &massiv[0] - "X:00". При этом *ptr_massiv = 0xAA, а massiv[0] = 0x00. Я близок к безумию...

 

Ну и посмотрите карту памяти, реально переменная попала в нужную область или нет (это как второй инструмент контроля над компилятором).

Память большущая - вручную тяжко её всю шерстить...

Изменено пользователем Kenelm

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


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

В Keil про СС1010 есть ещё загадочная фраза "Full System Debugging with Keil 5Vision". Что такое "5Vision"? Букву "мю" не смогли "нарисовать"? Или имеется в виду какая-то конкретная версия?

 

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


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

В Keil про СС1010 есть ещё загадочная фраза "Full System Debugging with Keil 5Vision". Что такое "5Vision"? Букву "мю" не смогли "нарисовать"? Или имеется в виду какая-то конкретная версия?

 

С этим вообще отдельная песТня. 5Vision - это походу все-таки uVision. Но! Симулятор Keil по умолчанию некорректно работает с CC1010 (не отображается второй UART, некоторые прерывания и т. д.). Для полноценной симуляции поверх Кейла нужно ставить пришлепку CC1010IDE (бесплатно валяется на сайте Texas Instruments). Однако CC1010IDE совместим только со вторым Кейлом. :(

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


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

С этим вообще отдельная песТня.

Так, может быть, симулятор в этой части - "кривой"? Я, вообще, слабо симуляторам доверяю...

 

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


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

Поскольку в настройках стоит по умолчанию модель Compact, то по умолчанию переменные размещаются в PDATA.

char pdata * data ptr_massiv = massiv; // размещается по умолчанию

Чтобы запихнуть ее в DATA надо указать принудительно тип памяти

data char pdata *data ptr_massiv = massiv; // принудительно в дата

Размещение глобальных переменных можно найти в MAP-файле.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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