TIとナショセミ
TIがナショセミを買収したらしいことを、TIのメールマガジンで知った。
「極めて良好な相互補完関係」なのだそうだ。
がんばれ R = H + M + N
« 2011年8月 | トップページ | 2011年10月 »
TIがナショセミを買収したらしいことを、TIのメールマガジンで知った。
「極めて良好な相互補完関係」なのだそうだ。
がんばれ R = H + M + N
JTAGに関するプレゼンの機会があってその中でOpenOCDのデモをやったら、見事にしくじった。(;_; 午前中に、ちゃんと動くことを確認していたのですよっ。(言い訳だな)
左:InterfaceのおまけARM(ADuC7026)ボード
右:Jtagkeyそっくりさん
左下のLEDが点灯している。 本番ではこのLEDが点灯していなかったんだよな(?_?
ここから
本当はこの後、メモリをシリアルに出力するプログラムをRAMにロードして動作させるのだが...(来年も依頼があったらやろう)
昔 1985,6年あたりだったか共立電子がMCS48のSBCキットを売っていた。
あるアイディアがあって、その装置の制御用に買ったと思う。

当時,Z80のSBCは結構高かったけどこのキットは


が入って確か2000円くらいだった。
当時アセンブラを持っていなくて、トラ技スペシャルにM80のマクロで8048のアセンブラを作る記事があったので、これを使おうと思っていた。
また,ROMエミュレータも持っていなかったので、このキットでプログラムを作ろとするとEPROMを消して書いてしなけばならなかった。
さらに、MCS48のアセンブラは全く書いたことがなかった!(^^;
マニュアルとトラ技の紹介記事だけでプログラムを作ろとしていたわけで今考えると、結構無謀だったと思う。
結局別の方法で制御したので、このキットは使わずお蔵入りになっていて、死蔵品箱で見つける度にいつか動かそうと思っている。
最近uPD8749を入手したのでやっぱり使わないかもしれない。
8Queen問題のプログラムを書いてみた.
8Queen問題といえば,再帰プログラムということで再帰で書いたのだが8051/31は内臓RAMが少ないので関数のネストが深くなる再帰プログラムには厳しい.
DATAとSTACKをXRAMに移したのだがスタックが足りない.ようだ
--- 8queen.mem --
Internal RAM layout:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0x00:|0|0|0|0|0|0|0|0|a|b|c|c|c|c|c|c|
0x10:|c|c|d|e|e| | | | | | | | | | | |
0x20:|B|T|I|I|I|I|I|I|I|I|I|I|I|I|S|S|
0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x80:| | | | | | | | | | | | | | | | |
0x90:| | | | | | | | | | | | | | | | |
0xa0:| | | | | | | | | | | | | | | | |
0xb0:| | | | | | | | | | | | | | | | |
0xc0:| | | | | | | | | | | | | | | | |
0xd0:| | | | | | | | | | | | | | | | |
0xe0:| | | | | | | | | | | | | | | | |
0xf0:| | | | | | | | | | | | | | | | |
0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
よく見てみると,使った覚えはないiDataやBitsが使われている.(20h-2Dh)
調べたところ,ライブラリで使われているようで,printf_small()をprintf()に変えると95byte使えるようになった.
できたバイナリはかなり大きいが,CODEにSTACKは代えられない.
-- 8queen.c ---
Internal RAM layout:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0x00:|0|0|0|0|0|0|0|0|a|b|b|c|d|e|e| |
0x10:| | | | | | | | | | | | | | | | |
0x20:|T|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x30:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x40:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x50:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x60:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x70:|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|S|
0x80:| | | | | | | | | | | | | | | | |
0x90:| | | | | | | | | | | | | | | | |
0xa0:| | | | | | | | | | | | | | | | |
0xb0:| | | | | | | | | | | | | | | | |
0xc0:| | | | | | | | | | | | | | | | |
0xd0:| | | | | | | | | | | | | | | | |
0xe0:| | | | | | | | | | | | | | | | |
0xf0:| | | | | | | | | | | | | | | | |
0-3:Reg Banks, T:Bit regs, a-z:Data, B:Bits, Q:Overlay, I:iData, S:Stack, A:Absolute
ようやく通った
再帰呼び出しする関数は次のとおりである. が...
char place(char x, char y) __reentrant { |
ほんとうはこうしたいのだが, 再帰レベルが増えるのでスタックが足りなくなる.
char place(char x, char y) __reentrant { |
ずいぶん前に書いた「CPUの創りかた」 をUPしていて考えた.
書籍から得られるのは理論であり技能は実際に作業を体験することで習得しなければならず,「理論」と「技能」を習得することで「技術」となる.
ということで「創ってみたら」と勧めたわけだが,勧めるからには自分も創ってみなければならないだろう.
ということで実際に作ってみた.
と書いている.
「知っていること」と「できること」にはかなり隔たりがある.さらに「知っていること」は「知っているつもり」だったりする.
本を読んだり,調べたりした事柄は知識「知っている」になるのだが,これを自分が「できること」と勘違いしてしまう.
「できるようになる」ことを100%とすると,知識を得ると95%くらい達成したように思ってしまう(今まで「知らなかった」ことを「知る」のだから当然なのだが). ところが実際は「できるようになる」まで、さらに、労力が95%くらい必要である.
最近は,デジタル回路はHDLで記述してシミュレーションするし,アナログ回路はspiceでシミュレーションして試行錯誤を減らしている.
問題は,シミュレーションが終わったところで実物を作ったような気分になることである.
やはり手を動かして,実物を作ってナンボだと思う.
子供たちを見ていて感じるのは,
×すぐに正解を求める.
×失敗すること・間違うことを嫌う
ことである.
経験からいえば,知ることより
○間違えたり
○失敗したり
することの方が実力が付く.
ところが,今の日本では,頻繁に間違えたり失敗したりする子供は,"落ちこぼれ"と評価されるので正解を知識として記憶せざるをえない.
だからといって,子供たちを責めるのは酷というものだ,大人が作った社会に適応しているだけだから.
問題は,社会に出たからといってこの習慣が容易に矯正できないことである.
最近は,成果主義とやらでセチガライ世の中なので,誰かが成功した方法をパクる教えてもらうと効率が良いというのも一つの理由である.
ところがこの方法ではトップになれない.トップになるには誰も成功していない問題を解決しなければならないのだが,誰も成功していないのでパクる教えてもらうことができない.
ということで
他人の失敗や間違いに寛容になろうと思う. 自分の失敗・間違いには十分に寛容なので. (^^;
SDCCでテストプログラムを書いてみる.
まずは Hello World
/*
#include "io.h"
void main(void) { |
io.c
#include <stdio.h>
char getchar(void) {
void putchar(char c) {
void exit(char c) __naked { |
pm2_cin(),pm2_cout()はPaulmon2への入出力サブルーチンへのインタフェースが記述されたpaulmon2.cで定義されている.
paulmon2.c, paulmon2.h は親切な人が公開しているのでぐぐると見つかる
コンパイル
|
#sdcc -mmcs51 --model-small --code-loc 0x8000 hello.c io.rel paulmon2.rel |
実行結果
九九の表
printf_fast() は %3d のように出力幅を指定できるが %02x のように0で埋めることができない. printf_small() はその逆らしい.「帯に短したすきに長し」
EZ-USBで遊んでいたころにsdccを使っていた.
EZ-USBはCODE領域が2kしかないので,printf_tiny()しか使えずソースコードに手を入れて %02x がちゃんと出力されるようにして使っていた.
8031SBCはcode領域が32kとれるのでとっても楽である.
プログラムはCで書いて,RAMにロードしで動かすことにしよう.
昔は,高級言語といえはBASICくらいしかなかったので,夢のようだ.
EZ-USBで遊んだ時にもSDCCを使っていたのだが,EZ-USBはUSB経由で
プログラムをダウンロードできる仕掛けがあるので問題にはならなかったが
8031SBCでは,プログラムをRAMにロードするためにモニタをROMに焼いて
おかなければならない.
モニタに必要な機能は
とりあえずこれくらいあれば使えるだろう.
8051のアセンブラは書いたことがないけど,Cで書けるので,そう難しくない.
問題はどうやってモニタをデバッグするかである.
EPROMは焼けるけどROMイレーサがないのでEPROMを使った試行錯誤は
とっても大変である.
ここは,巨人の肩に乗ることにしよう.
ということで,8031のモニタをネットで探してみるといくつか見つかった.
Paulmon2 が良さそうである.
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
最近のコメント