2009-10-21 5 views
10

新しいARMプロセッサ(iPhone 3GSや一部のiPod 3Gなど)搭載のデバイスと古いARMプロセッサを搭載したデバイスの間で、ランタイムで区別する方法を探しています。 私はuname()を使ってデバイスモデルを判断できますが、iPod touchの一部の3GがARMプロセッサでブーストを受けただけなので、これでは不十分です。iPhone検出プロセッサモデル/ NEONサポート

したがって、私はこれらのいずれかを探しています:

  1. プロセッサモデルを検出する方法 - 私は何もありませんと仮定します。
  2. ARMネオン命令がサポートされているかどうかを判断する方法 - これから私は答えを導くことができます。
  3. デバイスの合計ストレージサイズを判断する方法 - これを既知のデバイスモデルと組み合わせると、私はその答えにうっとりする可能性があります。新しいプロセッサがそれを可能にするため、OpenGL ESの2.0は、利用可能な場合
  4. <は事前にRANDOM IDEA>

感謝:)私は考えることができる

+0

良い質問!私はちょうどOmap3のリファレンスマニュアルをチェックし、コプロセッサレジスタの命令セットサポートビットはユーザモードからアクセスできません... –

+0

どのように終了しますか?あなたのアプリケーションで何をしようとしているかのように思えますが、おそらく、プロセッサモデルによって横向きにテストするのではなく、テストできる機能があります。 –

+1

私は集中的な計算をしています。私はどのような能力を試すことができるか分かりません。私はパフォーマンスを測定し、それに適応することができます。これは良いアプローチのようですが、私の状況下では私にとってはむしろ困難です。私は、牛ネオンの指示が利用可能であるかどうかを知る方法がないと信じるのは難しいと感じています。 – yonilevy

答えて

5

つの回避策を入力して、検出されます。

方法については、article at mobileorchardがあります。

+0

ありがとう、実際には、このハックを実装するかなりまともな方法です。しかし、OpenGL ES 2.0が利用可能かどうかを判断する唯一の方法は、EAGLContext :: initWithAPIを呼び出して戻り値をチェックすることです。つまり、プロジェクトにOpenGLを導入することです。とにかく、私がより良い方法を見つけない限り、私はそれをするかもしれません。 – yonilevy

+0

はい、私はそれは残念であり、おそらくデバイスの能力を決定するための重い操作に同意します。 – pgb

12

お求めのとおりではありませんが、簡単な解決策は、ARMv6とARMv7の両方に実行可能なコードが含まれるように、アプリケーションを大量に構築することです。これを行うと、適切なコードが自動的にプロセッサ上で実行され、実行時のチェックを行う必要はありません。効果的には、ローダーにランタイム検出をさせます。

これを行うには、からXcodeプロジェクト "標準(ARMv6の)" のアーキテクチャの設定を変更し、あなたの実装では、

そして、 "(ARMv6ののARMv7)の最適化" するために、あなたはこれを行う:

#if defined __ARM_NEON__ 
    // Code that uses NEON goes here 
#else // defined __ARM_NEON__ 
    // Fallback code without NEON goes here 
#endif // defined __ARM_NEON__ 

同様のマクロがありますが、私の頭の上から覚えていない(NEONではなく)ARMv7の機能をチェックできます。

ランタイムディスパッチを本当にしたい場合は、libcのsysctlbyname関数を見てください。具体的には、HW_MACHINE_ARCHのパラメータを参照すると役に立つと思われる場合があります。

+0

sysctlbynameが必要な情報を私に提供できるかどうかを確認する必要があります。 Unfortunatley私は手元に新しいプロセッサーを搭載したiPodを持っていないので、できない。誰かがこれを試しましたか?それは究極の方法かもしれませんが、実際にそこに定義されているものに依存します。 – yonilevy

+0

また、これが信頼できる方法であるかどうか不思議です - これはiPhone(3GS)でもiPod Touch(3rd)でも動作するかどうかを確認する – Till

+2

'__ARM_NEON__'マクロは、NEONを持つARMv7プロセッサをターゲットにするときにコンパイラによって定義されます3gsと3ggen touchの両方を含む)。 –

0

私はこれがおかしいと知っていますが、私の心には、デバイスがビデオ録画をサポートしているかどうかがわかります。現在のところ、ARM7ベースのiPhoneとiPodデバイスだけでサポートされているため、正当な方法だと思います。

これを行うには、kutTypeMovieでisSourceTypeAvailableと組み合わせてUIImagePickerControllerのavailableMediaTypesForSourceTypeを使用します。我々はいくつかの将来のハードウェア上の未知のサブタイプを取得するときに何を行うには:

1

編集:それは私が後で実現明白な穴を残して、私は、この答えを撤回していますか?これは未来ではありませんでした。また、Appleの文書化されていないAPIの使用に対するゼロの許容度を考慮すると、そのAPIの文書化されたステータスの不確実性は役に立たない。

スティーブン・キヤノンの答えを使用してアプリケーションの脂肪を増やす必要があります。この時点で、信頼性の高い、将来的に保証されたランタイム検出は実現できません(私の悔しさ、私はあなたに保証します)。