Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

чек сума на програмната памет на PIC24
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18993
Страница 1 от 1

Автор:  Edesign [ Чет Окт 12, 2023 2:08 pm ]
Заглавие:  чек сума на програмната памет на PIC24

Здравейте,

Накой може ли да подхвърли сламка как да направя четене на байт по байт (word ) и просто да ги сумирам. Така да проверявам дали програмната памет е бъгната. Сумата ще се съхранява външно от проца.

За PIC18 съм го правил но за P24 няма прагма и т.н......

#pragma romdata PROG_END
const unsigned int ROM_END = 0x55AA;
#pragma romdata
//
#pragma romdata PROG_Start
const unsigned int ROM_BEGIN = 0x55AA;
#pragma romdata

ROMPtr=&ROM_BEGIN; //Clear ROM pointer
ROMSum=0; //Clear ROM sum accumulator
do
{ROMSum+=*ROMPtr; //Accumulate ROM sum
ROMPtr=ROMPtr+1;}
while(ROMPtr!=&ROM_END); //If end of ROM area

Автор:  TheWizard [ Чет Окт 12, 2023 2:33 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

__builtin_tblrdl()
__builtin_tblrdh()

TBLRDL, TBLRDH

Автор:  Edesign [ Чет Окт 12, 2023 2:42 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

Да видях
__builtin_tblrdl

Issues the tblrdl.w instruction to read a word from Flash or EEDATA
memory. You must set up the TBLPAG to point to the appropriate page.
To do this, you may make use of __builtin_tbloffset()
and__builtin_tblpage().
Please refer to the data sheet or “dsPIC30F Family Reference Manual”
(DS70046) for complete details regarding reading and writing program
Flash.

Обаче не мога да схвана офсета и tblpage -> на мен ми трябва prog_start / prog_end

Автор:  TheWizard [ Чет Окт 12, 2023 2:51 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

с указател можеш да прочетеш само първите 32к от флаша
иначе tblpage сочи старшия word от адреса

Автор:  Edesign [ Чет Окт 12, 2023 3:20 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

TBLPAG=0;
addrOffset = (0x200);

do
{
ROMSum=ROMSum+__builtin_tblrdl(addrOffset); // contains lower word data from 24 bits word
if (addrOffset==0xFFFF) {TBLPAG=1;addrOffset=0;}else{addrOffset++;}

}while((addrOffset<0x57F0)||(TBLPAG==0));

Това ли е което трябва да направя за да чета флаша 0x200 до 0x157f0
Става въпрос за PIC24FJ128GA006

Автор:  TheWizard [ Чет Окт 12, 2023 3:26 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

https://microchipdeveloper.com/local--f ... xample.svg

Автор:  Edesign [ Чет Окт 12, 2023 3:33 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

TheWizard моля те погледни в предния ми пост. Правилно ли съм рабрал ?

Автор:  TheWizard [ Чет Окт 12, 2023 3:41 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

в момента нямам XC16 да симулирам - пиша по памет

Автор:  Edesign [ Чет Окт 12, 2023 3:44 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

Да така е проверих на симлуатора. Само че трябва да е addrOffset+=2
Благодаря TheWizard

Автор:  relsys [ Сря Окт 18, 2023 8:00 pm ]
Заглавие:  Re: чек сума на програмната памет на PIC24

Така съм го бил направил за PIC16:

Код:
u32 bcc32_flash()
{
  u8 fw[128];
  u8 x, y, z;
  u32 addr = 0;
 
  union
    {
      u16 bcc[2];
      u32 fw;
    } bcc32;
   
  bcc32.fw = 0xFFFFFFFF;
 
  for(z = 0; z < 2; z++)
    {
      for(x = 0; x < 32; x++)
        {
          for(y = 0; y < sizeof(fw); y++)
            {
              addr += y;
              fw[y] = FLASH_Read(addr);
            }
          bcc32.bcc[z] = crc16_zvo(fw, sizeof(fw), bcc32.bcc[z]);
        }
  }

  return bcc32.fw;
}

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/