[an error occurred while processing this directive] [an error occurred while processing this directive]
может поможет...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено bvk 08 февраля 2002 г. 14:07
В ответ на: Подскажите чайнику по IAR_C (AVR) отправлено RS 08 февраля 2002 г. 11:04


это хидер (пусть proto.h) - он где-то определен и
его надо включать, где нужно


#define $pos_1 0 // есть переменные: pos_1, faza_0 и т.д.
#define $faza_0 1 // здесь им присваиваются номера
#define $count_time 2
#define $delay_time 3
#define $korr_interval 4
#define $filtr 5
#define $scale_NO_5ma 6
#define $scale_SO_5ma 7
#define $scale_NO 8
#define $scale_SO 9
#define $A1 10
#define $A2 11
#define $A3 12
#define $A4 13
#define $A5 14
#define $B1 15
#define $B2 16
#define $B3 17
#define $B4 18
#define $B5 19
#define $last 19
#define $zNO 20
#define $zSO 21

а в этом файле работа с eeprom

#include

UC load1( UC ); // UC - это unsigned char
int load2( UC );
float load4( UC );

UC a, b;
int c, d;
float e, f;

flash int leng[] = {
1, // pos_1 // а в этой табличке находятся
1, // faza_0 // длины хранимых переменных
1, // count_time // ( в байтах )
1, // delay_time
2, // korr_interval
4, // filtr
4, // scale_NO_5ma
4, // scale_SO_5ma
4, // scale_NO
4, // scale_SO
4, // A1
4, // A2
4, // A3
4, // A4
4, // A5
4, // B1
4, // B2
4, // B3
4, // B4
4, // B5
4, // zNO
4, // zSO
};

//----------------------------------------

int getadr( UC num ) {
int a; UC i;

for( a=0, i=0; i return( a );
}
//--- записать байт -------------------------------------
void save1( UC *byte, UC n ) {
int adr;

adr = getadr(n);
_EEPUT(adr, *byte);
}
//--- записать слово -------------------------------------
void save2( int *word, UC n ) {
int adr;
UC p[2];

adr = getadr(n);
memcpy(p,word,2);
_EEPUT(adr, p[0]);
_EEPUT(adr+1, p[1]);
}
//--- записать float -------------------------------------
void save4( float *real, UC n ) {
int adr;
UC p[4];

adr = getadr(n);
memcpy( p, real, 4 );
_EEPUT(adr, p[0]);
_EEPUT(adr+1, p[1]);
_EEPUT(adr+2, p[2]);
_EEPUT(adr+3, p[3]);
}
//--- прочитать байт -------------------------------------
UC load1( UC n ) {
int adr;
UC byte;

adr = getadr(n);
_EEGET( byte, adr );
return( byte );
}
//--- прочитать слово -------------------------------------
int load2( UC n ) {
int adr;
UC p[2];
int word;

adr = getadr(n);
_EEGET( p[0], adr );
_EEGET( p[1], adr+1 );
memcpy(&word,p,2);

return( word );
}
//--- прочитать float -------------------------------------
float load4( UC n ) {
int adr;
UC p[4];
float real;

adr = getadr(n);
_EEGET(p[0], adr );
_EEGET(p[1], adr+1 );
_EEGET(p[2], adr+2 );
_EEGET(p[3], adr+3 );
memcpy(&real,p,4);

return( real );
}


//--- а в этом файле идет работа с функциями чтения/записи eeprom

extern UC
pos_1, faza_0, count_time, delay_time;

extern int
korr_interval;

extern float
filtr, scale_NO_5ma, scale_SO_5ma,
scale_NO, scale_SO,
A1, A2, A3, A4, A5,
B1, B2, B3, B4, B5,
zNO, zSO;

void init_params(void) {

// вот здесь переменные инициируются из eeprom

pos_1 = load1( $pos_1 );
faza_0 = load1( $faza_0 );
count_time = load1( $count_time );
delay_time = load1( $delay_time );
korr_interval = load2( $korr_interval );
filtr = load4( $filtr );
scale_NO_5ma = load4( $scale_NO_5ma );
scale_SO_5ma = load4( $scale_SO_5ma );
scale_NO = load4( $scale_NO );
scale_SO = load4( $scale_SO );
A1 = load4( $A1 );
A2 = load4( $A2 );
A3 = load4( $A3 );
A4 = load4( $A4 );
A5 = load4( $A5 );
B1 = load4( $B1 );
B2 = load4( $B2 );
B3 = load4( $B3 );
B4 = load4( $B4 );
B5 = load4( $B5 );
zNO = load4( $zNO );
zSO = load4( $zSO );
}


// а вот пример записи:

save1( &pos_1, $pos_1 ); // пишу char

save2( &korr_interval, $korr_interval ); // int

save4( &scale_NO_5ma, $scale_NO_5ma ); // float

Мэтров, конечно, стошнит от этой красоты, но все прет отлично.
Разбирайся...

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru