ブログ - 最新エントリー

SH2/7145のコンパイル

カテゴリ : 
雑記
2012-11-14 20:00
とある検証でSH2/7145を動かそうとしてみたら全く動かない。
サンプルすら動かないので調べてみると、どうやら割り込みにかかるところが原因のようだ。
何故か最適化(レベル1以上)すると動くので確認してもらったところ、ヘッダ内のマクロに起因していたようで、マクロを修正すると最適化に関係なく正しく動くようになった。
ヘッダの修正版は次のGDLリリースに含まれるだろう。
yoshi

Windows8のIME

カテゴリ : 
雑記
2012-11-8 20:06
しばらく前からWindows8を使っていたが、困ったことにIMEがアプリケーション共通になっていた。調べるほどのことでもなかったので放って置いたのだが、ある時コントロールパネルに設定を見つけたので早速試してみることに。
「コントロールパネル」→「時計、言語、および地域」→「言語」→「詳細設定」の「入力方式の切り替え」内に「アプリウィンドウごとに異なる入力方式を設定する」チェックボックスがあるのでチェックを入れて「保存」する。
これで以前と同様の入力ができるようになった。

SAM3Sのループ時間

カテゴリ : 
その他
2012-10-19 17:28
#include <SAM3S4.h>
#include <piocfg.h>
static const TPin pins[] = {
  { PIO_PA0, PIOA, ID_PIOA, PIO_OUTPUT_0, PIO_DEFAULT },
};
int main () {
  volatile int i;
  PIO_Configure (pins, PIO_LISTSIZE (pins));
  for (;;) {
    PIOA->PIO_SODR = 1;
    for (i = 0; i < 10000; i++);
    PIOA->PIO_CODR = 1;
    for (i = 0; i < 10000; i++);
  }
}
試しにトグル出力させるプログラムを確認していたら勝手にDutyが変更されていた。
いくつか試してみるとfor文を空で回していることが原因らしく、for文内に何らかの処理を指定することでトグル出力されるようになった。
nopもそのうち使えなくなるしどうしたものか。

Dynamixel Configurator更新

カテゴリ : 
その他
2012-9-18 14:45
かなりしばらくぶりの更新になります。
Dynamixel用のコンフィギュレータですが、色々フィードバックいただいたうちから微々たる修正と機能追加をおこなってみました。
  • DXLIB2  V2.7を適用(未公開)
  • Scan方法の見直しと、その際に検出されたデバイスを列挙する機能を追加
  • MXシリーズに対応



こちらからどうぞ

#USS3 Configuratorもあわせて更新しました。

フォトインタラプタ

カテゴリ : 
新商品
2012-6-18 15:53
フォトインタラプタの検出スピードをもう一桁速くしたいといった要望に応えようと、ちまちま実験していたら半年過ぎてしまったorz。

とりあえず従来と外形は変えて2カ所の取付穴を設けたら、ディスクリートという事もあり建蔽率上がりまくり。コネクタを800mmセンサと共通にしたら日照権の争いに。結局発光量を調整するポテンショは廃止。


センサ素子は一体型なんだが、焦点距離が5mmぐらいに合っているので、条件にもよるが検出対象とのギャップが最大でも20mm程度に。


その代り、出力の多機能化を考えており、単純なインタラプタとPWM出力、論理反転のモードを装備してみようと。
開発部

毛色を変えて

カテゴリ : 
雑記
2011-12-20 14:11
LANとUSB機能を標準で提供しているシステムデザイン社のSDLX1100をちょっとだけ紹介。

メインのモジュールはRX62Nとphy及びRJ45のコネクタが搭載されて52x33.5mmとなかなか小型。オリジナルでシンプルなOSが予め搭載されているので、プログラムはHEWを使ってAPI呼ぶだけで相当シンプルに作れちゃう。


拡張基板にはUSBコネクタやLDC・タッチパネル・オーディオアンプなどなど装備されており、これだけでちょっとしたサーバーなんぞはちゃちゃっと構成できてしまう。


特にという事でも無かったので触れてなかったRXシリーズ。知らぬ間にリソースが盛りだくさんになっていておなかいっぱい。
STM32F205上でTOPPERSを動かそうと思ったら、ターゲットにSTM32F205が見つからなかったので、新規に作成することにしました。
TOPPERS/ASPの導入については過去のブログを参考にしています。TOPPERSのバージョンは最新の1.7にしました。

使ったもの

環境の構築

1.Cygwinのインストール

CygwinのWEBサイトからsetup.exeをダウンロードして実行しました。インストール方法は簡単なのでここでは省きます。

2.TOPPER/ASPカーネルの準備

TOPPERS/ASPカーネル簡易パッケージからLM3SXXXX簡易パッケージのasp_lm3sxxxx_gcc-20110801.tar.gzをダウンロードして、c:\cygwin\home\ユーザー名\ (ユーザー名はWindowsにログインしているユーザ名)に解凍しました。c:\cygwinはCygwinのインストールフォルダです。C:\cygwin\home\ユーザ名フォルダはCygwin端末ログイン時のホームディレクトリになります。
コンフィギュレータは実行モジュールが用意されていますので、このまま使用します。

3.書き込みツールの準備

STEVAL-PCC010V2にはJTAGコネクタが用意されているので、TINY JTAG-ICE2を使用することにしました。これでプログラムの書き込みソフトウェアとしてGCC Developer Liteに付属するFlash WriterとopenOCDが使用できるようになりました。

TOPPERS/ASPのコンパイル

取りあえずSTEVAL-PCC010V2で動くことを確認したいので、プログラムはLEDの点滅程度の機能とします。

1.ユーザーズマニュアルを確認します

ユーザーズマニュアルはc:\cyginw\home\ユーザー名\asp\doc\user.txtですが、EUCコードとなっているためEUC対応エディダで開きます。基本は以前のバージョンと変わっていないようです。

2.サンプルプログラムのコンパイル

Cygwinのコンソール画面を起動したら、perlコマンドを実行します。が、ユーザプログラムと必要なファイルを作成しているだけなので今回はsampleフォルダを使用することにして実行しません。
次にコンパイラですが、gccはGCC Developer Liteを使用するので、Cygwinユーザのホームディレクト配下の.bashrcファイルのPATH変数に以下の通り追加しました。インストール先を変更していた場合は変更したフォルダを指定して下さい。
export PATH=${PATH}:"/cygdrive/c/Program Files/BestTech/GCC Developer Lite/GCC/ARM/bin"
依存関係ファイル(Makefile.depend)は何に使用しているか不明だったので、makeだけ実行することにします。が、当然の如くエラーが発生しました。コンパイルの前に色々と準備が必要のようです。

3.ターゲットの作成

最初に、target/lm3sxxxx_gccフォルダをstm32f205_gccに変更します。変なフォルダ名ですが、決まり事なので従いましょう。stm32f205_gccをターゲット依存部と呼びます。doc/porting.txtの「2.システム構築環境のターゲット依存部」に詳細な記述があります。
名称変更したらのターゲット依存部の修正開始です。
まずはヘッダファイルから。
lm3sxxxx.hをstm32f205.hに名前変更し、TMAX_INTNOを15+80に変更します。
lm3sxxxx.hをインクルードしていたヘッダファイルは全てstm32f205.hに書換え、余分なインクルード文(inc/hw_ints.h等)も削除します。更にtarget_syssvc.hのTARGET_NAMEをSTM32F205に変更した後、taget_timer.hのTIMER_CLOCKを(120000)に設定します。今回は動けば良いのスタンスであるため、値の精査をしていません。TIMER_CLOCKはTOPPERSカーネル内で時間用に使用しているようなので、想定時間と違っていたらここを修正します。
修正したヘッダファイルはtarget_timer.h/target_serial.h/target_config.h/target_syssvc.hです。
次にtarget_config.cを修正します。
こちらも余計なインクルード(inc/hw_ints.h等)を削除し、target_initialize関数からコア依存の初期化以外を削除します。core_initialize関数の呼出し前にクロックの初期化を追加します。ざっくりと記載します。
レジスタ等の詳細はSTMicroelectronics社さんからダウンロード可能なリファレンスで確認して下さい。

#define RCC_CR        (*(volatile uint32_t *)0x40023800)
#define RCC_PLLCFGR (*(volatile uint32_t *)0x40023804)
#define RCC_CFGR (*(volatile uint32_t *)0x40023808)
#define RCC_CIR (*(volatile uint32_t *)0x4002380C)
#define FLASH_ACR (*(volatile uint32_t *)0x40023C00)
#define PLL_M 25
#define PLL_N 240
#define PLL_P 2
#define PLL_Q 5
/* 初期化部分 */
volatile uint32_t _up_cnt = 0, _hse_stat = 0;
RCC_CR |= (uint32_t)0x01;
RCC_CFGR = 0x0;
RCC_CR &= (uint32_t)0xFEF6FFFF;
RCC_PLLCFGR = 0x24003010;
RCC_CR &= (uint32_t)0xFFFBFFFF;
RCC_CIR = 0x00000000;
RCC_CR |= ((uint32_t)0x00010000); // enable HSE
while (!(RCC_CR & ((uint32_t)0x00020000)) && _up_cnt++ < (0x0500)); // HSE ready
if (RCC_CR & ((uint32_t)0x00020000)) { // not timeout
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFFFF0F)); // SYSCLK not divided
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFF1FFF) | ((uint32_t)0x00008000)); // PRPRE2 AHB clock divided by 2
RCC_CFGR = (RCC_CFGR & ((uint32_t)0xFFFFE3FF) | ((uint32_t)0x00001400)); // PRPRE1 AHB clock divided by 4
RCC_PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | ((uint32_t)0x00400000) | (PLL_Q << 24);
RCC_CR |= ((uint32_t)0x01000000); // main PLL enable
while (!(RCC_CR & ((uint32_t)0x02000000))); // PLL ready
FLASH_ACR = ((uint32_t)0x00000703);
RCC_CFGR = (RCC_CFGR & (uint32_t)((uint32_t)0xFFFFFFFC) | ((uint32_t)0x00000002)); // PLL used as the system clock
while (RCC_CFGR & ((uint32_t)0x0000000C) != ((uint32_t)0x00000008));
}
最後にtarget_fput_log関数がありますので、内容を削除して空の関数とします。
次はMakefile.targetの修正です。
セグメントの開始アドレスを追加したらlm3sxxxx用の記述を削除して、stm32f205用に書き換えるだけです。大した修正ではないので詳細は省きます。
次にリンカスクリプトを作成します。今回はstm32f205.ldとしました。Makefile.targetにもそのように記述します。
リンカスクリプトについては出力セクション.textと.rodataはFLASHに配置します。出力セクション.textには.vectorセクションと.textセクションを配置します。出力セクション.rodataには.rodataセクションを配置します。
SRAMに出力セクション.dataと.bssを配置すれば完成です。MEMORY領域の設定はリファレンスで確認して下さい。
続いてsampleフォルダ内の修正です。
今回使用するSTEVAL-PCC010V2はシリアルが外部へ接続されていないので使用することができません。そのため、今回はsyslog関連を使用しないことにしました。
sample/Makefileから以下のファイルを使用しないようを修正します。システムサービスに関する定義のSYSSVC_COBJSに記述があります。
target/stm32f205_gcc/target_serial.c
syssvc/banner.c
syssvc/logtask.c
syssvc/serial.c
syssvc/syslog.c
syssvc/vasyslog.c
他の修正点はTARGETの変更、CFLAGSに-DTOPPERS_OMIT_SYSLOGの追加になります。
-DTOPPERS_OMIT_SYSLOGはカーネル側でもsyslogを使用しており、これを抑止するためのフラグです。
ターゲットファイルをall: $(OBJFILE)よりall: $(OBJNAME).binに変更したらMakefileの修正は完了です。
次にsample1.cfgの編集です。
syslogを使用しないことにしたので、syssvc配下のcfgファイルのINCLUDE文を削除します。
最後にsample1.cの修正です。
まず使用できない部分を削除します。syslog_msk_log関数を使用している最初のSVC_PERRORと、シリアルポートの初期化部分です。タスクについては今回起動しませんので励起しているact_tsk関数部分を削除します。task関数自体を削除する場合はsample1.cfgの修正を行ってください。メインループを空にしたら後は追加です。
STEVAL-PCC010V2のLEDはPE2とPE3に接続されていますので、まずはmain関数の最初に初期化を追加します。
#define RCC_AHB1ENR   (*(volatile uint32_t *)0x40023830)
#define GPIOE_MODER (*(volatile uint32_t *)0x40021000)
#define GPIOE_OTYPER (*(volatile uint32_t *)0x40021004)
#define GPIOE_OSPEEDR (*(volatile uint32_t *)0x40021008)
#define GPIOE_PUPDR (*(volatile uint32_t *)0x4002100C)
#define GPIOE_BSRR (*(volatile uint32_t *)0x40021018)
/* 初期化部分 */
RCC_AHB1ENR |= ((uint32_t)0x00000010); // port E clock enable
GPIOE_MODER = ((GPIOE_MODER & 0xFFFFFF0F) | (uint32_t)0x050); // PE2/PE3 output
GPIOE_OSPEEDR = ((GPIOE_OSPEEDR & 0xFFFFFF0F) | (uint32_t)0x0F0); // PE2/PE3 100MHz
GPIOE_OTYPER = (GPIOE_OTYPER & 0xFFFFFFFB);
GPIOE_PUPDR = (GPIOE_PUPDR & 0xFFFFFFFB);
更にメインループでLEDの点灯と消灯を行います。
#define LED1          0x0004
#define LED2 0x0008
/* メインループ */
while (1) {
GPIOE_BSRR = ((GPIOE_BSRR & 0x0000FFFF) | ((LED1 << 16)));
tslp_tsk (500);
GPIOE_BSRR = ((GPIOE_BSRR & 0xFFFF0000) | (LED1));
tslp_tsk (500);
}
メイン以外の関数は変更しません。これでmakeが通るようになりました。

 

マイコンボードで動かす

STEVAL-PCC010V2はJTAGコネクタが用意されているので、そのままTINY JTAG-ICE2を接続します。

TINY JTAG-ICE2経由でPCとSTEVAL-PCC010V2を接続したら、STM32F205用のopenOCDを起動します。
openOCD起動後、Flash Writerを起動します。書込むファイルはコンパイルしたasp.binを指定します。起動したFlash Writerのタイトルバー左端にあるアイコンをクリックすると、メニューが表示されるので、メニューから「FlashWriter Property」を選択します。すると、Flash Writerのウィンドウが拡大表示されます。

ウィンドウが拡大したら、CPU TYPEにopenOCDを選択し、Write Script Fileにはstm32f2xx_bin_flash.scriptを指定します。PORTは自動でopenOCDが設定されるので指定しません。
実際の書込みには[Execute]ボタンを押下して下さい。書き込み中はそれにかかる処理の状況が逐一ログウィンドウに表示されます。滞りなく成功すればFlash Writerのステータスバーに青色で Successful と表示されます。ログウィンドウは数秒放っておくと自動で閉じてしまうので、エラーメッセージを確認したい場合は気を付けてください。
書込みが完了すると自動でプログラムが実行され、LEDが1秒間隔で点滅し始めました。どうやら無事TOPPERS/ASPをSTM32F205上で実行できたようです。

その後、waitしないタスクをぶん回して割り込みを行ってみましたが、割り込みも問題(遅滞)なく動作しました。旧バージョンでは他のタスクが停止していたはずですが、バージョンアップしたTOPPERかSTM32F205の性能のせいなのか分かりませんが、当初の目的は達成できたのでTOPPERについてはここまでとします。

大掃除

カテゴリ : 
その他
2011-11-17 17:44
突然PC(Windows7)にログインできなくなった。
セーフモードであればログインできることからウィルスかシステムファイルの一部が破損しているのでは?とあたりを付け調査するも状況は変わらず。
PCの本体カバーを開けるとグラフィックボードのファンが目詰まりしており、掃除機にて埃を取り除く。
掃除後、PCは何の問題もなく起動した。忘れがちだがPCは精密機器。
目の届かないところも、これからは気を付けることにしよう。

大洪水

カテゴリ : 
その他
2011-11-10 13:28
朝、出社してみると天井から大量の水が。
上階に連絡に行った時には既に出水は収まっているものの床上浸水状態で、この水がどこかを伝わり下階へ流れ込んでいた模様。
床一面の水溜りとを1時間以上かけて処理するも未だに天井からは水滴がポトリ。
事務用PCと複合機が冠水してしまったので、事務作業は一時停止中。
水難の相でも出ていたか。

香り付き蚊取線香

カテゴリ : 
その他
2011-11-8 12:06
一般では風邪が流行っている様子ですが、個人的に頭を悩ませているのは11月を過ぎても発生している蚊。
この季節、対策グッズは入手困難で唯一入手可能であったのが蚊取線香。
なるほど、それなりの効き目はあったが2日たっても煙いのはやはり線香ゆえか。
しかも煙に効用がないときては香りくらいは欲しいところ。
お香にもなる蚊取線香なんて各メーカさん、どうですかねぇ。
うん、やっぱ電気蚊取でいいや(笑)