1ss178の考察
定本トランジスタ回路の設計をすすめる。
1ss176(ショットキーバリアダイオード)の代替品を探した。
google先生に頼んだら秋月の1ss178が見つかった。
176~178は同じ?っぽい。違うのは最大定格。使用の際は、圧倒的に最大定格を下回っているので、大丈夫。
If-Vf図を見ると、100mAでVfが0.9V。本に書いてあるのは0.01mAなので、10^-2A@25℃であるので、Vfは0.4V?。まぁダイオードを入れないよりかはマシかなとは思う。これは実験してみたい項目だなぁと思った。
逆電流も考える必要は特にない。今回の回路は。
今回のダイオードは、電圧を無理やり下げるために用いている。
ちょっとしたメモでした。
poj3280 cheapest palindrome
区間DPらしい。 蟻本の練習問題。 基本的なDPって書いてあったのに、できなかったけど()
普通に文字列周りの問題が壊滅的にできないと思った。全然できんし。
これがわかってたらという事柄をあげる
- 全探索の方向
- 最小条件のクリア
解答はこの方のを見れば、かなりわかりやすいと思う。
全探索の方向
"abcdef"という文字列があった時、この問題の場合は、c, bc, cd, bcd, abcd, bcde, abcdeっていうのを先頭からやっていく感じだった。わかんなかったな〜
最小条件のクリア
これは、リンク先の解説に書いてあるんだけど、"abcba"というのがあって、cをみたとき、bcを回文にするには、cの左を消すか、bを右に新たに付け足すという動作をすることになって、結局それのどちらがコストが小さいのかというと付け足すコストと消すコストの小さい方になる、このことは、具体的にメモしないとわかんなかったな。もちろんすでに左右対称ならコストは0になる。
区間DPできるようになりテェな
djangoの時間まわり
以前に、djangoのコードからローカライズされた時間を取得する方法をやったけど、それを含めて整理する。
まず、プロジェクトを立ち上げた時、時間まわりの設定は、
TIME_ZONE = 'UTC' USE_TZ = True
になっている。
djangoのコード内で、日付時間を取得する場合は、以下の二つ?
- datetimeモジュール
- django.utils.timezoneモジュール
この状態で、とりあえず今日の日付と時間を取るならば、
>>> from django.utils import timezone >>> timezone.now() datetime.datetime(2019, 3, 13, 19, 45, 1, 21127, tzinfo=<UTC>) >>> from datetime import datetime >>> datetime.now() datetime.datetime(2019, 3, 13, 19, 45, 15, 660571)
になる。この場合は、TIME_ZONEとUSE_TZの影響で同じ出力になった。
次に、
TIME_ZONE = 'Asia/Tokyo'
に変えると
>>> from django.utils import timezone >>> print(timezone.now()) 2019-03-13 19:43:00.744599+00:00 >>> from datetime import datetime >>> print(datetime.today()) 2019-03-14 04:43:23.253193
datetimeモジュールだけTIME_ZONEの影響を受ける。
だから、基本的に、時間取得なら設定を変えてdatetimeモジュールを使用する?
じゃあ、timezoneは何に使うんだよっていう話になる。
これは、憶測だけど、憶測だけど、憶測だけど、テンプレートを通して取得した場合にのみ使用するのかもしれない。 上のは、manage.pyのshell。
タイガーブック(3)
ml-lexのレキサーを書いていた。
この方のがとてもわかりやすいと思う。 これの 2 章。
tiger.lexを書く。
%s COMMENT
正確には%stateらしい。
COMMENTという状態をあらかじめ定義しておく。
var type function break of end in nil let do to for while else then if array := | & >= > <= < <> = / * - + { } ( ) [ ] . , ; : abcdefg 12345 "ABCDEFG" /* comment has started */
こんな感じのtiger(作るプログラミング言語の名前)のソースコードらしきものを用意しておく。
tiger.lexを修正して、
% sml Standard ML of New Jersey v110.85 [built: Sat Dec 22 16:51:02 2018] - CM.make "sources.cm"; 略 - Parse.parse "test.tig"; VAR 2 TYPE 6 FUNCTION 11 BREAK 20 OF 26 END 29 IN 33 NIL 36 LET 40 DO 44 TO 47 FOR 50 WHILE 54 ELSE 60 THEN 65 IF 70 ARRAY 73 ASSIGN 80 OR 83 AND 85 GE 87 GT 90 LE 92 LT 95 NEQ 97 EQ 100 DIVIDE 102 TIMES 104 MINUS 106 PLUS 108 LBRACE 110 RBRACE 112 LPAREN 114 RPAREN 116 LBRACK 118 RBRACK 120 DOT 122 COMMA 124 SEMICOLON 126 COLON 128 ID(abcdefg) 130 INT(12345) 138 STRING("ABCDEFG") 144 skipping comment skipping comment c skipping comment o skipping comment m skipping comment m skipping comment e skipping comment n skipping comment t skipping comment skipping comment h skipping comment a skipping comment s skipping comment skipping comment s skipping comment t skipping comment a skipping comment r skipping comment t skipping comment e skipping comment d skipping comment EOF 179 val it = () : unit
これで字句解析ができてそうなことを確認できた。 tokens.smlに関数は、定義されているので、tiger.lexを完成させればいいだけ。
ESP-IDFでLチカした
ESP-IDFのexamplesに入ってるblinkを見て動かした。
FreeRTOSのドキュメントを見る。
gpio_pad_select_gpio( uint8_t gpio);
gpioをGPIOに設定する?0~0x27までらしい。 blink.cだとデフォルトだとIO5番が渡されている。
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); gpio_set_level(BLINK_GPIO, 1);
で方向と電圧レベルを変えている。
電流は出しすぎると、容量が足りなくなるかもしれなかったので、低めで試した。
LED周りの計算
電源はhighのとき3.3V、LEDの標準電流は30mAほどで、電圧降下は1.9Vなので、 抵抗は46.7Ωだけど、近くにあったのが、100Ωだったので、100Ω(誤差+-5%)で行なった。 100Ωにすると、14mA。半分くらいになる。電力も1/4Wも大幅に下回るし大丈夫だと思う。
なんなら270Ωでも十分明るいと感じた。 測定値もだいたいあってたしおっけい。
ESP-IDFでhello worldした
esp-wroom-32はarduino studioでしか使ったことがなかったので、esp-idfでやって見ようかなと思ったので、やった。
基本的に
ここを進めた。
その際に起こったことを記録する。
FLAGSのエラー
まず、環境変数に、FLAGS関連の環境変数が設定されていると、
make flash
で、
/Users/b1u3/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find crt1-sim.o: No such file or directory /Users/b1u3/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find _vectors.o: No such file or directory /Users/b1u3/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find -lsim /Users/b1u3/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find -lhandlers-sim /Users/b1u3/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find -lhal collect2: error: ld returned 1 exit status make[1]: *** [/Users/b1u3/esp/hello_world/build/bootloader/bootloader.elf] Error 1 make: *** [/Users/b1u3/esp/hello_world/build/bootloader/bootloader.bin] Error 2
これは、環境変数にFLAGS関係の変数(LDFLAGS, CPPFLAGS)が設定されていることに起因しているので、消すなり、実行時だけ追加されるようにするのがいい。project.mkに?=が使われてるからだと思う。
monitorのエラー
make monitor
すると、
MONITOR --- idf_monitor on /dev/cu.SLAB_USBtoUART 115200 --- --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- Traceback (most recent call last): File "/Users/b1u3/Develop/esp/esp-idf/tools/idf_monitor.py", line 743, in <module> main() File "/Users/b1u3/Develop/esp/esp-idf/tools/idf_monitor.py", line 668, in main monitor.main_loop() File "/Users/b1u3/Develop/esp/esp-idf/tools/idf_monitor.py", line 337, in main_loop self.handle_serial_input(data) File "/Users/b1u3/Develop/esp/esp-idf/tools/idf_monitor.py", line 391, in handle_serial_input if self._output_enabled and (self._force_line_print or self._line_matcher.match(line)): File "/Users/b1u3/Develop/esp/esp-idf/tools/idf_monitor.py", line 256, in match m = self._re.search(line) TypeError: cannot use a string pattern on a bytes-like object make: *** [monitor] Error 1
というエラーが出る。 v3.1.3だと、idf_monitor.pyにエラーが出る。これはgithubからupstreamの物をそのままコピペして、内容を入れ替えると回避できる。
回避すると動く
タイガーブック(1)
コンパイラを作りたいのであれば、チャプター2からやればいい?って感じ。githubとかに完成品がたくさんゴロゴロ転がっているので、困ったらそれを見ればいいみたいな。
ちょっとずつ指針を書いていって実装していこうかなって思ってる。
チャプター2では、字句解析器の実装。 タイガーブックだと字句解析器ジェネレータとして、ML-Lexを使っている。
一応、字句解析器というのは、トークンに分ける作業のこと。
123+123;
こういう入力があった時に、123は数字で、+は"足す記号"、123は数字、;はセミコロンというように、順次認識してく過程。
この章は、ML-Lexの書き方をちゃんと理解するような章かな。 アルゴリズム実装はない感じがした。 いじるのは、配布されているディレクトリのchap2/tiger.lex。
ここに書いて、CM.make "sources.cm";して、parseして、、、っていうのをやって、字句解析過程を進めていく。わかんないとこは調べながら。
やっぱ完成品を理解していく方が早いな^^
golangのインタープリタ実装だと、フロントエンドも自分で書いてたので、ツールの使い方の勉強だと思えばまぁ楽しいのかな。