HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0629
しまくろねこHSP3.4β5にて自作モジュールがビルドに通らなくなる10解決


しまくろねこ

リンク

2014/6/29(Sun) 12:42:07|NO.62679

HSPTV掲示板で他の方が見つけてくださったのですが、Dish用に作った自作の文字表示モジュールをβ5でビルドすると、「as.exeは動作を停止しました。…」と表示されビルドできなくなってしまいました。
β4まではビルドできていたと思ったのですが・・・。
どうも原因は、下記のように配列に数値を入れていく処理を15,600行くらいソース内で書いているのですが、これが原因のようです。

f_cd(32) = 0
f_cd(33) = 1
f_cd(34) = 2
f_cd(35) = 3 これが延々と15,600行くらい続く。

試しに、この配列に数値を入れていく行を全て削除してβ5でビルドすると、正常にビルドが通ります。

ちなみにこれ以外の他のプログラムは今までどおりビルドできています。

http://hsp.tv/play/pforum.php?mode=all&num=62618



この記事に返信する


skyblue

リンク

2014/6/30(Mon) 07:31:29|NO.62690

そんなに配列に代入するような処理を見直せば通るようになります。
HSPは速度が遅いって言われていますので配列への代入を1000行以上したらかなり遅くなる。
配列への代入はループを使ったほうがスマート
おそらくエラーの原因はメモリ不足



しまくろねこ

リンク

2014/6/30(Mon) 07:48:57|NO.62691

こんにちは。

はい。もともとループして配列に入れていましたが、速度的にソース内で直接代入したほうが断然早かったためこのような形になりました。
β4まではビルドは通っていました。
とりあえず今はループ内で配列に入れる機能は残しておいたので、直接値を代入している行を全てコメントアウトしたところβ5でもビルドが通ることを確認いたしました。



skyblue

リンク

2014/6/30(Mon) 16:21:48|NO.62693

処理を見直したほうがいい気がします。
1000行を超えるような代入な時点でメモリ不足になりやすいので悪手
普通は1行の文字列を表示するだけでだいたい100文字でも
スマートフォンでは表示できるか怪しいので800バイトいくかいかないかなので
処理を見直したほうがいいです。



しまくろねこ

リンク

2014/6/30(Mon) 18:19:15|NO.62694

こんにちは。

もしかしたら勘違いされているかもしれませんので念のため書いておきます。
この件はスマホ上でのアプリ実行時での話ではありませんのでお間違えなく。
Dish Helperからアプリのapkファイルを作成中に起きる現象です。



kanahiron

リンク

2014/6/30(Mon) 18:54:12|NO.62695

>>メモリ不足になりやすいので
4Bの配列を2万個作ったところで78KBです
例えばバッファに読み込んだ128x128の画像よりよっぽど小さいと思いますが…

またビルドでエラーが出る原因は文字コードを画像の座標にしたデータを作る処理なので(多分)
>普通は1行の文字列を表示するだけでだいたい100文字でも
>スマートフォンでは表示できるか怪しいので800バイトいくかいかないかなので
は意味を成していないです(毎回代入しているわけではない)



しまくろねこ

リンク

2014/6/30(Mon) 19:03:58|NO.62696

>kanahironさん
代弁ありがとうございます。

> またビルドでエラーが出る原因は文字コードを画像の座標にしたデータを作る処理なので(多分)
> >普通は1行の文字列を表示するだけでだいたい100文字でも
> >スマートフォンでは表示できるか怪しいので800バイトいくかいかないかなので
> は意味を成していないです(毎回代入しているわけではない)
はい。そうです。



おにたま(管理人)

リンク

2014/6/30(Mon) 23:57:33|NO.62706

>しまくろねこさん

ご報告ありがとうございます。
β4まではビルドは通っていたということは、変更されたhsp3dh.exeか、hspcmp.dllに問題があると思われます。
もし可能であれば、androidでビルドするためのプロジェクトフォルダ一式を
メール等でこちらに送付して頂ければ調査したいと思います。



しまくろねこ

リンク

2014/7/1(Tue) 19:24:05|NO.62709

>おにたま(管理人)さま
こんにちは。
開発お疲れ様でございます。

β4でビルドしたところビルド成功でした。
β5から駄目なようです。

それから今しがたプロジェクトフォルダ一式、ソース、コンソールメッセージをβ4とβ5の両方のパターンを添付してメールをお送り致しました。
宜しくお願い致します。



おにたま(管理人)

リンク

2014/7/2(Wed) 21:54:53|NO.62722

ソースコードの送付ありがとうございます。
こちらで確認してみましたが、確かにas.exeでエラーが発生しますね。
これは少しやっかいな問題で、エラーを出しているのはHSP側ではなくandroid SDK内にあるアセンブラというツールになります。
HSP3Dishが生成するCコードは、β4とβ5で違いはなく、単純にβ5でarmv7のコードに対応したことで起こっています。
何にしても、通常アセンブラが停止することはありえないので、SDK側の不具合ではないかと思われます。
armv7対応は、Cコンパイラの最適化オプションを含んでおり、それがおかしなコードを出力している気がします。
(長いソースが、たまたま不具合の出る状態を作ったということで、しまくろねこさんのソース自体に問題があるとは考えていません)

まだ明確な原因はわかりませんが、正しいコードが出力できる方法があるか調査してみたいと思いますので、今しばらくお待ちください。(もしかしたら、android NDKが更新されれば修正されるかもしれません)
それまでは、jni/Application.mk 内にある、

APP_ABI := armeabi-v7a

の行を削除することで、armv7のコードは出力されなくなる(β4と同様の状態になる)ので、こちらで試して頂ければと思います。
あまりはっきりした結論でなくてすみませんが、原因がわかればこちらで対応していきたいと思います。
引き続き宜しくお願いします。



しまくろねこ

リンク

2014/7/3(Thu) 21:50:17|NO.62732

>おにたま(管理人)さま
こんにちは。

面倒なことになってしまい大変申し訳ありません。
宜しくお願い致します。

また、教えて頂きました
jni/Application.mk 内の
APP_ABI := armeabi-v7a
を削除する方法でβ5でもビルドできることを確認致しました。
ご丁寧にありがとうございます。



ONION software Copyright 1997-2021(c) All rights reserved.