Цитата(satnettv @ Sep 5 2007, 14:11)

Со структорой не совсем понятно как-то (если можно распишите на примере). По поводу оп-кодов для памяти все изучил, смысл общий понятен.
У меня задача состоит в следующем:
написать 2 процедуры чтения и записи в память (т.е. в какой-то момент формируются строки по n-символов, далее их нужно записывать в память, как-то считать кол-во строк записанных в память, а затем в какой-то момент времени считать все строки из памяти). Вот в принципе что мне надо. Если вас не затруднит не могли бы ли вы расписать этот процесс по подробнее.
а еще интересует процесс упаовки данных (т.е. какое-то примитивное сжатие данных) перед тем как посылать в память.
#include <mega128.h>
#include <stdio.h>
#include <spi.h>
#include <delay.h>
#define WREN 0x06 //Set Write Enable Latch
#define WRDI 0x04 //Write Disable
#define RDSR 0x05 //Read Status Register
#define WRSR 0x01 //Write Status Register
#define READ 0x03 //Read Memory Data
#define WRITE 0x02 //Write Memory Data
#define Ready 1;
#define SPIF 0x80 //Флаг прерывания по SPI
#define Zapis 80 //размер строки
#define Dop 30 // смещение
char Zap[128] //запись из памяти
char nmbzap=0; //количество записей в памяти
char TOP_ADDR=256;
unsigned char temp = 0x80;
// SPI interrupt service routine
interrupt [SPI_STC] void spi_isr(void)
{
unsigned char data;
data=SPDR;
}
/* проверка занятости интерфейса SPI*/
char ReadySPI(void)
{
return (SPSR>>7); // 1 - ready
}
/* чтение из памяти одного или нескольких байт */
/* Чтение записи*/
char ReadSPI(int address)
{
if ((address) <= TOP_ADDR)
{
if (SPSR & temp) // проверка занятости интерфейса SPI
{
SPCR = 0x00; //запрет прерывания по SPI
SPDR = READ; //передать оп-код READ
return SPDR;
}
}
}
/* Запись */
char WriteSPI(int mesto, char Dzap)
{
if (start_add <= TOP_ADDR)
{
if (SPSR & temp) // проверка занятости интерфейса SPI
{
SPDR = WREN; // оп-код подготовки записи
SPDR = WRITE; // оп-код записи
SPAR = nmbzap*Zapis+Dop; // адрес (номер записи, ус\множенный на размер записи + смещение)
SPDR = Dzap; // данные
nmbzap++; // счетчик записей в памяти
}
}
}
/*передача данных из памяти дальше*/
if ( 1==1 ) //если есть коннект
{
if (nmbzap!=0) //есть записи в памяти?
{
for(i=0; i<nmbzap; i++) // считываем сохраненные записи из памяти
{
Zap[i] = ReadSPI(i*Zapis+Dop); // i-я строка из памяти
}
nmbzap=0;
}
}
/******************************/
вот пример моего кода, объясните, что я делаю не так.