|
自動車に載せている自作コントロールユニットのソフトウェアを書き換えようとしたら不具合がでた。
UARTが機能しなくなっちゃった。
UARTのオープンは
OpenUART1(UMODEValue,USTAValue,UBRG);
と記述する。 最初のUMODEValueの値は
unsigned int UMODEValue = UART_EN & UART_IDLE_STOP & UART_RX_TX & …
と記述するのだが「UART_RX_TX」と記述するとエラーになる。以前(2007年頃)は記述しなくてもエラーはでなかった。っというかやっぱりエラーになったのではずした覚えがある。
あらためて、UARTをコントロールしている「UART.h」を見てみた。すると「UART_RX_TX」のところは
#if defined(__dsPIC30F1010__) || defined(__dsPIC30F2020__) || defined(__dsPIC30F2023__) || defined(__dsPIC30F4011__)
/* Alternate I/O not implemented on dsPIC33F/PIC24H */ #define UART_ALTRX_ALTTX 0xFFE7 /*Communication through ALT pins*/ #define UART_RX_TX 0xFBE7 /*Communication through the normal pins*/ #endif と記述されている。つまり「UART_RX_TX」はdsPIC30F1010とdsPIC30F2020とdsPIC30F2023とdsPIC30F4011しかサポートしていないことになる。わたしの使っている石はdsPIC30F3014だからこれじゃコンパイルエラーになるわけだ。 この記述は通常のUARTピンと代替UARTピンを指定する機能だがdsPIC30F3014にも代替UARTピンがあるのでサポートしていなければおかしいのだ。
以前のバージョンではこれらを指定しなければUART_RX_TXの値である0xFBE7が生成されていたのではないかと思われるが最新バージョンでは指定しないと変な値が生成されているのだろう。
これでC30のバグであることが決定。
さっそくメインのソースに以下の行を追加
// define UART PARA
#define UART_RX_TX 0xFBE7 #define UART_ALTRX_ALTTX 0xFFE7 これでコンパイルエラーがなくなり、ソフトウェア改修済みのdsPIC30F3014をコントロールユニットに搭載、先ほど走行試験をしてきたらきちんとUART通信がされていて、速度やシフトポジションなどが正常に表示されていた。
めでたしめでたし。
でも最初、ぜんぜん関係ないところを直したのにいきなり走行中スピードが0と表示されてあせりまくりましたよ。
|

- >
- Yahoo!サービス
- >
- Yahoo!ブログ
- >
- 練習用







