PICマイコン USB HOST(USB Framework)のベンダークラス対応
マイクロチップ・テクノロジー社より提供されているApplication librariesに含まれるUSB Framework(v2013-06-15)を使用して、USBホストを構築する場合に、USBの標準クラスを使用する場合は問題ありませんが、ベンダークラスを使用した場合には、一部不適合箇所があります。
【usb_host.c】
条件文が(bRequest == SET_INTERFACE)となっていますが、SET_INTERFACEというのは標準リクエストでの値は[11]である為、ベンダーリクエストで値が[11]の要求があった場合に、上記の処理が意図せず実行されてしまいます。
以下のように修正することで、bmRequestTypeを「ホストからデバイス」「標準リクエスト」「リクエスト対象がデバイス」に限定します。
【usb_host.c】
ベンダーリクエストに[11]が存在するデバイス用のドライバを開発する場合は、この対応が必須となります。
【usb_host.c】
BYTE USBHostIssueDeviceRequest( BYTE deviceAddress, BYTE bmRequestType, BYTE bRequest, WORD wValue, WORD wIndex, WORD wLength, BYTE *data, BYTE dataDirection, BYTE clientDriverID ) { ・ ・ ・ // If the user is doing a SET INTERFACE, we must reset DATA0 for all endpoints. if (bRequest == USB_REQUEST_SET_INTERFACE)// !問題箇所 { USB_ENDPOINT_INFO *pEndpoint; USB_INTERFACE_INFO *pInterface; USB_INTERFACE_SETTING_INFO *pSetting;
条件文が(bRequest == SET_INTERFACE)となっていますが、SET_INTERFACEというのは標準リクエストでの値は[11]である為、ベンダーリクエストで値が[11]の要求があった場合に、上記の処理が意図せず実行されてしまいます。
以下のように修正することで、bmRequestTypeを「ホストからデバイス」「標準リクエスト」「リクエスト対象がデバイス」に限定します。
【usb_host.c】
BYTE USBHostIssueDeviceRequest( BYTE deviceAddress, BYTE bmRequestType, BYTE bRequest, WORD wValue, WORD wIndex, WORD wLength, BYTE *data, BYTE dataDirection, BYTE clientDriverID ) { ・ ・ ・ // If the user is doing a SET INTERFACE, we must reset DATA0 for all endpoints. // if (bRequest == USB_REQUEST_SET_INTERFACE)// !修正箇所 if ((bRequest == USB_REQUEST_SET_INTERFACE) && (bmRequestType == USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_STANDARD | USB_SETUP_RECIPIENT_DEVICE)) { USB_ENDPOINT_INFO *pEndpoint; USB_INTERFACE_INFO *pInterface; USB_INTERFACE_SETTING_INFO *pSetting;
ベンダーリクエストに[11]が存在するデバイス用のドライバを開発する場合は、この対応が必須となります。
タグ
PIC、USB、ソフトウェア2013年10月17日 | コメントは受け付けていません。|
カテゴリー:技術情報
Atmel Studio 6でのcppcheckを使用する方法
今回はAtmel Studio 6でcppcheckを使用する方法をご紹介します。
※cppcheckはすでにインストールされているものとして記載いたします。
※cppcheckはすでにインストールされているものとして記載いたします。
タグ
ソフトウェア、ツール2013年2月24日 | コメントは受け付けていません。|
カテゴリー:技術情報
MicroBlazeソフトウエア開発(受託開発)
ザイリンクス社製FPGA Spartan6に実装した ソフト プロセッサ コア MicroBlaze のソフトウエアのを受託開発いたしました。
開発概要としては、生産ライン用の検査機のマイコンソフトウエア開発です。
ザイリンクス社から提供されているPOSIX準拠のRTOS xilkernel を使用しました。
開発概要としては、生産ライン用の検査機のマイコンソフトウエア開発です。
ザイリンクス社から提供されているPOSIX準拠のRTOS xilkernel を使用しました。
タグ
FPGA、ソフトウェア2012年9月11日 | コメントは受け付けていません。|
カテゴリー:開発実績
PICマイコンのスタックについて
PICマイコンは、スタックをRAM領域に置きません。RAM領域とは別にハードウエアのスタックが用意されています。ハードウエアのスタックはデバイスの規模によって違いますが、最小で2個しか持っていないものも多くあります。
スタックが不足するようプログラムを作成してコンパイルしても、コンパイラは警告等を発することはありません。実際にプログラムを実行すると、スタック破壊を起こして、PICマイコンは暴走状態に陥ります。
プログラマはスタック消費量を常に意識してコーディングに取り組む必要があります。
CCS Cコンパイラでのスタックの消費
ハードウエアスタックは、関数コールする毎に戻りアドレスを保存するためにスタックを1つ消費します。実際には、すべての関数コールでスタックを消費することは無く、1箇所からのみ呼び出される関数に関しては、コンパイラはジャンプ命令を使用することでスタックを消費しないようにコンパイルします。しかし、それでもスタックが2個の場合、関数を機能毎に細分化すると、すぐにスタック不足となってしまいます。その様な場合には、複数個所から呼ばれる関数でも、インライン関数にすることでスタックの消費を回避できます。しかし、インライン関数にすると、ROM消費量は当然増加してしまいます。スタックが不足するようプログラムを作成してコンパイルしても、コンパイラは警告等を発することはありません。実際にプログラムを実行すると、スタック破壊を起こして、PICマイコンは暴走状態に陥ります。
プログラマはスタック消費量を常に意識してコーディングに取り組む必要があります。
タグ
PIC、ソフトウェア2012年8月27日 | コメントは受け付けていません。|
カテゴリー:技術情報