上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
マシン語で高速グラフィックをやろうとしていますが、どうもサブルーチンにするとうまくない動作をします。
下のようにpsetをサブルーチンにしているのですが、これだと暴走します。

#include
void pset(int16_t ,int16_t ) ;

int16_t usr_sample(int16_t val, void *mem)
{
int16_t x,y,v,w,z;
uint8_t *p0;
p0 = 0x100002d0;
for (y=0;y<10;y++) {
x=y;
pset(x,y);
//z=(x&1)+(y&1)*2;w=(y/2)*32+(x/2);
//p0[w]=p0[w] | (1< }
return -2 * val;
}

void pset(int16_t x,int16_t y)
{
int16_t w,z;
uint8_t *p0;
p0 = 0x100002d0;
z=(x&1)+(y&1)*2;w=(y/2)*32+(x/2);
p0[w]=p0[w] | (1<}


「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">



pset関数内でx、yを固定値にすると正常に動くので、どうやら関数呼び出しは行われている物の、引数の引き継ぎがうまくできていないみたいです。

ならば、と思って以下のようにしてみました。グローバル変数X,Yを定義して、その値を渡してみます。

#include
int16_t X,Y; <====================== ここ変更
void pset(int16_t ,int16_t ) ;
int16_t usr_sample(int16_t val, void *mem)
{
int16_t x,y,v,w,z;
uint8_t *p0;
p0 = 0x100002d0;
for (y=0;y<10;y++) {
X=x;Y=y; <====================== ここ変更
pset(X,Y); <====================== ここ変更
//z=(x&1)+(y&1)*2;w=(y/2)*32+(x/2);
//p0[w]=p0[w] | (1< }
return -2 * val;
}

void pset(int16_t x,int16_t y)
{
int16_t w,z;
uint8_t *p0;
p0 = 0x100002d0;
z=(x&1)+(y&1)*2;w=(y/2)*32+(x/2);
p0[w]=p0[w] | (1<}



これでもだめでした。そういうものなのかな?

単一関数で作ると同じような処理で無駄が多発するのでサブルーチンは使いたいですね。
固定メモリ領域で引数を渡せばよさそうですが、それも美しくないですね。

何かコンパイル、リンク設定的なものがないか調べてみようと思います。


2016.06.19 Sun l 未分類 l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。