tmori / athrill-target Goto Github PK
View Code? Open in Web Editor NEWathrill target dependent codes
athrill target dependent codes
stxで負の値を扱った場合に正しく符号拡張されずにレジスタに入る。
stx r10
で実行した際のログは以下のように出る。
0x16a8: SXH r10(-1):65535
本来符号拡張されているので、後ろの値は2^16-1ではなく、2^32-1にならないといけない。
変数宣言しているtmpがuint16で定義されていて、その値で書き戻していたのが間違い。
同様の不具合がsxbにもあったので、それも修正。
以下の命令デコーダを追加する
・MADDF.S
・MSUBF.S
・NMADDF.S
・NMSUBF.S
Unityからの時刻同期およびセンシング情報は,athrill内のスレッドでUDPパケット受信し,そのデータをレジスタ用のバッファにコピーしている.
このUDPスレッドは,CPU駆動で実行するスレッドと排他していないので,競合する可能性がある.修正方法は単純で,これらのスレッド間で共有データアクセスする際に排他をかければよい.
通信仕様の変更に対応
MOTOR_ANGLE_Xは原実装に合わせて仕様を変更
バッテリ関係の追加
Athrill側からの通信にジャイロリセットを追加。ジャイロリセットは一度設定したら(UDPパケットが飛んだら)すぐに戻す(flushした際にこのデータをクリアする)。このため、mmap形式では対応できないものとなるが、ひとまずこれで運用。
videv.h内の定義でTXとなるべきところがRXと鳴っていたところがあったので修正。
RX/TXでヘッダサイズが今のところ同じなので、問題なかったが修正しておく
下のコード
#define VDEV_TX_DATA_BODY_OFF VDEV_RX_DATA_HEAD_SIZE
#define VDEV_TX_DATA_BODY_SIZE (VDEV_TX_DATA_COMM_SIZE - VDEV_RX_DATA_HEAD_SIZE)
-- Error --
Powered by TOPPERS/HRP2 RTOS
Initialization is completed..
System logging task is started on port 3.
Decode Error
CPU(pc=0x180106e0) Exception!!
-- objdump --
180106e0: e15b10fa ldrsh r1, [fp, #-10]
180106e4: e3063667 movw r3, #26215 ; 0x6667
180106e8: e3463666 movt r3, #26214 ; 0x6666
180106ec: e0c32391 smull r2, r3, r1, r3
現状の実装では,割り込みベクタアドレスが固定値になっている.
この値をパラメータで可変化したい.
macでコンパイルした際にvdev関係のシンボルがないとエラーになる。
Makefile.deviceを修正する
appheap が1MB設定されており,スタートアップ時のゼロクリア処理において,本データの初期化で時間がかかっている模様.
EV3のev3_led_set_color()が動作しない件の調査で発見
uint32 off = (addr - region->start);
となっており、オフセット分が追加されていなかった。
フラグの方は実際に値が設定されなくてもUDP送信自体はするので、問題となっていなかった。
積和演算において、出力レジスタの計算が間違っており、r1-16の範囲までしか入らないようになっていた。
単精度のsqrtができていなかったので追加
対象ファイル:int.c
対象関数:set_wait_intno
ev3rtではev3api.cの中でグローバルコンストラクタが呼ばれているが、そこがコメントアウトされている。
また、init_arrayにコンストラクタテーブルが入るようにリンカスクリプトを書き換える。
target/v850_gcc/v850es_fk3.ld
___init_table_start = .;
(*.ctors)
とする
以下のエラーが発生.
Exec cached_code Error code[0]=0x3008 code[1]=0xe50b type_id=0x25, inx=34868 func=0x43a070, pc=0x1800c838
原因は,ldr命令で奇数番地が設定されていたため.
float(単精度)の命令でサポートされていなかった
以下の4つの対応を行う。
・MADDF.S
・MSUBF.S
・NMADDF.S
・NMSUBF.S
とりあえず通常の値であれば動作するようにする。
-- Error --
Powered by TOPPERS/HRP2 RTOS
Initialization is completed..
System logging task is started on port 3.
Decode Error
CPU(pc=0x18005330) Exception!!
-- objdump --
18005330: e2233001 eor r3, r3, # 1
18005334: e6ef3073 uxtb r3, r3
18005338: e3530000 cmp r3, #0
1800533c: 0a000013 beq 18005390 <get_nextaction+0x200>
18005340: e3043044 movw r3, #16452 ; 0x4044
現状,athrillからUnityに送信する時刻同期およびアクチュエータ情報の通知タイミングはEV3RTからAPI呼び出しを契機としている.
EV3RT側の変更があった場合,時刻同期タイミングが変わってしまうため,athrill側で時刻同期タイミングを調整できるようにすべきと考えている.
Double命令をサポートする。
newlibでも使われていないSQRTや、コンパイラで吐かれてこないCEILF、FLOORはとりあえず後回し。
以下の命令セットのデコーダが欲しい.
・ABSF.D
・DIVF.D
・MAXF.D
・MINF.D
・NEGF.D
・RECIPF.D
・RSQRTF.D
・SQRTF.D
・SUBF.D
・CEILF.DL :Floating-point Truncate to Integer Format, rounded toward +∞(Double)
・CEILF.DW :Floating-point Truncate to Integer Format, rounded toward +∞(Double)
・CEILF.DUL :Floating-point Truncate to Unsigned Long, rounded toward +∞(Double)
・CEILF.DUW :Floating-point Truncate to Unsigned Word, rounded toward +∞(Double)
・CVTF.DL :Floating-point Convert to Integer Format(Double)
・CVTF.DUL :Floating-point Convert Double to Unsigned-Long(Double)
・CVTF.DUW :Floating-point Convert Double to Unsigned-Word(Double)
・CVTF.DW :Floating-point Convert to Integer Format(Double)
・CVTF.LD :Floating-point Convert to Double Floating-point Format(Double)
・CVTF.ULD :Floating-point Convert Unsigned-Long to Double(Double)
・CVTF.UWD :Floating-point Convert Unsigned-Word to Double(Double)
・CVTF.WD :Floating-point Convert to Double Floating-point Format(Double)
・FLOORF.DL :Floating-point Truncate to Integer Format, rounded toward -∞(Double)
・FLOORF.DW :Floating-point Truncate to Integer Format, rounded toward -∞(Double)
・FLOORF.DUL :Floating-point Truncate to Unsigned Long, rounded toward -∞(Double)
・FLOORF.DUW :Floating-point Truncate to Unsigned Word, rounded toward -∞(Double)
・TRNCF.DL :Floating-point Truncate to Integer Format, rounded to zero(Double)
・TRNCF.DUL :Floating-point Truncate Double to Unsigned-Long(Double)
・TRNCF.DUW :Floating-point Truncate Double to Unsigned-Word(Double)
・TRNCF.DW :Floating-point Truncate to Integer Format, rounded to zero(Double)
・CMPF.D :Compares floating-point values(Double)
・CMOVF.D :Floating-point conditional move(Double)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.