[Tinyos-help] Deluge invalidating non-deluge flash volumes?
Razvan Musaloiu-E.
razvanm at cs.jhu.edu
Wed Jan 9 14:40:13 PST 2008
Hi!
On Wed, 9 Jan 2008, Razvan Musaloiu-E. wrote:
> Hi!
>
> On Wed, 9 Jan 2008, David wrote:
>
>> Hi. I'm using tinyos-2.x, as installed by the Ubuntu tinyos package ver
>> 2.0.2.
>>
>> My app uses both deluge, and does it's own config updates to flash.
>>
>> Here is my volumes-stm25p.xml file:
>>
>> <volume_table>
>> <volume name="DELUGE0" size="65536"/>
>> <volume name="DELUGE1" size="65536"/>
>> <volume name="CONFIG" size="131072"/>
>> </volume_table>
>>
>> A few questions on the side as I get to my main point:
>>
>> 1) How can those sizes be so large? According to my specs for tmote
>> sky, there is only 48k flash, but each of the above slots are 64k.
>
> The minimum unit for erasing for stp24p is 64k.
>
>> 2) Why do config slots need to be that size? I tried to use a 65536
>> size for that also (the minimum, as required by the tinyos make files
>> for stm25p), but mounting always fails. I borrowed 131072 from the
>> Flash memory tutorial lesson (7), and that works.
>
> I don't know much about the config. :-(
I just realize: you might need twice the minumum space in order to move
the data from one place to another when you do an update. I didn't look at
the code so I might be wrong.
--
Razvan ME
>> Getting back to my main point. In my config section I'm currently
>> storing an integer which gets read and incremented at each boot output
>> with printf (and output on my console by the java TestPrintf), and
>> then written back to flash.
>>
>> This works fine, except when I make changes to my source code (eg:
>> adding an extra printf), building, injecting (into slot 1) with
>> tos-deluge, and booting+reprogramming into the injected image. In this
>> case, ConfigStorage.valid() returns false for my config volume, and
>> following the example (tutorial lesson 7), my app also resets my flash
>> config to default values. This is really bad, my config needs to be
>> persistent and not ever be reset by Deluge updates.
>
> If you don't inject but just reboot the mote does the config fails?
>
> --
> Razvan ME
>
>> This shouldn't be happening at all, except when the layout in
>> volumes-stm25p.xml changes...
>>
>> So, my next question:
>>
>> 3) Why does the "CONFIG" volume (3) become invalid after deluge
>> injects an updated image (with a larger program) into the previous
>> volume (2)?
>>
>> And finally:
>>
>> 4) Should I (as a work around) try to store all of my non-deluge
>> volumes before Deluge ones, so that they (in theory) don't become
>> invalidated by Deluge inject & reprogram?
>>
>> Thanks in advance for any advice.
>>
>> David.
>>
>> PS: I found what looks like a few typos in the docs and source:
>>
>> In lesson 7:
>>
>> event void Config.commitDone(error_t err) {
>> call Leds.led0Off();
>> call Timer0.startPeriodic(conf.period);
>> if (err == SUCCESS) {
>> // Handle failure
>> }
>> }
>>
>> Shouldn't that check be "if (err != SUCCESS)" ?
>>
>> And, in tos/interfaces/SplitControl.nc, the comment for stop() says
>> "Start this component and all of its subcomponents. Return values of
>> SUCCESS will always result in a <code>startDone()</code> event being
>> signalled."
>>
>
More information about the Tinyos-help
mailing list