如何應用 Padauk FPPA MCU 的 Assembly language 寫出 C Language 的 函式指標?

如何應用 Padauk FPPA (8x8x8) MCU 的 Assembly language 寫出 C Language 的 函式指標? 
以下是我個人的做法, 基本上是用 icall/igoto 指令, 會寫這個是因為寫一些switch/case 的東西多 用 Func Pointer 可以縮短程式碼(Reduce code size), 更快與平均的執行時間(Reduce CPU time), 基本上跟 8051用 DPTR Lookup Table 的 Function Pointer 是一樣的方式
// Declare a function pointer variable;
word pFunc;
int     FuncInx;


	// initialization FuncInx	
	mov		FuncInx, a;

	mov		a, ha@TBL_FUNC;
	mov		hb@pFunc, a;
	mov		a, la@TBL_FUNC;
	mov		lb@pFunc, a;
	mov		a, FuncInx;
	add		lb@pFunc, FuncInx;	
	t1sn		flag.1; // carray
	igoto		pFunc;
	inc		hb@pFunc; // correct high byte
	igoto		pFunc;

ReturnFunc:
         // next instruction at run pFunc[idx]();


Func1:
       // todo here, implement function 1

       goto ReturnFunc;         
Func2:
       // todo here, implement function 2

       goto ReturnFunc;         
Func3:
       // todo here, implement function 3

       goto ReturnFunc;         
.....

FuncN:
       // todo here, implement function N

       goto ReturnFunc;         

         
TBL_FUNC:
         goto  Func1;
         goto  Func2;
         goto  Func3;
          ............
         goto  FuncN;         // N must be less than 255

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: