ブログ - 最新エントリー

ToppersとUDP

カテゴリ : 
TOPPERS
2011-8-2 9:45
イマイチ不完全燃焼していたAT91SAMシリーズのUDP(USB Device Port)とToppersの相性。
現状諸々の処理が多重化すると、カーネルもろともデッドロックしてうんともすんとも言わなくなる症状が出てしまいますが、UDPドライバの一部のフラグ待ちによりデッドロックするという要因がありました。
この影響を受けるのはSAM7S_TOPPERS・FREEDOM III・UD3のUSBを仮想シリアルポートとして使用した場合で、かなり広範に渡っています。

早いうちにこの部分を改修し、合わせてFREEDOM IIIライブラリのマイナーバグフィクスを施したGCC Developer Liteを公開します。

MATLABでDXLIB2を動かす

カテゴリ : 
その他
2011-7-19 17:51
DXLIB2にはLabVIEWのサンプルがあるが、MATLABのサンプルはないのか?
そんな噂を耳にしたので軽くさわりだけの確認を。
検証環境は以下の通り。
準備としてdxlib2.dllとdxlib2.hを作業フォルダへコピー。
MATLABを起動し、「ファイル(F)」→「パス設定(H)」で作業フォルダを追加。
mファイルを新規作成し、以下をdxsample.mとして保存。

function dxsample
if exist('dxlib2.h') ~= 2;
    disp('header undefined');
    return;
end
if ~libisloaded('dxlib2') loadlibrary('dxlib2.dll','dxlib2.h');end
pcom = '\\.\COM3';
br = 1000000;
tout = 100;

devid = calllib('dxlib2','DX_OpenPort',pcom,br);
if devid==0;
    disp('Open failed!');
    unloadlibrary('dxlib2');
    return;
end
Err = libpointer('uint16Ptr', 0);
for i = 0:252
    Ret = calllib('dxlib2', 'DX_Ping', devid, i+1, tout, Err);
    if Ret;
        fprintf('Found ID=%d\n', i+1);
    else
        fprintf('Not found ID=%d [$%04x]\n', i+1, Err.Value);
    end
end

calllib('dxlib2','DX_ClosePort',devid);
unloadlibrary('dxlib2');
disp('Normal end');

結果はこんな感じ。

警告はMATLAB内のwin.hに起因しているようで、少々loadlibraryに時間がかかっているが、ここでは割愛。

蕎麦屋の出前

カテゴリ : 
雑記
2011-7-15 0:14
もう出たところ状態のGCC Developer Liteですが、7/18の週に公開する事を目標に調整中です。
今回は広範にわたるターゲットの更新の他、販売及びサポート終了のターゲットの廃止が行われ、次期バージョンでは使用できなくなる製品があります。よって、現在公開しているバージョンをダウンロードし保存しておくことをお勧めします。
また、公開と合わせて各製品のドキュメントやサンプルコードが更新され、URLが変更になるものもありますので注意してください。

またまたUD3出荷準備中

カテゴリ : 
その他
2011-7-6 20:06
先回のロットがあっという間に終わってしまったため、次ロットの準備を行っている最中です。在庫の充当にはあと数日かかりますので、もうしばらくお待ちください。
なお、既に予約いただいている分に相当数が割り当てられてしまう都合、購入される場合は見積依頼されることをお勧めします。

それと、GCC Developer Liteの更新が間近に迫っており、UD3のライブラリもアップデート対象となっています。一部のコンソールAPIが変更されるため、公開された際はサンプルプログラムも合わせて更新してください。

熱中症目前

カテゴリ : 
雑記
2011-6-24 23:13
今年最高の猛暑日が続く中の移転作業。
黙々と作業に熱中していると熱中症
皆さんもご自愛ください。

それはそうと、ようやく諸々が動き始め、通常業務に戻りましたのでご報告いたします。

C++への対応

カテゴリ : 
雑記
2011-6-17 2:58
C++のコードが利用できない訳ではなく、それに伴う小細工が面倒なのと、小さいマイコンでそこまで要求されても・・・というのが正直なところ。
一番のネックは不用意に記述されて出力コードサイズが巨大化してしまう事。その他はやっぱり動的なメモリの確保といった所ですか。

ご質問の数としても少ない訳ではなく、その都度「無理」とか「とりあえず版」で対応していたのですが、次のリリース版ではSAM7Sがらみの一部のターゲットで「とりあえず版」にちょっとだけ手を加えて、クラスぐらいは使えるモノを解禁していこうかと思っています。
あまり期待しないでくださいね

FREEDOM IIIライブラリV4.0もうひといき

カテゴリ : 
雑記
2011-6-14 0:04
まだ未公開のFREEDOM III library v4.0ですが、互換性に関してのお問い合わせがありましたので、APIのリファレンスのみを先行して以下に公開しておきます。
FREEDOM III library v4.0
現行のAPIについては、ページの最初にあるpdfを参照してください。まだまだ書きかけの部分がありますが、リリース時には完成しています。

見れば見るほど嫌気がさすほどのボリュームと非互換性ですが、実際に使うのはそのうちの一部だけですので、それほど仰々しいものでも無いと思っています。
大きな違いだけ列挙しますと、
  • 適用はFDIII-HCに限定
  • DXLIBは以後不使用
  • API名称はできるだけ共通のフォーマットに変更
  • OSに依存できる機能(旧似非タスクやインストラクション)はOS任せに
  • PC版DXLIB2等との互換性を重視したパケット通信APIに
  • 初期化APIは全く互換性なし
  • CPU内蔵フラッシュを使用したモーションデータの管理機能を全面削除し、SDカード一本に絞る
  • 大幅な負荷率軽減
  • SDカードへの自由なアクセスAPI追加
  • デバイスとのネットワーク安定化
  • ネットワークを複数タスクでアクセスする際の排他制御の無意識化
  • いざという時もあろうかと思ってWDTを活性化
といったところでしょうか。
ホントToppers様様といった所です。

FREEDOM IIIライブラリの互換性

カテゴリ : 
TOPPERS
2011-6-7 11:45
まるで何とかの出前みたいに出る出るといってリリースされていないFREEDOM IIIライブラリですが、もう少しだけお待ちください。
旧来との互換性を無視という訳ではないのですが、OSで担える機能はそれに任せることにしたため、かなりの部分で互換性が保たれない状態です。おまけに、内部だけでもんでいる事もあって、毎日のようにかい離してしまっています
その代りと言っては難ですが、サンプルプログラムの拡充を図っていますので、使い勝手の向上を感じていただけるのではないかと思っています。

それと、FDIII-HCのブートローダですが、かなり頑張ってサイズを減らした事で、ユーザプログラムにおいては従来と同様のメモリマップを維持することが出来ました。先行してリリースしようとも考えていましたが、最新ライブラリあって意味を持つのでこちらもひとまずお待ちください。

SAM3S

カテゴリ : 
雑記
2011-5-25 0:21
最近はarmもcortexに主流が移りつつある様です。単純に早くてうまいのであれば使いたくなるものでもありますが、sam3sシリーズにはsam7sシリーズと端子の互換性がある程度確保されたものがあるので、チップを貼り替えさえすればいっちょあがりなんてぇ事になればなお幸せ
ソースの互換性はコアの違いから期待してもしょうがないところでもありますが、ペリフェラルは大差無い部分も多いので結構使いまわせましたし、JTAG経由の書き込みも難なく使えています。
メルトダウン後の処置の目途が立つ頃にはベステクでも何かこさえる気分になるかもしれませんが(逆かな)、自前で貼り替えてもハードルは低いので遊べるでしょう。

COMポートネタ

カテゴリ : 
その他
2011-5-6 17:21
最大は256までらしいが、255で正常に稼働せず。
まぁWindowsで256個もCOMポートを開くことはないが、Vistaが入ったPCで知らぬ間に使えるCOMポートが無くなっていたので、ちょっと調べてみたらとんでもない事に。どうやらBluetoothでペアリングを繰り返しているうちに、自動的に削除されていると思っていた仮想COMポートが、幽霊のように残っていた事が判明。
デバイスマネージャは通常接続されていない装置はリストに列挙されないが、環境変数"devmgr_show_nonpresent_devices"を追加し"1"を設定した後、デバイスマネージャで「非表示のデバイスの表示」にチェックを入れると、今まで見えなかったゴミもろとも表示される。

あとは片っ端から二度と使われることのないデバイスを一つ一つ手動で削除するだけだが、必要な物まで削除してしまわないように。
なお、Windows 7以降ならBluetoothデバイスのペアリングで追加されたCOMポートは、そのBluetoothデバイスを削除すれば一緒に無くなる模様。

ついでと言っては何だが、ちょっとだけプログラムネタ。
自前でCOMポートを扱うプログラムを作ろうとすると、設定項目とAPIのボリュームで結構大変。大そうな事をする訳でも無いのにプログラムの行数だけは増えてゆくもの。なんていうネタがあったので、至極単純なシリアルターミナルを数十行で作ってみた。
イベントやブロッキング・タイムアウトなんぞ一切無視して、全てポーリングで処理して無限ループするだけの代物。まるでマイコンのプログラムの様だw
#include <signal.h>
#include <windows.h>
#include <conio.h>

int term = 1;

void signal_handler (int signo) {
(void)signo;
signal (SIGINT, signal_handler);
term = 0;
}

void main (void) {
int i;
char c = 0;
HANDLE h = CreateFile ("\\\\.\\COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
DCB dcb = { BaudRate:115200, ByteSize: 8, Parity: NOPARITY, StopBits: ONESTOPBIT, };
COMMTIMEOUTS timeouts = {0,0,0,0,0};
COMSTAT stat;
DWORD l;
UCHAR buf[500];

if (h != INVALID_HANDLE_VALUE) {
signal (SIGINT, signal_handler);
if (SetCommState (h, &dcb)) {
if (SetCommTimeouts (h, &timeouts)) {
while (term) {
if (kbhit ()) {
c = getch ();
WriteFile (h, &c, 1, &l, NULL);
}
if (ClearCommError (h, NULL, &stat)) {
if (stat.cbInQue > sizeof (buf)) stat.cbInQue = sizeof (buf);
if (ReadFile (h, &buf, stat.cbInQue, &l, 0) != 0) for (i = 0; i < l; i++) putchar (buf[i]);
}
Sleep (5);
}
}
}
CloseHandle (h);
}
}
COMポートやボーレート等は適宜変更して、GCC Developer Liteのコンパイラオプションを開き、設定リストから「x86 (Console)」を選んでコンパイルすればWindowsのコマンドプロンプトで動くexeファイルの完成。終了するにはCtrl+Cを押してね。
まかり間違うとOSの負荷だけ上がってPCが熱暴走しかねないが、こんなおバカな代物でも時には使い道があるやも知れないので、備忘録として載っけておく。ってかTera TermやSimple Termでいいじゃん。