This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

pstorage reading other values than writing

Hi!

Maybe I'm doing something wrong (very possible), but for example, when I want to store array of 3 uint8_t values I use:

uint8_t dataToStore[3];
dataToStore[0] = 11;
dataToStore[1] = 22;
dataToStore[2] = 33;

retval = pstorage_store(&block_handle, dataToStore, 3 , 0);
	if (retval == NRF_SUCCESS)
	{
			// Store successfully requested. Wait for operation result.
	}
	else
	{
			// Failed to request store, take corrective action.
	}

and when I want to read it from the memory to variable I use:

   retval = pstorage_block_identifier_get(&persistant_memory_handle, 0, &block_handle);
	if (retval == NRF_SUCCESS)
	{
		uint8_t           dest_data[3];
		 //Request to read 3 bytes from block at an offset of 0 bytes.
		retval = pstorage_load(dest_data, &block_handle, 3, 0);
		if (retval == NRF_SUCCESS)
		{
                         // here dest_data should be: 11, 22, 33 but it gets different values.
		}
		else
		{
				// Failed to load, take corrective action.
		}

Received value is always different than stored. What can be the reason?

  • I'd updated previous post with a full code, please take a look. Thank you!:)

  • You need to call pstorage_block_identifier_get before calling pstorage_store.

  • Oh, yeah, you need to clear your allocated memory with pstorage_clear before you can store your data in it.

  • It was called before (app starts from reading values, store is performed only when configuration is changed), but now I added it directly before:

    	retval = pstorage_block_identifier_get(&persistant_memory_handle, 0, &block_handle);
    	if (retval == NRF_SUCCESS)
    	{
    		retval = pstorage_store(&block_handle, receivedData, 4 , 0);
    		if (retval == NRF_SUCCESS)
    		{
    				// Store successfully requested. Wait for operation result.
    		}
    		else
    		{
    				// Failed to request store, take corrective action.
    		}
    	}
    	else
    	{
    			// Failed to get block id, take corrective action.
    	}
    

    but still read value is 0x00,0x00,0x00,0x00

  • Ok, so I should perform pstorage_clear(&base_handle, 16) before writing? But now I assume that pstorage_write should be placed in event handler (I should also store somewhere identifier of "write position", to support multiple variables storage) or can I put it in if(retval == NRF_SUCCESS) { } clause?

    Or maybe using pstorage_update should solve this problem?

Related