SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|

2005-02-04(Fri) 更にPCB-CADをイジりまわす

  なかなかガツーンと時間が取れないものの、ボチボチとPCB-CAD「EAGLE」をイジる。昨日、概ね日本語のチュートリアルの通りに操作し、大筋の操作はわかった。しかしながら、それだけだと大筋の操作から一歩も出られない。ココは一発、実践に近い形で操作をするのである。

  とりあえず、詰めの部分で放ってあるが、一応の完成を見た「SHAKENS YOU UP」をプリント基板化するつもりで回路図を入力する。とりあえず大変なのが、ライブラリから自分の必要な部品を探し出すトコロである。この「EAGLE」というPCB-CAD、非常にライブラリが充実しているのはよいのだが、充実しすぎて自分の使いたい部品をリストから探すのが大変この上ないのだ。

  そもそもイキナリつまずいたのがこのライブラリなのだ。上記のチュートリアルでは「ライブラリ内のDiscreteというカテゴリから部品を選んで配置せよ」とあるのに、オイラのライブラリにはそんなカテゴリは見当たらない。悪いことに抵抗とかコンデンサとかの基本部品は、ほとんどDiscreteの中に含まれてしまっているので、そいつらを配置できないと回路図っぽくなってこなくて、つまんないことこの上ない。結局、散々探し回った挙句、rclというカテゴリの中にそれっぽいモノが入っているのを発見した。rcl……抵抗、コンデンサ、コイルの頭文字ね。わからんちゅーの。

  結局、基本的にはライブラリの使用フラグ(緑のポッチ)を一度全てオフにして、部品を発見したら、オンにするという方法がよさそうである。そうしないと、膨大な部品の山に埋もれて作業がちっとも進まないのである。

  苦労しつつも、なんとか回路図っぽいもが仕上がったので、基板のデザインに移る。自動配線機能を使って一発で基板完成じゃ!! ……と、思いきや、そうは甘くない。OLIMEXに片面基板を発注しようとしているのに、裏表に配線しちまうのだ。片面にするのはどうするんじゃ!? ……ここでまた少し悩んだ末、Autoの実行確認時に出てくるダイアログのPreferred DirectonsのTopをN/Aに変更すればいいことに気づく。片面じゃ、うりゃ!! とやると今度は世にも珍妙なパターンが現れる。部品配置が悪すぎるようだ。今度は配線を元の状態に戻す方法がわからない。毎回読み込み直すのもバカらしい。結局、左のパレットからRipUpを選択し、上の青信号アイコンを押すと全部元に戻ることに気づく。マニュアル読まずにやってりゃ仕方ないが、慣れるまで大変だこりゃ。結局、以前に自分でデザインしたユニバーサル基板上の配置に近い形で部品を並べると、一番スマートに配線が行われた。そうか。自動配線とはいっても、かなり人間様が関与しないとイカンのね。なるほど。

  画像の説明

  というワケで、PCB-CAD「EAGLE」との格闘は続く。こんな調子で作業していたら、OLIMEXへ基板発注するまでいつまでかかるコトか……不安だ。


2009-02-04(Wed) Fedora9、電子工作チューン

  相変わらず仕事は多忙だが、激烈な状態からは脱し、個人的に急を要す開発案件も減ってきて、少しココロに余裕ができたところで、おもむろにゴソゴソと環境の構築を始めるのであった。

  というのも、本格的な電子工作は約1年前にロータリエンコーダをゴソゴソやって以来だ。ちなみにソレは放置状態。まぁ、念願が叶ってWindowsを捨て、PC環境をFedoraに移し、7やらVistaやらXPやらのゴタゴタから完全に解放され、すこぶる気分よく毎日を過ごしているが、電子工作まわりの環境だけは、ほとんどイチから構築しなければならない……つーか、そもそも構築できるモンなんやろか?

  つーわけで、まずは、オイラが回路デザインをする時に必須な、回路図エディタ……というか、実体配線図エディタをどうにかしなければならんのだが、Windows時代に愛用していたBschは、どうやらLinuxでも動くらしい。早速、コンパイルを試みる。 

/home/mitsu/develop # mkdir bsch
/home/mitsu/develop # cd bsch
/home/mitsu/develop/bsch # wget http://www.suigyodo.com/online/e/qbsv047.tgz
/home/mitsu/develop/bsch # wget http://www.suigyodo.com/online/e/qlcv043.tgz
/home/mitsu/develop/bsch # wget http://www.suigyodo.com/online/qnl047a.tgz
/home/mitsu/develop/bsch # wget http://www.suigyodo.com/online/qnu043a.tgz
/home/mitsu/develop/bsch # wget http://www.suigyodo.com/online/c2t3c003.tgz
/home/mitsu/develop/bsch # tar xvfz qbsv047.tgz
/home/mitsu/develop/bsch # cd qbsv047
/home/mitsu/develop/bsch/qbsv047 # cat readme-j.txt | toutf8
/home/mitsu/develop/bsch/qbsv047 # cd qtbsch3v
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # qmake
-bash: qmake: command not found

  だめじゃん。qtの開発環境が必要なようだ。抜く手も見せずに導入して、再度コンパイルを試みる。

/home/mitsu/develop/bsch/qbsv047/qtbsch3v # yum search qt
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # yum install qt-devel
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # qmake-qt4 
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # make
g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include/Qt3Support -I/usr/include/Qt3Support -I/usr/include -I. -I. -I. -o complib.o complib.cpp
In file included from complib.h:30,
                 from complib.cpp:33:
sptnobjtext.h:40: 警告: unused parameter ‘grip’
complib.cpp: In member function ‘bool SPtn::readCe3(SReadCE3&)’:
complib.cpp:244: error: ‘atoi’ was not declared in this scope
complib.cpp:248: error: ‘atoi’ was not declared in this scope
complib.cpp:192: 警告: unused variable ‘vBuffCount’
complib.cpp:193: 警告: unused variable ‘n’
complib.cpp:193: 警告: unused variable ‘i’
complib.cpp: In member function ‘bool SPin::readCe3(SReadCE3&, int)’:
complib.cpp:424: error: ‘atoi’ was not declared in this scope
complib.cpp: In member function ‘bool SCompInfo::readCe3(SReadCE3&, std::string&, std::string&)’:
complib.cpp:738: error: ‘atoi’ was not declared in this scope
complib.cpp:741: error: ‘atoi’ was not declared in this scope
complib.cpp:745: error: ‘atoi’ was not declared in this scope
complib.cpp: In member function ‘std::string SCompLib::uniqueName(const std::string&)’:
complib.cpp:1221: error: ‘atoi’ was not declared in this scope
complib.cpp: In member function ‘bool SCompLib::ReadLb3(SReadCE3&, bool)’:
complib.cpp:1347: 警告: deprecated conversion from string constant to ‘char*’
complib.cpp: In member function ‘bool SCompLib::readLibraryFile(const char*)’:
complib.cpp:1511: 警告: deprecated conversion from string constant to ‘char*’
complib.cpp:1519: 警告: unused variable ‘len’
make: *** [complib.o] エラー 1

  なんじゃー。atoiなんて知らんって? ヘッダのインクルード忘れか? 「man atoi」して「#include <stdlib.h>」が必要であることを確認する。

  最初、個々の.cppファイルに、各々、記述を加えまくってなんとか対処したが、代表であるstdafx.hに書けば、それで一発っぽい。

/home/mitsu/develop/bsch/qbsv047/qtbsch3v # emacs stdafx.h 
+ #include <stdlib.h>
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # make
g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include/Qt3Support -I/usr/include/Qt3Support -I/usr/include -I. -I. -I. -o sptnobjpolygon.o sptnobjpolygon.cpp
sptnobjpolygon.cpp: In member function ‘virtual SRect SPtnObjPolygon::area()’:
sptnobjpolygon.cpp:76: error: ‘INT_MAX’ was not declared in this scope
sptnobjpolygon.cpp: In member function ‘virtual bool SPtnObjPolygon::readCe3(SReadCE3&)’:
sptnobjpolygon.cpp:289: error: ‘INT_MIN’ was not declared in this scope
sptnobjpolygon.cpp:366: 警告: deprecated conversion from string constant to ‘char*’
make: *** [sptnobjpolygon.o] エラー 1

  ぐむむ。INT_MAXとINT_MINが定義されてないとな? だまって足す。

/home/mitsu/develop/bsch/qbsv047/qtbsch3v # emacs stdafx.h 
+ #define INT_MAX (2^31) - 1
+ #define INT_MIN -(2^31)
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # make
g++ -c -pipe -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -I/usr/lib/qt4/mkspecs/linux-g++ -I. -I/usr/include/QtCore -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtGui -I/usr/include/Qt3Support -I/usr/include/Qt3Support -I/usr/include -I. -I. -I. -o xbschdoc.o xbschdoc.cpp
In file included from complib.h:30,
                 from xbschcomponent.h:28,
                 from xbschdoc.h:32,
                 from xbschdoc.cpp:45:
sptnobjtext.h:40: 警告: unused parameter ‘grip’
xbschdoc.cpp:734: 警告: unused parameter ‘wce3’
xbschdoc.cpp:734: 警告: unused parameter ‘pList’
xbschdoc.cpp:734: 警告: unused parameter ‘bOwnOnly’
xbschdoc.cpp: In member function ‘void SXBSchDoc::selectForDragPinConnection(int, const SRect&, bool)’:
xbschdoc.cpp:1399: 警告: unused variable ‘tempSize’
xbschdoc.cpp: In member function ‘virtual bool SXBSchDoc::findStringCompare(const char*, const char*, bool)’:
xbschdoc.cpp:1734: error: ‘strcmp’ was not declared in this scope
xbschdoc.cpp:1736: error: ‘strstr’ was not declared in this scope
make: *** [xbschdoc.o] エラー 1

  こんどはなんだ? 「man strcmp」で「#include <string.h>」ッ!!

/home/mitsu/develop/bsch/qbsv047/qtbsch3v # emacs stdafx.h 
+ #include <string.h>
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # make
g++  -o qtbsch3v application.o ce3io.o cfgdata.o complib.o componentview.o coord.o drawcomponent.o drawcomponentbase.o drawobject.o editcommentdlg.o editcomponent.o editcomponentimpl.o editlabel.o editlabelimpl.o edittag.o edittagimpl.o main.o printOptionDlg.o selcomp.o selcompimpl.o setlib.o setlibimpl.o setSheetSize.o setlayerdlg.o sptnobj.o sptnobjarc.o sptnobjcircle.o sptnobjline.o sptnobjpolygon.o sptnobjtext.o xbschcomment.o xbschcomponent.o xbschdoc.o xbschdocsch.o xbschdrawobject.o xbschentry.o xbschfont.o xbschglobal.o xbschjunc.o xbschlabel.o xbschline.o xbschobj.o xbschpattern.o xbschsheetinfo.o xbschtag.o xbschview.o moc_application.o moc_componentview.o moc_editcommentdlg.o moc_editcomponent.o moc_editcomponentimpl.o moc_editlabel.o moc_editlabelimpl.o moc_edittag.o moc_edittagimpl.o moc_printOptionDlg.o moc_selcomp.o moc_selcompimpl.o moc_setlib.o moc_setlibimpl.o moc_setSheetSize.o moc_setlayerdlg.o moc_xbschview.o     -lQt3Support -lQtGui -lQtCore -lpthread

  できたっぽい。心静かに、起動を確認したら。手動でインストール。

/home/mitsu/develop/bsch/qbsv047/qtbsch3v # ./qtbsch3v 
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # cp qtbsch3v /usr/local/bin
/home/mitsu/develop/bsch/qbsv047/qtbsch3v # cd ..
/home/mitsu/develop/bsch/qbsv047 # mkdir /usr/share/qtbsch3v
/home/mitsu/develop/bsch/qbsv047 # cp -r LIBV /usr/share/qtbsch3v
/home/mitsu/develop/bsch/qbsv047 # qtbsch3v

  「Set→Library→Add」で「/usr/share/qtbsch3v/LIBV」にコピーした、部品ライブラリを登録し、ちょっとウカレてみる。

  画像の説明

  次に、既存の図面をできるだけ生かしたいので、古い.CE2形式から.ce3形式へ変換するファイルコンバータ「ce2to3」をコンパイル。

/home/mitsu/develop/bsch # tar xvfz c2t3c003.tgz
/home/mitsu/develop/bsch # cd c2t3c003
/home/mitsu/develop/bsch/c2t3c003 # cat ce2to3.txt | toutf8

  今度は、Makefileがないようだ。こんなやり方でええんかいな?

/home/mitsu/develop/bsch/c2t3c003 # cd ce2to3
/home/mitsu/develop/bsch/c2t3c003/ce2to3 # g++ *.cpp

  詳しくは略すが、また、atoi、INT_MAXとINT_MINで怒られまくった。

/home/mitsu/develop/bsch/c2t3c003/ce2to3 # emacs ce3io.h 
+ #include <stdlib.h>
+ #define INT_MAX (2^31) - 1
+ #define INT_MIN -(2^31)
/home/mitsu/develop/bsch/c2t3c003/ce2to3 # g++ *.cpp
In file included from xbschcomponent.h:10,
                 from ce2to3.cpp:16:
complib.h:173: error: extra qualification ‘SCompIndex::’ on member ‘pin’
ce2to3.cpp: In function ‘SXBSchSheetInfo* readCE2SheetInfo(FILE*)’:
ce2to3.cpp:65: 警告: deprecated conversion from string constant to ‘char*’
In file included from complib.cpp:14:
complib.h:173: error: extra qualification ‘SCompIndex::’ on member ‘pin’
In file included from xbschcomponent.h:10,
                 from xbschcomponent.cpp:13:
complib.h:173: error: extra qualification ‘SCompIndex::’ on member ‘pin’
In file included from xbschcomponent.h:10,
                 from xbschdoc.cpp:20:
complib.h:173: error: extra qualification ‘SCompIndex::’ on member ‘pin’
In file included from xbschglobal.cpp:16:
complib.h:173: error: extra qualification ‘SCompIndex::’ on member ‘pin’
xbschline.cpp:10 から include されたファイル中:
ce3io.h:12:1: 警告: "INT_MAX" が再定義されました
xbschline.cpp:7 から include されたファイル中:
/usr/lib/gcc/i386-redhat-linux/4.3.0/include/limits.h:74:1: 警告: ここが以前の宣言がある位置です
xbschline.cpp:10 から include されたファイル中:
ce3io.h:13:1: 警告: "INT_MIN" が再定義されました
xbschline.cpp:7 から include されたファイル中:
/usr/lib/gcc/i386-redhat-linux/4.3.0/include/limits.h:72:1: 警告: ここが以前の宣言がある位置です

  今度は「extra qualification」なんていわれる。どうも、修飾がクドい人はイヤンということらしい。

/home/mitsu/develop/bsch/c2t3c003/ce2to3 # emacs complib.h
-   SPin* SCompIndex::pin(int index,int dir,int& nLtrb,SPoint& ptEnd) const;
+   SPin* pin(int index,int dir,int& nLtrb,SPoint& ptEnd) const;
/home/mitsu/develop/bsch/c2t3c003/ce2to3 # g++ *.cpp

  でけた。手動インストールかますて、変換さ試すてみる。

/home/mitsu/develop/bsch/c2t3c003/ce2to3 # cp a.out /usr/local/bin/ce2to3
/home/mitsu/develop/picNewDisp $ ce2to3 picNDisp.CE2
/home/mitsu/develop/picNewDisp $ qtbsch3v picNDisp.ce3

  画像の説明

  部品がトンでしまっているので、ワケがわからんが、これは約2年前のLCDパネルの実体配線図だ。近々、XPortを使って、コレのLANポート版を作りたいと思っているのだが。

  とりあえず、Bschは使えそうなトコロまで持ってこれたので、次はPICのクロス開発環境を整える。そういえば、最近Fedoraに、PICほか、組み込みマイコン用の開発環境が含まれたと聞いたが……。

/home/mitsu/develop/bsch # yum search gpasm
/home/mitsu/develop/bsch # yum install ktechlab

  あった。やたらデカい。統合環境のようだ。CUIで使いたいだけなら「gputils」を入れるだけでよかったみたい。

  以前のコードをアセンブルしてみる。

/home/mitsu/develop/picNewDisp $ ../pic80ppc/pic80ppc picNDisp.s
/home/mitsu/develop/picNewDisp $ gpasm -l
/home/mitsu/develop/picNewDisp $ gpasm -p p16f648a picNDisp.asm 

  インクルードファイルの設定をちょっと修正したら、アセンブルはできるようになったものの、シンボル関係やらなにやらで、イヤというほどエラーが出た。

  試しにチョーシンプルなコードをアセンブルさせてみる。

/home/mitsu/develop/picNewDisp $ emacs test.asm 
        include "p16f648a.inc"
 
        org     00h
        goto    start
 
        org     04h
        goto    start
start
        goto    start
END
/home/mitsu/develop/picNewDisp $ gpasm -p p16f648a test.asm 
/home/mitsu/develop/picNewDisp $ cat test.hex 
:020000040000FA
:020000000528D1
:04000800052805289A
:00000001FF

  なんだか、それっぽい出力は得られた。こっち方面もオッケーっぽいな……っと思ったところで、どーも、最近の開発トレンドはPICですらCらしい。オイラは、Z80っぽいニーモックを、PICのソレに変換するようなプリプロセッサを書いたくらいの(Z80)アセンブラ好きだが、そんなにラクができるんならば、Cもカジらせてもらおうかしらん。

/home/mitsu/develop/bsch # yum search sdcc
/home/mitsu/develop/bsch # yum install sdcc
/home/mitsu/develop/sdcc # cat test.c
#include <pic16f84a.h>
 
int main() {
    while (1) {
    }
}
/home/mitsu/develop/sdcc # sdcc test.c
-bash: sdcc: command not found

  ムムッ。sdccはやたら当たるから、頭に「sdcc-」を付けたって? んじゃ、それで、困憊る。じゃなかった、コンパイる。

/home/mitsu/develop/sdcc # rpm -ql sdcc
/home/mitsu/develop/sdcc # cat /usr/share/doc/sdcc-2.8.0/README.fedora
Many of the executables in SDCC have very generic names. Therefore the binaries
are installed into $PREFIX/libexec/sdcc/, and symlinks with prefix sdcc- are
created in $PREFIX/bin. If this is a problem for you, you can add
$PREFIX/libexec/sdcc/ to you path.
/home/mitsu/develop/sdcc # sdcc-sdcc -mpic14 -p16f648a test.c
libsdcc.lib: No such file or directory
/home/mitsu/develop/sdcc # sdcc-sdcc -V -mpic14 -p16f648a test.c
+ "/usr/libexec/sdcc/sdcpp" -nostdinc -Wall -std=c99 -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=260 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f648a" -I"/usr/libexec/sdcc/../share/sdcc/include/pic14" -I"/usr/share/sdcc/include/pic14" -I"/usr/libexec/sdcc/../share/sdcc/include" -I"/usr/share/sdcc/include" -I"/usr/libexec/sdcc/../share/sdcc/include/pic" -I"/usr/share/sdcc/include/pic"  "test.c" 
+ "gpasm" -c "test.asm"
+ "gplink" -I"/usr/libexec/sdcc/../share/sdcc/lib" -I"/usr/share/sdcc/lib"  -I"/usr/libexec/sdcc/../share/sdcc/lib/pic" -I"/usr/share/sdcc/lib/pic"   -o test test.o   libsdcc.lib pic16f648a.lib 
libsdcc.lib: No such file or directory

  でも、なんかダメっすぜ。つーか、コレにはハマった。原因はコレ。なッ、なんだこのマヌケなやりとりはッ!!

/home/mitsu/develop/sdcc # ls /usr/share/sdcc/lib/pic
-rw-r--r-- 1 root root 8 2008-11-15 06:30 pic.lib
/home/mitsu/develop/sdcc # ls /usr/share/sdcc/lib/pic16
-rw-r--r-- 1 root root 10 2008-11-15 06:30 pic16.lib

  確かに空っぽである。少なくともFedora8からFedora10まで1年間、空っぽで放置らしい。

  どーせ、パッケージングミスだろう、と当たりを付け、ソースを取り寄せる。

/home/mitsu/develop/sdcc # wget http://mirrors.nl.eu.kernel.org/fedora/updates/9/SRPMS.newkey/sdcc-2.8.0-3.fc9.src.rpm
/home/mitsu/develop/sdcc # rpm -ivh sdcc-2.8.0-3.fc9.src.rpm
/home/mitsu/develop/sdcc # cd /usr/src/redhat/SPECS
/usr/src/redhat/SPECS # rpmbuild -bp sdcc.spec
/usr/src/redhat/SPECS # yum install lyx latex2html gc-devel
/usr/src/redhat/SPECS # rpmbuild -bp sdcc.spec
/usr/src/redhat/SPECS # rpmbuild -ba sdcc.spec

  なんか、パッケージングの途中でコケたが、ライブラリはできてた。叱る(?)べき場所にコピる。

/usr/src/redhat/BUILD # cp /usr/src/redhat/BUILD/sdcc/device/lib/pic/bin/* /usr/share/sdcc/lib/pic/
/usr/src/redhat/BUILD # cp /usr/src/redhat/BUILD/sdcc/device/lib/pic16/bin/* /usr/share/sdcc/lib/pic16

  再度、コンパイル。

/home/mitsu/develop/sdcc # sdcc-sdcc -V -mpic14 -p16f648a test.c
+ "/usr/libexec/sdcc/sdcpp" -nostdinc -Wall -std=c99 -obj-ext=.o -DSDCC_MODEL_SMALL -DSDCC=280 -DSDCC_REVISION=5117 -DSDCC_pic14 -D__pic14 -DSDCC_PROCESSOR="16f648a" -I"/usr/libexec/sdcc/../share/sdcc/include/pic14" -I"/usr/share/sdcc/include/pic14" -I"/usr/libexec/sdcc/../share/sdcc/include" -I"/usr/share/sdcc/include" -I"/usr/libexec/sdcc/../share/sdcc/include/pic" -I"/usr/share/sdcc/include/pic"  "test.c" 
+ "gpasm" -c "test.asm"
+ "gplink" -I"/usr/libexec/sdcc/../share/sdcc/lib" -I"/usr/share/sdcc/lib"  -I"/usr/libexec/sdcc/../share/sdcc/lib/pic" -I"/usr/share/sdcc/lib/pic"   -w -r -o test test.o   libsdcc.lib pic16f648a.lib 
message: using default linker script "/usr/share/gputils/lkr/16f648a.lkr"

  できたっぽい。うひょひょー。

  まったく花は咲かせてないが、快調にツボミが付くので、ノリノリでもう一歩。今度はROMライタ。使えるものなら、秋月のヤツを使いたい。

/home/mitsu/develop/akipic # wget http://members.jcom.home.ne.jp/pnms/src/akipic-0.1.8.tar.gz
/home/mitsu/develop/akipic # tar xvfz akipic-0.1.8.tar.gz 
/home/mitsu/develop/akipic # cd akipic-0.1.8
/home/mitsu/develop/akipic/akipic-0.1.8 # make

  こっちは、至極アッサリとコンパイルできた。どーも、かなり古いリビジョンのライタに対応したっきり、放置されているらしいが、ソースがあればどうにでもなるだろ。

  今日はここまでッ!!


2017-02-04(Sat) VNCで衛星をロックオンしつつ、卓上カレンダを印刷

  先週末、コンクリートブロックに塩ビパイプを立ててセメントを流し込んでいたのは、実は衛星放送受信用のアンテナ設置用の土台だったりするのであった。

  で、例によって、パラボラアンテナの向きの調整には、ウェブカメラとVNCを活用するのがベストなのである。今回、VNCサーバはカミさんが使わなくなったThinkPadT400。また「Che-ez! webbie」という骨董のウェブカメラを引っ張り出してきて(数年ぶりなので探しだすのに苦労した)USBコネクタに挿す。アプリはvlcでアッサリ映った。VNCクライアントはオイラが使わなくなったPORTABOOKである。PORTABOOKはWindows10に戻してしまったので、厳密にはVNCでなく、リモートデスクトップ接続。T400にはxrdpをインストールした。

  が、うまくいかない。T400には接続できるが、リモート画面の中で「error - problem connecting」といって沈黙してしまう。なんじゃこれ。ググるとやたらと事例が見つかるが、原因はどれもバラバラ。何か問題があると、どれもこのメッセージが出るらしい。

  目的はアンテナの向きの調整であり、本質じゃない部分に引っかかっているのでイライラしてくる……が、最近は歳をとったのか、ちょっと心に余裕があるので、卓上カレンダをレンダリングする作業を挟んで気分を変える。

  で、再開。大したログが出ていないが、netstatを見ると、xrdp-sesmanとのxrdpサーバの内部VNC通信がTIME_WAIT状態になっているのに気づいた。もしかして……と、思ったら、やっぱりこれだった。「.Xclients」を書いたら、デスクトップが映るようになった。よっしゃ。

  画像の説明 画像の説明

  手元の画面を見ながら(画面はハメコミ合成です)、アンテナの向きをチョイチョイと調整し、アンテナレベル55(推奨36以上)を達成。今後はズレて録画に失敗したりすることはないだろう。なにせ、これまでブロックに挿した木の棒にアンテナをくっつけていたのだからな。これにて、衛星放送受信環境改善作戦を終了する。

  さて、引き続き、先ほどレンダリングした卓上カレンダを印刷する。以前より少しスクリプトを改善し、前後の月や、ワンポイントのイラストが入るようになっている。生成されたPDF(4月〜8月〜)とライブラリごとスクリプトを置いておく。

  ちなみに、144dpiのつもりでpdf化しているのだが、B3サイズで生成されてしまうようなので、そのまま印刷すると縦横2倍のサイズになってしまう。GIMPに読ませるときに、144dpiとして読ませ、288dpiとしてA4の用紙に印刷すると、いい感じの大きさに印刷される。

  画像の説明

  うーむ、最近は歳をとったのか、ちょっと心に余裕はあるが、すぐに疲労してしまう感じだなぁ。もっと頭を使って、できるだけ効率よく作業をしたほうがいいのか。もしくは、その逆のほうがいいのか……。