2018-01-01から1年間の記事一覧

惑星の位置から時刻を求める

上の図において、惑星が位置Pにいるときの時刻の求め方を紹介する。前提として、惑星の軌道は分かっているものとする。方針としては、元期以降に惑星の動径が掃いた面積を求め、それを面積速度で割ることで元期からの時間の経過を計算する。図中の点Oは楕円…

歳差運動による春分点の移動

地球の地軸は23.4度傾いているということはよく知られているが、その傾きは歳差運動や章動により日々変化している。そして、地軸の向きが変化すると春分点が移動する。この記事では、地軸の向きと春分点の方向の関係を見ていく。 春分点とは まずは、春分点…

javascriptを使ったHTML要素の位置取得

javascriptから取得できるHTML要素の位置は様々な種類があるので、後から参照できるようにまとめておく。jqueryなどのライブラリを使う方法については省略。ネイティブ環境で使えるもののみ扱う。各見出しはMDN web docsへのリンクになっているので、詳細は…

ARMのレジスタ達

x86_64のレジスタ名なら知っているけど、armのレジスタ名はまた違うからややこしい。armのリファレンスを読むときに混乱しないように、ここでまとめておく。 レジスタ名 役割 r0~r12 汎用レジスタ r13 (sp) スタックポインタ r14 (lp) リンクレジスタまたは…

Homogeneous(同次)座標系を使ったClipping

OpenGLライブラリの中には、glClipPlane(https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glClipPlane.xml)という関数がある。この関数は平面を表すベクトル(というより、数の組)を受け取り、受け取った平面でクリッピングを行う。クリッピン…

デバッグ情報を探る 〜.cfi_xx命令の動作〜

次のようなc言語プログラムを例にとって考えていく。 // test.c int hoge(int x) { return x+1; } int main() { int a = 1; return hoge(a); } gcc -O0 -S test.cを実行してコンパイルすると、 ; test.s _hoge: .cfi_startproc pushq %rbp .cfi_def_cfa_offs…

レジスタ制御用ワンライナー達

変数regにマップされたレジスタを、ビット演算子で制御する。 マスクを用意 msk = 1U << x; AND (&) xビットを取ってくる bit = (reg & msk) >> x; xビットをクリア reg &= ~msk; xビット以外をクリア reg &= msk; xビットによる条件分岐 (1bit) if (reg & m…

STM32F3探訪〜GPIOx_ODR vs GPIOx_BSRR 〜

STM32F3のGPIOピンのoutput用レジスタには、GPIOx_ODRというものと、GPIOx_BSRRという二種類ある。その違いを調べたので、書き留めておく。 ODRとBSRRは共に書き込み可能なレジスタであり、GPIOのoutput値を決めるのに使える。BSRRはリファレンスに、 Bits 3…

HALの内部構造~TIM3を追いかける~

STM32F303K8をターゲットとしてCubeMXを使って自動生成したソースコードを追いかけることで、HALライブラリの中身を理解する。この記事では、TIM3に関係する部分を見て行く。 TIM3の設定 まず、CubeMXでTIM3をInternal Clockを使うように設定する。そして、N…

STM32Nucleoボード調査(割り込みベクタ)

startup_stm32f303x8.s(スタートアップルーチン)では、以下のように割り込みベクタテーブルが指定されている。 /****************************************************************************** * * The minimal vector table for a Cortex-M4. Note th…