Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 16:40   #11
valeologiya
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 37
По умолчанию

Сегодня пол дня потратил чтобы попробовать разобраться
По совету Dante в Buildere сделал:
Цитата:
выделяешь под масив char столько памяти, сколько нужно на всё-про-всё, и копируешь туда данные так, как они должны копироваться на флеш.
По совету netrino сделал вот это:
Код:
void wr_wordEPROM(unsigned long addr, unsigned long data, int n)
{
	int i;

	for(i=0; i<n; i++)
		wr_byteEPROM(addr+i, (data>>(i*8))&0xFF);
}

void wr_fwordEPROM(unsigned long addr, float data)
{
        int i;
	char* p = (char*)(&data);

	for(i = 0; i < 4; i++)
		wr_byteEPROM(addr+i, p[i]);

}

void wr_dwordEPROM(unsigned long addr, double data)
{

	int i;
	char* p = (char*)(&data);

	for(i = 0; i < 8; i++)
		wr_byteEPROM(addr+i, p[i]);
}

long rd_wordEPROM(int addr, int n)
{
        unsigned long D;
        int i;
	char* p = (char*)(&D);

	for(i = 0; i < 4; i++)
		p[i] = rd_byteEPROM(addr+i);

	return D;
}

double rd_dwordEPROM(int addr)
{
        double D;
        int i;
	char* p = (char*)(&D);

	for(i = 0; i < 8; i++)
		p[i] = rd_byteEPROM(addr+i);

	return D;
}   

float rd_fwordEPROM(int addr)
{
        float D;
        int i;
	char* p = (char*)(&D);

	for(i = 0; i < 4; i++)
		p[i] = rd_byteEPROM(addr+i);

	return D;
}
*YAHOO*!!! Работает!
Эксперимент пошел дальше:
запись:
Код:
			char* aa = (char*) (G);

			for(i=0; i<280; i++)
			{
		   	   	wr_byteEPROM(0xA8005 + (ChainsEPROM)*284 + i, (aa[i]) & 0xFF);
			}
чтение:
Код:
				bb = (char *) EPROM_Chains + ChainsEPROM;
				
				for(i=0; i<280; i++)
				{
					bb[i] = rd_byteEPROM(0xA8005 + ChainsEPROM*284 + i);
				}
Опять работает!!! О, чудо. Как это будет работать на реальном железе буду смотреть завтра, благо прошивку перезашил. Но уже надеюсь на лучшее
valeologiya вне форума Ответить с цитированием
Старый 19.10.2009, 16:42   #12
valeologiya
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 37
По умолчанию

Эмуляция была сделана очень просто:
Код:
short EPR[10000];
void wr_byteEPROM(unsigned long addr, char data)
{
        addr -= 0xA8000;
        EPR[addr] = data;
}

char rd_byteEPROM(unsigned long addr)
{
        return EPR[addr-0xA8000];
}
valeologiya вне форума Ответить с цитированием
Старый 20.10.2009, 19:43   #13
valeologiya
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 37
По умолчанию

Не, ребят. Такая фишка на ЦСП Sharc фирмы Analog Devices не прокатывает. Проблемы опять с данными с плавающей точкой. Походу там память как-то по-другому для них организовывается. Буду читать, но пока вышел из положения домножая на 1000 и при чтении деля на 1000. Пока этого достаточно.
valeologiya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оперативная память Warhead BOX Компьютерное железо 6 31.08.2009 10:45
Память Ghennadiy Общие вопросы Delphi 9 25.08.2009 09:23
Динамическая память!!! Doholyan Паскаль, Turbo Pascal, PascalABC.NET 12 30.06.2009 17:11
оперативная память Pr1meEX Помощь студентам 3 16.06.2009 23:28
динамическая память aka_faith Общие вопросы C/C++ 47 12.06.2009 12:35