Hello Razvan ME:
2008/5/9 Razvan Musaloiu-E. <[EMAIL PROTECTED]>:
> Hi!
>
> On Wed, 7 May 2008, jiwen zhang wrote:
>
> Hello all :
>> when i read the file TOSBootM.nc , there are some things i can' t
>> understand !
>>
>> 1. The external flash is divided into three slots , *i want to know the
>> size of every slot ? are they identical ?*
>> from reading the TOSBootM , i think the *structure of every slot *is
>> that:
>>
>> for example , slot 0 :
>> ----------------------------------------------------
>> DELUGE_IDENT_SIZE (128 Bytes)
>> ----------------------------------------------------
>>
>> DELUGE_CRC_BLOCK_SIZE(256 Bytes)
>>
>> -----------------------------------------------------
>> PAGE 0
>> PAGE 1
>> ...........
>> ...........
>>
>>
>> and *PAGE structure* is that :
>>
>> ---------------------------------------------
>> Internal flash Address (4 Bytes)
>> ---------------------------------------------
>> Page length(4 Byte)
>> --------------------------------------------
>> Effective Image data()
>> -------------------------------------------
>> Am i right ? i am not sure the page structure , if i am not right , can
>> someone give me an explain ?
>>
>
> You are almost right: what you call pages are called sections.
>
>
> 2. Question about the function of programImage(ex_flash_addr_t startAddr)
>>
>> .....
>> .....
>>
>>
>> while ( secLength ) {
>>
>> pageAddr = newPageAddr = intAddr / TOSBOOT_INT_PAGE_SIZE;
>>
>> call ExtFlash.startRead(curAddr);
>> // fill in ram buffer for internal program flash sector
>> do {
>>
>> // check if secLength is all ones
>> if ( secLength == 0xffffffff ) {
>> call ExtFlash.stopRead();
>> return FAIL;
>> }
>>
>> buf[(uint16_t)intAddr % TOSBOOT_INT_PAGE_SIZE] = call ExtFlash.readByte();
>> intAddr++; curAddr++;
>>
>> if ( --secLength == 0 ) {
>> intAddr = extFlashReadAddr();
>> secLength = extFlashReadAddr();
>> curAddr = curAddr + 8;
>> }
>>
>> newPageAddr = intAddr / TOSBOOT_INT_PAGE_SIZE;
>>
>> } while ( pageAddr == newPageAddr && secLength );
>> call ExtFlash.stopRead();
>>
>> call Leds.set(pageAddr);
>>
>> // write out page
>> if (call ProgFlash.write(pageAddr*TOSBOOT_INT_PAGE_SIZE, buf,
>> TOSBOOT_INT_PAGE_SIZE) == FAIL) {
>> return R_PROGRAMMING_ERROR;
>> }
>> }
>>
>> i don't know *how the programme jump out the while cycle*. because the
>> condition of jumping out the while cycle is that "secLength <= 0" , but in
>> the while , there is some sentences :
>>
>> if ( --secLength == 0 ) {
>> intAddr = extFlashReadAddr();
>> secLength = extFlashReadAddr();
>> curAddr = curAddr + 8;
>> }
>>
>> *so when secLength == 0 , it will be given a new value (which is the next
>> page size ?) , how does it jump out ?*
>>
>> *is it possible that it jump out from here ? :*
>>
>> if ( secLength == 0xffffffff ) {
>> call ExtFlash.stopRead();
>> return FAIL;
>> }
>>
>> i am not sure, can someone give me an explain ?
>>
>
> The secLength will be zero because the image is padded with zeros. If the
> image is an exact number of pages the reprogramming might fail. I'll try to
> reproduce this bug tomorrow.
> is it to say that when reading to the end of the image , the secLength of
> the page is setted to zero , so the programme can jump out ?
what is the meaning of "If the image is an exact number of pages the
reprogramming might fail" ? and what is the bug you say in your emial ? i
can't find the bug :-)
>
> --
> Razvan ME
>
>
> 2008/5/7, jiwen zhang <[EMAIL PROTECTED]>:
>>
>>>
>>> Hello :
>>> thank you very much for your reply, Razvan ME.
>>> i have found it .
>>>
>>>
>>>
>>>
>>> 2008/5/7, Razvan Musaloiu-E. <[EMAIL PROTECTED]>:
>>>
>>>>
>>>> Hi!
>>>>
>>>> On Tue, 6 May 2008, jiwen zhang wrote:
>>>>
>>>> Hello all :
>>>>
>>>>> Recently , i an researching the deluge, and find a problem in
>>>>> TOSBootM.
>>>>> In the function programImage(ex_flash_addr_t startAddr) , there is a
>>>>> sentence
>>>>> #if defined(PLATFORM_TELOSB)
>>>>> if (intAddr != TOSBOOT_END) {
>>>>> #elif defined(PLATFORM_MICAZ) || defined(PLATFORM_IRIS)
>>>>> if (intAddr != 0) {
>>>>> ....
>>>>> ....
>>>>>
>>>>> I can't find where TOSBOOT_END is defined . if i am using the platform
>>>>> telosb , maybe it does't work .
>>>>> can someone give me an answer ?
>>>>>
>>>>>
>>>> TOSBOOT_END is defined in tinyos-2.x/tos/lib/tosboot/Makefile.
>>>>
>>>> --
>>>> Razvan ME
>>>>
>>>> I am using Tinyos2.x .
>>>>
>>>>> thank you !!
>>>>>
>>>>>
>>>>>
>>>
>>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help