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

📄 demo-ptr.c

📁 FreeRTOS 是一个源码公开的免费的嵌入式实时操作系统
💻 C
字号:
// POINTERS AND INDEXED TABLES

#pragma chip PIC18C252


char tab1[10];
char tab2[10];

bank2 uns24 tu2[10];
bank3 uns24 tu3[10];
uns24 *px;


void pointers( void)
{
    // p1 is 8 bit wide
    char *p1 = tab1;
    char s = 0;

    do
       s += *p1 & 3;
    while (++p1 < &tab1[10]);

    // px is 16 bit wide because it can access elements from 2 banks
    px = tu2;
    px = &tu3[9];
    uns24 e = *px;


    // low level pointer access
    FSR0 = &tab1[1];
    FSR1 = &tab2[0];
    char a = 10-1;
    do  {
        POSTINC0 = POSTINC1; // *FSR0++ = *FSR1++;
    } while (--a > 0);

    char *px, i;
    i = *px;

    i = *FSR0;   // MOVFF INDF0,i
    i = *FSR0++; // MOVFF POSTINC0,i
    i = *FSR0--; // MOVFF POSTDEC0,i
    i = *++FSR0; // MOVFF PREINC0,i
    i = *--FSR0; // MOVF  POSTDEC0,W,0 ,  MOVFF INDF0,i
}


typedef struct {
  uns16 ab;
  struct {
    uns8 l1;
    uns8 l2;
  } vx;
} Txx;

Txx ax, bx[2], *pxx;

void sub( void)
{
    pxx = &ax;
    ax.ab = 1000;
    pxx->vx.l1 = 3;

    pxx = &bx[0];
    pxx->ab = 0;
    pxx ++;
    pxx->vx.l2 = 0;
}


/* An array that need to cross page boundaries can optionally be
   assigned a specific start address. This start address is only
   required when the array is less than 257 bytes and need to cross
   a 256 byte boundary. */

uns16 large[256] @ 0x400;  // bank 4 and 5

size2 uns16 *lp;

uns16 sub2( void)
{
    if (++lp >= &large[256])
        lp = &large[0];
    return *lp;
}

uns16 sub3( void)
{
    return *lp;
}


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

    lp = &large[0];
    uns16 z = sub2();
    z += sub3();
}


⌨️ 快捷键说明

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