# Boot segment and General segment with .gld file for CodeGuard ### Date : 2021/09/05 ### Write by : J.L. <style> .blue { color: blue; } .red { color: red; } .green { color: green; } .lgreen { color: lightgreen; } .pink { color: pink; } .yellow { coler: yellow; } </style> --- ``` /* * Dual panel memory regions */ #ifdef __DUAL_PARTITION reset : ORIGIN = 0x0, LENGTH = 0x4 ivt : ORIGIN = 0x4, LENGTH = 0x1FC /*program (xr) : ORIGIN = 0x1000, LENGTH = 0x9B80*/ program (xr) : ORIGIN = 0x200, LENGTH = 0xA980 FSEC : ORIGIN = 0xAB80, LENGTH = 0x2 FBSLIM : ORIGIN = 0xAB90, LENGTH = 0x2 FSIGN : ORIGIN = 0xAB94, LENGTH = 0x2 FOSCSEL : ORIGIN = 0xAB98, LENGTH = 0x2 FOSC : ORIGIN = 0xAB9C, LENGTH = 0x2 FWDT : ORIGIN = 0xABA0, LENGTH = 0x2 FPOR : ORIGIN = 0xABA4, LENGTH = 0x2 FICD : ORIGIN = 0xABA8, LENGTH = 0x2 FDEVOPT : ORIGIN = 0xABAC, LENGTH = 0x2 FALTREG : ORIGIN = 0xABB0, LENGTH = 0x2 FBTSEQ : ORIGIN = 0xABFC, LENGTH = 0x2 #endif ``` <span class="blue">Singal Panel :</span> ``` #ifndef __DUAL_PARTITION __Key_BASE = 0x200; __BS_BASE = 0x280; /* Added by Joss */ __CODE_BASE = 0x1000; /*__CODE_BASE = 0x200;*/ __CODE_LENGTH = 0x15580; __IVT_BASE = 0x4; #endif ``` <span class="red">Dual Panel :</span> ``` /* * Dual panel memory regions */ #ifdef __DUAL_PARTITION __NO_HANDLES = 1; /* Suppress handles on this device */ __Key_BASE = 0x200; __BS_BASE = 0x280; /* Added by Joss */ __CODE_BASE = 0x1000; /*__CODE_BASE = 0x200;*/ __CODE_LENGTH = 0xA980; __IVT_BASE = 0x4; #endif ``` <span class="green">Constant variable section :</span> ``` BS_KeySection : AT(__Key_BASE) { *(.BS_Key); } >program ``` <span class="lgreen">Constant variable in C code:</span> ``` const unsigned char __attribute__ ((section(".BS_Key"), space(psv) )) BS_Key[] = {"1234zxyw123412341234"}; ``` Functions section: ``` BS_Section __BS_BASE : /* Added by Joss */ { *(BS_Section); *(BS1_Section); *(BS2_Section); *(BS3_Section); } >program ``` Functions declared in C code: ``` unsigned int __attribute__ (( section("BS_Section") )) BS_Program(unsigned int PSWD ) // Boot segment Application Code { if(PSWD == 0x1234) LATAbits.LATA3 = 1; // PASS else LATAbits.LATA4 = 1; // FAIL LATAbits.LATA0 =~ LATAbits.LATA0; if( PSWD < sizeof(BS_Key)) return BS_Key[PSWD]; else return -1; } unsigned int __attribute__ (( section("BS1_Section") )) BS1_Program(unsigned int PSWD ) // Boot segment Application Code { if( PSWD < sizeof(BS_Key)) return BS_Key[PSWD]; else return -1; } unsigned int __attribute__ (( section("BS2_Section") )) BS2_Program(unsigned int PSWD ) // Boot segment Application Code { if( PSWD < sizeof(BS_Key)) return BS_Key[PSWD]; else return -1; } ```