Chyba u PIC18STD?

Michal HW michalgregor@centrum.cz
Sobota Listopad 8 10:14:37 CET 2008


Tak nevim co zase v Hitechu vyvadeli. Starsi verze neumely kopirovat 
structury z externi pameti do vnitrni (nebo neopak nejsem si jist).
Takze jsem to chtel zkusit z novou verzi 9.51PL3:
//***********************************************************
/*

 Test presunu structur

 PIC 18F8723

 External SRAM 128KB

 --RAM=default,+40000-5FFFF --EMI=bytewrite
*/
//***********************************************************


#include <htc.h>

__CONFIG(1, HS & IESODIS & FCMDIS);
__CONFIG(2, PWRTDIS & WDTPS1 & WDTDIS & BORDIS & BORV46);
__CONFIG(3, WAITDIS & BW8 & ABW20 & XMCU & CCP2RC1 & ECCPRE & LPT1EN & 
MCLREN);
__CONFIG(4, XINSTDIS & STVRDIS & LVPDIS & BBSIZ1K & DEBUGEN);
__CONFIG(5, UNPROTECT);
__CONFIG(6, WRTEN);
__CONFIG(7, TREN);
//***********************************************************

typedef struct {
 unsigned char Count;
 unsigned char Sum;
 unsigned char Buffer[256];
}ANY_STRUCT;

static volatile far ANY_STRUCT xRAM_Struct;

static volatile ANY_STRUCT Basic_RAM_Struct;



//***********************************************************

void main(void) {

 xRAM_Struct.Count = 5;
 xRAM_Struct.Sum = 6;

 do {

  if ( 0 == ( PORTC & 1 ) ) {
   Basic_RAM_Struct = xRAM_Struct;

   ++Basic_RAM_Struct.Count;
   Basic_RAM_Struct.Sum = ( Basic_RAM_Struct.Sum + PORTB);
   Basic_RAM_Struct.Buffer[Basic_RAM_Struct.Count] = PORTB;

   xRAM_Struct = Basic_RAM_Struct;
  }

 } while(1);
}


Tohle skutecne zapisuje do xRAM:
 xRAM_Struct.Count = 5;
 xRAM_Struct.Sum = 6;

ale xRAM_Struct = Basic_RAM_Struct; kopiruje z interni do interni pameti.

Je to jednoduchy priklad, snad jsem tam neudelal chybu. Pokud je chyba na 
strane Hitechu tak nevim co rici. Snad jedine zlaty asembler.

Jdu to zkusit z verzi PIC18PRO.

Michal Gregor






Další informace o konferenci Hw-list