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

 
 
> Чтение и запись во внешнюю память.
Jenya7
сообщение Jun 25 2015, 05:43
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Это функции чтения/записи.
Код
void SPIEEPROM_WriteInt(uint32_t addr, uint32_t *ival)
{
  SPIEEPROM_Write(addr,sizeof(uint32_t),(uint8_t*) ival);
}

uint32_t SPIEEPROM_ReadInt(uint32_t addr)
{
    uint32_t value;
    SPIEEPROM_Read(addr, sizeof(uint32_t), (uint8_t*)&value);
    return value;
}

void SPIEEPROM_WriteFloat(uint32_t addr, float *fval)  
{
  SPIEEPROM_Write(addr,sizeof(float),(uint8_t*) fval);
}

float SPIEEPROM_ReadFloat(uint32_t addr)
{
    float value;
    SPIEEPROM_Read(addr, sizeof(float), (uint8_t*)&value);
    return value;
}

А так я тестирую.
Код
uint32_t adr;
if(argument1 == NULL)
  UART_SendString(UART0,msg_misarg);
else
{
  adr = atoi(argument1);
  if(argument2 == NULL) //read operation
  {
      #ifdef SPI_INT
      uint32_t ival = SPIEEPROM_ReadInt(adr);
      UART_SendInt(UART0,ival);
      #endif
      #ifdef SPI_FLOAT
       float fval = SPIEEPROM_ReadFloat(adr);
        UART_SendFloat(UART0,fval,2);
      #endif
    }
    else  //write operation
    {                    
        #ifdef SPI_INT
         uint32_t ival = atoi(argument2);
        SPIEEPROM_WriteInt(adr, &ival);
         #endif
         #ifdef SPI_FLOAT
          float fval = atof(argument2);
          SPIEEPROM_WriteFloat(adr, &fval);
          #endif
                    
     }
}

float пишется-читается прекрасно.
а вот с uint32_t непонятное явление - пишет (или читает?) неправильно.
вот например
запись - чтение
100 - 255
300 - 511
1000 - 1023
Сижу второй день над проблемой не могу понять где собака порылась.

Сообщение отредактировал Jenya7 - Jun 25 2015, 05:44
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Jun 25 2015, 13:37
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



OMG!!!
нашел проблему. в SPIEEPROM_Read() заменил все SPI_SendByte на SPI_TransferByte().
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 26 2015, 05:03
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Jenya7 @ Jun 25 2015, 16:37) *
нашел проблему. в SPIEEPROM_Read() заменил все SPI_SendByte на SPI_TransferByte().
Есть некоторые сомнения. Либо у вас там теперь четное количество ошибок. Мы же согласились, что и для целого, и для числа с плавающей точкой SPIEEPROM_Read() и SPIEEPROM_Write() вызываются с идентичными параметрами. Если бы проблема была (только) внутри функции чтения, то она проявлялась бы и для целого, и для числа с плавающей точкой. Я еще в предыдущем сообщении хотел предложить вам попробовать записать/прочитать с помощью SPIEEPROM_Write()/SPIEEPROM_Read() массив из 10-20 байтов - на нем ошибка была бы виднее.

Кстати, а что делает последний параметр в функции UART_SendFloat(UART0,fval,2)? Уж не количество ли знаков после запятой он указывает? Тогда вполне вероятно, что ошибку чтения в самом младшем байте вы могли просто не увидеть, потому что эти биты просто не попадают на экран.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jun 28 2015, 05:26
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Сергей Борщ @ Jun 26 2015, 11:03) *
Есть некоторые сомнения. Либо у вас там теперь четное количество ошибок. Мы же согласились, что и для целого, и для числа с плавающей точкой SPIEEPROM_Read() и SPIEEPROM_Write() вызываются с идентичными параметрами. Если бы проблема была (только) внутри функции чтения, то она проявлялась бы и для целого, и для числа с плавающей точкой. Я еще в предыдущем сообщении хотел предложить вам попробовать записать/прочитать с помощью SPIEEPROM_Write()/SPIEEPROM_Read() массив из 10-20 байтов - на нем ошибка была бы виднее.

Кстати, а что делает последний параметр в функции UART_SendFloat(UART0,fval,2)? Уж не количество ли знаков после запятой он указывает? Тогда вполне вероятно, что ошибку чтения в самом младшем байте вы могли просто не увидеть, потому что эти биты просто не попадают на экран.

Сергей вы как всегда правы. Третий параметр это количество знаков после запятой. Поэтому мы не видели ошибку.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Чтение и запись во внешнюю память.   Jun 25 2015, 05:43
- - mcheb   Цитата(Jenya7 @ Jun 25 2015, 08:43) SPIEE...   Jun 25 2015, 05:52
|- - Jenya7   Цитата(mcheb @ Jun 25 2015, 11:52) А это ...   Jun 25 2015, 06:26
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 09:26) сдела...   Jun 25 2015, 07:29
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 13:29) Ник...   Jun 25 2015, 07:41
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 10:41) но fl...   Jun 25 2015, 07:55
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 13:55) ОК....   Jun 25 2015, 08:18
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 11:18) я ста...   Jun 25 2015, 08:29
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 14:29) Мож...   Jun 25 2015, 08:55
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 11:55) IAR V...   Jun 25 2015, 09:10
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 15:10) По ...   Jun 25 2015, 09:40
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 12:40) я дум...   Jun 25 2015, 10:11
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 16:11) Пер...   Jun 25 2015, 10:17
|- - mempfis_   Цитатая смотрел и осциллографом и Logic Analizer ...   Jun 25 2015, 10:32
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 16:32) т.е...   Jun 25 2015, 10:58
|- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 13:58) пока ...   Jun 25 2015, 11:13
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 17:13) Мож...   Jun 25 2015, 11:23
- - Сергей Борщ   В функциях из первого сообщения ошибок нет. Как вы...   Jun 25 2015, 11:25
|- - Jenya7   Цитата(Сергей Борщ @ Jun 25 2015, 17:25) ...   Jun 25 2015, 11:40
- - mempfis_   Цитата(Jenya7 @ Jun 25 2015, 16:37) OMG...   Jun 25 2015, 13:42
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 19:42) М...   Jun 25 2015, 14:05
|- - mempfis_   Я во всех примерах работы с SPI всех мк с которыми...   Jun 25 2015, 15:46
|- - Jenya7   Цитата(mempfis_ @ Jun 25 2015, 21:46) Я в...   Jun 25 2015, 16:30


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

 


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


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