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

 
 
> как создать 24 битный указатель (code vision)
ysmat
сообщение Oct 31 2012, 09:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



нужно создать указатель для работы с внешней памятью
чип atxmega128a1

Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
haker_fox
сообщение Oct 31 2012, 10:58
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (ysmat @ Oct 31 2012, 18:55) *
нужно создать указатель для работы с внешней памятью
чип atxmega128a1

Создайте 32-х битный и не мучайтесь)


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
ysmat
сообщение Oct 31 2012, 11:21
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



Цитата(haker_fox @ Oct 31 2012, 14:58) *
Создайте 32-х битный и не мучайтесь)

вопрос как создать смотрел в гугле не нашел
походу в code vision нет такого понятия как размер указателя

Сообщение отредактировал ysmat - Oct 31 2012, 11:22
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Oct 31 2012, 11:31
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(ysmat @ Oct 31 2012, 15:21) *
походу в code vision нет такого понятия как размер указателя

Есть (обязан быть) stdint.h, а в нем может быть uint24_t (возможны вариации)


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 11:57
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(MrYuran @ Oct 31 2012, 13:31) *
Есть (обязан быть) stdint.h, а в нем может быть uint24_t (возможны вариации)

Может там и есть 3-х байтовай тип данных, но при чём тут это?
Вопрос о том, как адресовать более 64к байт данных - к xmega может подключаться до 16 МБ памяти.
Go to the top of the page
 
+Quote Post
ysmat
сообщение Oct 31 2012, 12:00
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



вот файл stdint.h
/*
CodeVisionAVR C Compiler
© 1998-2008 Pavel Haiduc, HP InfoTech S.R.L.

stdint.h standard header
*/

#ifndef _STDINT_INCLUDED_
#define _STDINT_INCLUDED_

typedef signed char int8_t;
typedef unsigned char uint8_t;

typedef short int16_t;
typedef unsigned short uint16_t;

typedef long int32_t;
typedef unsigned long uint32_t;

// An integer type large enough to be able to hold a pointer to RAM.
#ifdef _MODEL_TINY_
typedef signed char intptr_t;
typedef unsigned char uintptr_t;
#else
typedef short intptr_t;
typedef unsigned short uintptr_t;
#endif

// An integer type large enough to be able to hold a pointer to FLASH.
#if defined _MODEL_MEDIUM_ | defined _MODEL_LARGE_
typedef long flash_intptr_t;
typedef unsigned long flash_uintptr_t;
#else
typedef short flash_intptr_t;
typedef unsigned short flash_uintptr_t;
#endif

// An integer type large enough to be able to hold a pointer to EEPROM.
typedef short eeprom_intptr_t;
typedef unsigned short eeprom_uintptr_t;

#endif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 31 2012, 12:26
Сообщение #7


Гуру
******

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



Цитата(ysmat @ Oct 31 2012, 15:21) *
походу в code vision нет такого понятия как размер указателя

Уж не знаю: какая у Вас версия ? У себя я нашёл версию 1.24.7f... Подозреваю, что она совсем не последняя - всё-таки семилетней давности... Но в Help'е явно сказано: указатель для модели памяти tiny - 8 бит, small - 16 бит. И всё...
Загляните в Help своего транслятора: Menu -> Help -> Help topics -> CodeVisionAVR C Compiler Reference -> Pointers
Go to the top of the page
 
+Quote Post
ysmat
сообщение Oct 31 2012, 15:29
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



Цитата
Вопрос о том, как адресовать более 64к байт данных - к xmega может подключаться до 16 МБ памяти.

а можно ли попробывать сделать эту адресацию напрямую на asme
или будут глюки
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 15:57
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ysmat @ Oct 31 2012, 17:29) *
а можно ли попробывать сделать эту адресацию напрямую на asme
или будут глюки


На асме всё можно.
Но всё-таки что вы адресовать хотите и как предполагаете работать с данными?
Короче говоря, что нужно-то?
Go to the top of the page
 
+Quote Post
ysmat
сообщение Oct 31 2012, 18:24
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



к атхмеге128 подключен lcd екран как внешняя память
нужно работать с ним

пример
Код
void Cls(unsigned char col)// ЗАЛИВКА ЦВЕТОМ
{
unsigned int i;
unsigned int j;
unsigned char  *VRAM; // АДРЕС ДИСПЛЕЯ

VRAM = 0x020000; // НАЧАЛЬНЫЙ АДРЕС ДИСПЛЕЯ ЗА ПРЕДЕЛАМИ ВНУТРЕННЕЙ ПАМЯТИ


  for (i = 0; i < 272; i++)
    {
      for (j = 0; j < 480; j++) {*VRAM++ = col;}
    }
}
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 20:11
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ysmat @ Oct 31 2012, 20:24) *
Код
void Cls(unsigned char col)// ЗАЛИВКА ЦВЕТОМ
{
unsigned int i;
unsigned int j;
unsigned char  *VRAM; // АДРЕС ДИСПЛЕЯ

VRAM = 0x020000; // НАЧАЛЬНЫЙ АДРЕС ДИСПЛЕЯ ЗА ПРЕДЕЛАМИ ВНУТРЕННЕЙ ПАМЯТИ


  for (i = 0; i < 272; i++)
    {
      for (j = 0; j < 480; j++) {*VRAM++ = col;}
    }
}

Да, такое на асме сделать можно, но нужно учесть какий регистры компилятор использует.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 31 2012, 20:41
Сообщение #12


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



А так почему нельзя сделать

unsigned long i;
unsigned char *VRAM;
VRAM=0x00020000;
for(i=0;i<130560;i++) *VRAM++=colour;


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 21:27
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(=GM= @ Oct 31 2012, 22:41) *
А так почему нельзя сделать

Можно и так, но вдруг окажется что сделать 130560 раз инкремент двухбатого числа быстрее 130560 инкрементов 4-х байтового.
Go to the top of the page
 
+Quote Post
ysmat
сообщение Oct 31 2012, 21:48
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 60
Регистрация: 18-01-09
Пользователь №: 43 553



Цитата(=GM= @ Oct 31 2012, 23:41) *
А так почему нельзя сделать

unsigned long i;
unsigned char *VRAM;
VRAM=0x00020000;
for(i=0;i<130560;i++) *VRAM++=colour;


Error: D:\PROECT\AVR\SDR_avr_2\SDR.c(1285): a value of type 'long' can't be assigned to an entity of type 'unsigned char *'

в любом случаи главная проблема не решена
модель памяти small - указатели 16 бит
бессмысленно пытаться записать туда большее

кстати у avr-gcc вроде то же 16 бит не понятно как он работает с xмегами
ведь он идет в составе avrstudio6
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 31 2012, 22:26
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ysmat @ Oct 31 2012, 23:48) *
Error: D:\PROECT\AVR\SDR_avr_2\SDR.c(1285): a value of type 'long' can't be assigned to an entity of type 'unsigned char *'

Модель - моделью, а строка
Код
VRAM=0x00020000;

всё равно должна вызвать ошибку.
Где-то так надо бы:
Код
VRAM=(unsigned char *)0x00020000;



Цитата(ysmat @ Oct 31 2012, 23:48) *
в любом случаи главная проблема не решена
модель памяти small - указатели 16 бит
бессмысленно пытаться записать туда большее

Что больше не бывает?
Ещё одна причина бросить CodeVision...

Цитата(ysmat @ Oct 31 2012, 23:48) *
кстати у avr-gcc вроде то же 16 бит не понятно как он работает с xмегами
ведь он идет в составе avrstudio6

У атмела должна быть апнота по работе с EBI, хотя бы для Иара.
Работают они там с SRAM так:

Код
#define SDRAM(addr) ((uint8_t *) SDRAM_ADDR)[addr] //!< Macro to access SDRAM.
#define SRAM(addr)  ((uint8_t *) SRAM_ADDR)[addr] //!< Macro to access SRAM.
    for (uint16_t i = 0; i < 1000; ++i) {
        SRAM(i) = (uint8_t) (i & 0xff);
    }
    
    // Copy to SDRAM.
    for (uint16_t i = 0; i < 1000; ++i) {
        SDRAM(i) = SRAM(i);
    }

Модель - Large.
Интересно где у GCC она включается?

Go to the top of the page
 
+Quote Post

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

 


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


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