⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo-rom.c

📁 FreeRTOS 是一个源码公开的免费的嵌入式实时操作系统
💻 C
字号:
// DATA STORED IN PROGRAM MEMORY

#pragma chip PIC18C252

// THE 'const' TYPE MODIFIER IS RECOMMENDED FOR ALL ROM DATA
const int16 tx[10] = { 1, 2, 1000, -34, -30000, 2, 100, 23, 0, 0};

const char str[] = "String 1";

const struct  {
  const char *str;
} txtp[] = {
  "A table of pointer to strings",
  "Monday", "Tuesday",
  "MyString",
  "MyString",  // equal strings and substrings are merged to save space
  "String",    // merged with substring
};


// NOTE: const data that are not read are NOT stored!
const char notAccessed[] = "This data is not stored because it is not read";

void sub(uns8 i)
{
    // reading the 'const' table
    int16 t = tx[i];

    const char *p = str;
    i = *p;
    p = "Hello world";
    i = *p;

    char si;
    p = txtp[si].str;
    i = *p;
}




// DATA CAN BE STORED DIRECTLY IN PROGRAM MEMORY
// NOTE: This is for special needs, when 'const' tables is not sufficient

#define CDATA_START  0x3000
#pragma cdata[CDATA_START]  // start of cdata block

// STORE 16 bits data
#pragma cdata[] = 0xFFFF, 0x2000, 0x1000

// CONSTANT EXPRESSIONS ARE EVALUATED BEFORE STORING
#pragma cdata[] = 0x100, (10<<4) + 3456,\
                  10, 456, 10000


#define D8(l,h)  l + h*128
#define D32(x)  x%0x10000, x/0x10000

// STORE 8 AND 32 BITS DATA
#pragma cdata[] = D8(10,20), D32(10234543)

// AUTOMATIC ADDRESS CALCULATION
#pragma cdata.ID0 = 0x10, 200+3000
#pragma cdata.ID1 = "Hello world\0"
#pragma cdata.ID2 = "Another string\r\n" "merged"

// STORE A TABLE OF 16 BIT ADDRESSES TO ROM CODE
#pragma cdata.ID_TABLE = ID0, ID1, ID2  // store addresses

#pragma cdata.CDATA_END    // end of cdata block


#pragma origin CDATA_END  // program code follow right after


void write(uns16 strID)
{
  // ..
}


/* NOTE: functions using labels in the directly stored data must be
   defined after the data definitions */

void pointers( void)
{
    write(ID1);
    write(ID2);

    char i = 2;  // index of ID2
    TBLPTR = i * 2;
    TBLPTR += ID_TABLE;
    write( *TBLPTR);

    // low level access of program memory:
    TBLPTR = ID0;
    char m = *TBLPTR;  // READ PROGRAM MEMORY
    m = *TBLPTR++;     // READ PROGRAM MEMORY AND INCREMENT POINTER
    m = *TBLPTR--;     // READ PROGRAM MEMORY AND DECREMENT POINTER
    m = *++TBLPTR;     // INCREMENT POINTER AND READ PROGRAM MEMORY
}

void main(void)
{
    sub(3);
    pointers();
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -