Отговори на тема  [ 5 мнения ] 
Алгоритъм за EEPROM 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Сря Яну 09, 2019 8:13 pm
Мнения: 19
Мнение Алгоритъм за EEPROM
Здравейте,
Извинявам се ако има темата се повтаря.
Искам да съхраня някакви стойности във вътрешна EEPROM памет на 8-битов PIC.
1 адрес е 1 байт, така че при стойности по-големи от 255 трябва да се внедри някаква логика.
Бихте ли предложили алгоритъм, който съхранява цели числа, както и такива с плаваща запетая.
Благодаря.


Сря Яну 09, 2019 8:23 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 8:21 pm
Мнения: 27949
Местоположение: София
Мнение Re: Алгоритъм за EEPROM
:) .... на тоя въпрос какъвто и отговор да се даде все няма да ти свърши работа, като че ли нещата са ти много неясни. На първо място трябва да си изясниш типовете променливи от гледна точка числовите сотйности които можеш да им присвояваш, char, byte, int, int16, short, float .... като си ги изясниш трябва да си избереш коя от тях ти върши работа. Всеки от тези типове заема определен брой байтове от паметта, дали е са 1,2,4 и т.н. зависи от декларираният тип. И като занеш това, и като разбереш как тези променливи се съхраняват в паметта ще ти стане и ясно как да ги записваш в еепрома.
С това което знаеш към момента единственото с което може да ти се помогне е да си дадеш сорс кода и някой да ти го модифицира и напише. Е може да има и хора с повечко свободно време и да ти проведът един съкратен курс, ама ми се струва че ще е взаимна загуба на време.


Сря Яну 09, 2019 9:27 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: Алгоритъм за EEPROM
Айде почваме с курса: :D
Код:
typedef union
{
    struct
    {
       unsigned char byte1;
       unsigned char byte2;
    }bytes;
    unsigned int integer;
}byte_packet;

byte_packet chislo;

chislo.integer = 65535; // (1)
//това е еквивалентно на:
byte_packet.bytes.byte1 = 255; // (2)
byte_packet.bytes.byte2 = 255;

// когато напишеш (1), стойностите в (2)
// автоматично се получават все едно си ги
// въвел, както и обратното

всъщност може и така:
Код:
typedef union
{
    struct
    {
       unsigned char bytes[2];
    }bytes;
    unsigned int integer;
}byte_packet;

byte_packet chislo;

chislo.integer = 65535; // (1)
//това е еквивалентно на:
byte_packet.bytes.bytes[0] = 255; // (2)
byte_packet.bytes.bytes[1] = 255;

_________________
https://github.com/slav4ocom/


Чет Яну 10, 2019 12:38 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Фев 07, 2012 10:22 pm
Мнения: 3074
Мнение Re: Алгоритъм за EEPROM
lubo_88 написа:
Здравейте,
Извинявам се ако има темата се повтаря.
Искам да съхраня някакви стойности във вътрешна EEPROM памет на 8-битов PIC.
1 адрес е 1 байт, така че при стойности по-големи от 255 трябва да се внедри някаква логика.
Бихте ли предложили алгоритъм, който съхранява цели числа, както и такива с плаваща запетая.
Благодаря.


8 битов ПИК - означава че регистрите (повечето :) ) и АЛУ са 8 битови.
По-широките числа са съставени от по няколко байта . Единствено ограничение за работа с по-големи числа е количеството програмна памет и количеството работна памет - дали ще ти стигнат за нужния алгоритъм. Има 8 битови контролери с 1МБ програмно пространство и доста РАМ . Има 16 битови с 256 байта РАМ и 2КБ флаш.


Чет Яну 10, 2019 7:34 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пет Ное 21, 2014 12:25 pm
Мнения: 22
Мнение Re: Алгоритъм за EEPROM
Мисля, че това ще свърши работа:
Код:
typedef union {
   struct {
      char chislo1;
      unsigned char[12] chislo2;
      unsigned long chislo3;
      long chislo4;
      int chislo5;
      float chislo6;
   };
   unsigned char b[27];
} chisla_t;
   
chisla_t chisla;
   
void Chetene(void) {
    unsigned char i;
    for (i = 0; i < sizeof (chisla); i++) {
        chisla.b[i] = DATAEE_ReadByte(MEMADDR + i);
    }
}

void Pisane(void) {
    unsigned char i;
    for (i = 0; i < sizeof (chisla); i++) {
        DATAEE_WriteByte(MEMADDR + i, chisla.b[i]);
    }
}


Чет Яну 10, 2019 8:37 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни