|
Чтение и запись во внешнюю память. |
|
|
|
Jun 25 2015, 05:43
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jun 26 2015, 05:03
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jun 28 2015, 05:26
|
Профессионал
    
Группа: Участник
Сообщений: 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)? Уж не количество ли знаков после запятой он указывает? Тогда вполне вероятно, что ошибку чтения в самом младшем байте вы могли просто не увидеть, потому что эти биты просто не попадают на экран. Сергей вы как всегда правы. Третий параметр это количество знаков после запятой. Поэтому мы не видели ошибку.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|