tag:blogger.com,1999:blog-66314769646950094692024-02-08T15:01:38.555+09:00va009039の日記Unknownnoreply@blogger.comBlogger223125tag:blogger.com,1999:blog-6631476964695009469.post-59339165732737355632016-05-11T21:00:00.000+09:002016-05-11T21:00:30.095+09:00BBC micro:bitのMicroPythonをnRF51822で使う (オフライン編)*** 注意:メモリ不足によりBLEは使えません ***<br />
<a href="https://microbit-micropython.readthedocs.io/en/latest/ble.html">https://microbit-micropython.readthedocs.io/en/latest/ble.html</a><br />
<br />
nRF51822にmbedインターフェイス(ドラッグアンドドロップ)でフラッシュメモリに書き込めるようにします。<br />
例えばTG-LPC11U25-501を使う場合は次のように接続します。<br />
<table border="1"><tr><td>TG-LPC11U35-501</td><td>nRF51822</td></tr>
<tr><td>p6(P0_8)</td><td>SWDIO</td></tr>
<tr><td>p8(P0_7)</td><td>SWCLK</td></tr>
<tr><td>p10(P0_18)</td><td>TGT_TX(P0.24)</td></tr>
<tr><td>p9(P0_19)</td><td>TGT_RX(P0.25)</td></tr>
<tr><td>p1(GND)</td><td>GND</td></tr>
</table><br />
Code With Mu<br />
<a href="http://codewith.mu/">http://codewith.mu/</a><br />
からMuエディタ(mu.exe)をダウンロードして実行します。<br />
<br />
コーディングしてFlashボタンを押します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRye4dYa3bh_jUz6WTjyE_XHyTc01jqEeV_jrp30Ah03O8b2AOXWtqYImlKywZelbFW5MkCjxwU-EDI6BQXuLKU0XJI5FmgAoHSMcj6IBe5T_rWrHv2JKdVt71S3YKs0BHMPz3HyYRMbR/s1600/mu-02.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoRye4dYa3bh_jUz6WTjyE_XHyTc01jqEeV_jrp30Ah03O8b2AOXWtqYImlKywZelbFW5MkCjxwU-EDI6BQXuLKU0XJI5FmgAoHSMcj6IBe5T_rWrHv2JKdVt71S3YKs0BHMPz3HyYRMbR/s320/mu-02.png" /></a><br />
<br />
micro:bitの場合は自動でMICROBITドライブを探しますが、見つからないのでMBEDドライブを再指定します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix0KcKp5P2-QAGkhGS5XJgpn-JiR6rqQQZDvKT4fQYZ3wClCIhjIAn7xh9i0LZUHUhMG2Aljz9tEJ-IiGelkiVioMVpOgsGTReIDtLtjVNhR0m8wG8HUExeHDANsFGxWHTdu3kIoMjN5et/s1600/mu-03.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEix0KcKp5P2-QAGkhGS5XJgpn-JiR6rqQQZDvKT4fQYZ3wClCIhjIAn7xh9i0LZUHUhMG2Aljz9tEJ-IiGelkiVioMVpOgsGTReIDtLtjVNhR0m8wG8HUExeHDANsFGxWHTdu3kIoMjN5et/s320/mu-03.png" /></a><br />
書込みに成功すると、プログラムが自動で実行されます。<br />
<br />
対話モードにするにはReplボタンを押します。<br />
CTRL-Dでプログラムを再実行するので実行時のエラーがわかります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgylfiub1H1_SP4dTLhWlLlmcCl-Eei0MrOOsB6lcuUY3BBVXWttMtgjbc-KIe8fWz0aFjnryy4qSaAWbOqzlBBo8KvSQ7GulvUrjsbA-bFEDvr5BWttupTHKVP2g-JWGiP-OJZ42nrOfv3/s1600/mu-05.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgylfiub1H1_SP4dTLhWlLlmcCl-Eei0MrOOsB6lcuUY3BBVXWttMtgjbc-KIe8fWz0aFjnryy4qSaAWbOqzlBBo8KvSQ7GulvUrjsbA-bFEDvr5BWttupTHKVP2g-JWGiP-OJZ42nrOfv3/s320/mu-05.png" /></a><br />
<br />
参考<br />
<br />
BBC micro:bit Python Pixel Project<br />
<a href="https://www.youtube.com/watch?v=CTol1mtXm0I">https://www.youtube.com/watch?v=CTol1mtXm0I</a><br />
<br />
mbed HRM1017 互換機を安価に作成する方法<br />
<a href="http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668">http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668</a><br />
<br />
(2016/5/11)<br />
---<br />
<br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-80429839637620464932016-05-09T21:00:00.000+09:002016-05-11T18:32:49.502+09:00BBC micro:bitのMicroPythonをnRF51822で使う(オンライン編)*** 注意:メモリ不足によりBLEは使えません ***<br />
<a href="https://microbit-micropython.readthedocs.io/en/latest/ble.html">https://microbit-micropython.readthedocs.io/en/latest/ble.html</a><br />
<br />
実行したいプログラムをBBC micro:bitのMicroPython new projectで入力します。<br />
Hello,World表示、LEDチカチカなら次のようなプログラムになります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVxJnLGL8LGHpR7itOfCAidw8m3NTIrj_gNf2DokMYScvk6gyhSs7-VuyCIcOh4uNYa9SVClVwlWz-CbomDMiVkhq-UnlMn4WOHNT-nafUBTIjHQrshDlrTIVCxK4CF1q4kP6AJ8EaWqPU/s1600/microbit-micropython.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVxJnLGL8LGHpR7itOfCAidw8m3NTIrj_gNf2DokMYScvk6gyhSs7-VuyCIcOh4uNYa9SVClVwlWz-CbomDMiVkhq-UnlMn4WOHNT-nafUBTIjHQrshDlrTIVCxK4CF1q4kP6AJ8EaWqPU/s320/microbit-micropython.png" /></a><br />
<br />
Downloadボタンを押すとバイナリファイル(拡張子HEX)をダウンロードしますのでnRF51822に書込みます。<br />
mbed HRM1017のようなマイコンならドラッグアンドドロップで簡単に書込みが出来るでしょう。<br />
<br />
USBシリアル変換をP0.24(送信),P0.25(受信)に繋ぎます。ボーレートは115200bpsに設定します。<br />
例えば、トラ技ライタの場合は次のようになります。<br />
<table border="1"><tr><td>TG-LPC11U35-501</td><td>nRF51822</td></tr>
<tr><td>p10(P0_18)</td><td>TGT_TX(P0.24)</td></tr>
<tr><td>p9(P0_19)</td><td>TGT_RX(P0.25) </td></tr>
</table><br />
nRF51822をリセットするとプログラミングが実行されます。<br />
終了するプログラムなら対話モードに移行します。<br />
無限ループに入っていても、CTRL-Cでプログラムを強制停止させて対話モードに移行できます。<br />
CTRL-Dでプログラムを再実行できます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSeJStXR7V4-O7le4AnHUDSoDuDXjg2WKilc-1iad3l1DxF9pDj7-AedlfgbkHCCXoUBnbZxD_fqiOZegamjZufkWaCIPgeNPvnYPgEwpGG0DmAhNCrzCZrnx93azAm2P9xG0kdvqDmYij/s1600/microbit-micropython-term.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSeJStXR7V4-O7le4AnHUDSoDuDXjg2WKilc-1iad3l1DxF9pDj7-AedlfgbkHCCXoUBnbZxD_fqiOZegamjZufkWaCIPgeNPvnYPgEwpGG0DmAhNCrzCZrnx93azAm2P9xG0kdvqDmYij/s320/microbit-micropython-term.png" /></a><br />
micro:bitのようにLEDマトリックスを持っているのであればmicrobit.displayモジュールが使えます。<br />
<br />
ドキュメント<br />
<a href="https://microbit-micropython.readthedocs.org">https://microbit-micropython.readthedocs.org</a><br />
<br />
ドキュメントに載っているpin0,pin1,pin2等はmicro:bitでの端子名P0,P1,P2等であって、nRF51822のピン名称ではないのに注意。<br />
対応は次のようになります。<br />
<table border="1"><tr><td>MicroPython(micro:bit)</td><td>nRF51822</td></tr>
<tr><td>pin0 PAD1</td><td>P0.3</td></tr>
<tr><td>pin1 PAD2</td><td>P0.2</td></tr>
<tr><td>pin2 PAD3</td><td>P0.1</td></tr>
<tr><td>pin3 COL1</td><td>P0.4</td></tr>
<tr><td>pin4 BTN_A</td><td>P0.17</td></tr>
<tr><td>pin5 COL2</td><td>P0.5</td></tr>
<tr><td>pin6 ROW2</td><td>P0.14</td></tr>
<tr><td>pin7 ROW1</td><td>P0.13</td></tr>
<tr><td>pin8 PIN18</td><td>P0.18</td></tr>
<tr><td>pin9 ROW3</td><td>P0.15</td></tr>
<tr><td>pin10 COL3</td><td>P0.6</td></tr>
<tr><td>pin11 BTN_B</td><td>P0.26</td></tr>
<tr><td>pin12 PIN20</td><td>P0.20</td></tr>
<tr><td>pin13 SCK</td><td>P0.23</td></tr>
<tr><td>pin14 MISO</td><td>P0.22</td></tr>
<tr><td>pin15 MOSI</td><td>P0.21</td></tr>
<tr><td>pin16 PIN16</td><td>P0.16</td></tr>
<tr><td>pin19 SCL</td><td>P0.0</td></tr>
<tr><td>pin20 SDA</td><td>P0.30</td></tr>
</table><a href="https://github.com/lancaster-university/microbit-dal/blob/master/inc/core/MicroBitComponent.h">microbit-dal/inc/core/MicroBitComponent.h</a><br />
bbcmicrobit/micropython<br />
<a href="https://github.com/bbcmicrobit/micropython">https://github.com/bbcmicrobit/micropython</a><br />
<br />
(2016/5/9)<br />
---<br />
<br />
<iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?t=mbed-22&o=9&p=8&l=as1&asins=B0166Q2K6I&IS1=1&ref=tf_til&fc1=000000&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&npa=1&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS1=1&npa=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mbed-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=qf_sp_asin_til&asins=B00LIPC7FW" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-71982223481584224142016-05-08T21:00:00.000+09:002016-05-09T17:47:29.152+09:00BBC micro:bitの加速度センサMMA8653をFRDM-KL46Zで作るBBC micro:bitに搭載されている加速度センサMMA8653FCは次のようにnRF51882に接続されています。<br />
<br />
//ACCEL INTERRUPT PINS (MMA8653FC)<br />
ACCEL_INT2 = p27,<br />
ACCEL_INT1 = p28,<br />
//SDA (SERIAL DATA LINE)<br />
I2C_SDA0 = p30,<br />
//SCL (SERIAL CLOCK LINE)<br />
I2C_SCL0 = p0<br />
<a href="https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h">mbed/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h</a><br />
<br />
32.768kHzクリスタル搭載タイプではINT2 P0_27(p27)がクリスタル接続ピンと衝突するが、<br />
ドライバのソースコードを見ると、現在は使われているのはINT1のみでINT2は使われていません。<br />
<br />
ドライバ<br />
<a href="https://github.com/lancaster-university/microbit-dal/blob/master/source/drivers/MicroBitAccelerometer.cpp">microbit-dal/source/drivers/MicroBitAccelerometer.cpp</a><br />
<a href="https://github.com/lancaster-university/microbit-dal/blob/master/inc/drivers/MicroBitAccelerometer.h">microbit-dal/inc/drivers/MicroBitAccelerometer.h</a><br />
<a href="http://lancaster-university.github.io/microbit-docs/ubit/accelerometer/">http://lancaster-university.github.io/microbit-docs/ubit/accelerometer/</a><br />
<br />
MMA8653のブレイクアウトボードは無さそうなので、FRDM-KL46Zに搭載されている加速度センサMMA8451QとI2Cスレーブ機能を使ってMMA8653FCを模擬します。<br />
データシートで比較する限り、MMA8451はMMA8653の上位互換になっているようで、I2Cアドレスを一致させれば同じように動きそうです。<br />
I2Cスレーブでは反応速度が要求されるので、ドライバから送られてくるI2Cデータを前提にして動作させます。<br />
<br />
作成したFRDM-KL46Z用のプログラムは次のようになります。<br />
MMA8653 emulator for BBC micro:bit<br />
<a href="https://developer.mbed.org/users/va009039/code/emuMMA8653/">https://developer.mbed.org/users/va009039/code/emuMMA8653/</a><br />
<br />
ブロックエディタでX,Y,Zの加速度センサを表示するプログラムを作って実行します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrX0RqkWkYCUK0Nm7orKu6WJSNmTM_aR8RQf08iYfjngCf_ixlBDn__ub2t4j5wLQeFgVWftEJOE3ScF3RCQEHCiUv1NFgU7qv8z4I4FORNAGdMvmNOicFKaqwWDj39F-XodDs_su7DqwC/s1600/microbit-accel.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrX0RqkWkYCUK0Nm7orKu6WJSNmTM_aR8RQf08iYfjngCf_ixlBDn__ub2t4j5wLQeFgVWftEJOE3ScF3RCQEHCiUv1NFgU7qv8z4I4FORNAGdMvmNOicFKaqwWDj39F-XodDs_su7DqwC/s320/microbit-accel.png" /></a><br />
<br />
I2Cのデータは次のように流れます。(>>はMMA8643への書込み、<<は読み込みを表します)<br />
最初の6個は設定で、次から加速度データを読み込んでいます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61552fUDEaeLHMANULE05DJcGLPcOVzfzLglDH01UiSxsxWueITauJcaOd6EiULQs9RoTx4OvbEreG31xlfbxZrBjDvwgyXOHIu7JMhRlcJ3AxDI2W9XlRFlUoiKS9gEdVzRFEkcYY7ze/s1600/microbit-accel-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61552fUDEaeLHMANULE05DJcGLPcOVzfzLglDH01UiSxsxWueITauJcaOd6EiULQs9RoTx4OvbEreG31xlfbxZrBjDvwgyXOHIu7JMhRlcJ3AxDI2W9XlRFlUoiKS9gEdVzRFEkcYY7ze/s320/microbit-accel-2.png" /></a><br />
<br />
データシート<br />
<br />
MMA8653FC 3-Axis, 10-bit Digital Accelerometer<br />
<a href="http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8653FC.pdf">http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8653FC.pdf</a><br />
<br />
MMA8451Q: ±2g/±4g/±8g, Low g, 14-bit Digital Accelerometer<br />
<a href="http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8451Q.pdf">http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8451Q.pdf</a><br />
<br />
おそらく、MMA8452でも動きそうだが未確認です。<br />
<br />
<a href="http://www.nxp.com/ja/products/sensors/accelerometers/3-axis-accelerometers/2g-4g-8g-low-g-12-bit-digital-accelerometer:MMA8452Q">MMA8452Q: ±2g/±4g/±8g, Low g, 12-bit Digital Accelerometer</a><br />
<br />
データシート<br />
<a href="http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8452Q.pdf">http://cache.nxp.com/files/sensors/doc/data_sheet/MMA8452Q.pdf</a><br />
<br />
(2016/5/8)<br />
---<br />
<br />
<iframe src="//rcm-fe.amazon-adsystem.com/e/cm?t=mbed-22&o=9&p=8&l=as1&asins=B010B09YOG&IS1=1&ref=qf_sp_asin_til&fc1=000000<1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&npa=1&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-61554059682629514502016-05-07T21:00:00.000+09:002016-05-07T21:00:27.772+09:00BBC micro:bitのLEDマトリックスは光センサーとしても使っている<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ1cPFQ7v0unXiS1ER-CW7xb_swswWWEPevq04u74MuwY9aGpAe6oGlcNAOy3FhWfQmWxOJm-z8vLS5ejtuXGhrTqcJjpT2c1tCIcY-QNgrzm5v9nmJYp7USjWjzySxfZoPgu5aJcw8mS7/s1600/microbit-lightlevel.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ1cPFQ7v0unXiS1ER-CW7xb_swswWWEPevq04u74MuwY9aGpAe6oGlcNAOy3FhWfQmWxOJm-z8vLS5ejtuXGhrTqcJjpT2c1tCIcY-QNgrzm5v9nmJYp7USjWjzySxfZoPgu5aJcw8mS7/s400/microbit-lightlevel.png" /></a><br />
<br />
ブロックエディタのInputメニューのlight levelは、<br />
てっきり、P0端子あたりに光センサを外付けして使うのかと思っていたが、<br />
<br />
<a href="https://twitter.com/microbitruntime/status/697081906026954752">https://twitter.com/microbitruntime/status/697081906026954752</a><br />
<a href="https://twitter.com/microbitruntime/status/697082230028574721">https://twitter.com/microbitruntime/status/697082230028574721</a><br />
<br />
のツイートを見ていたらLEDマトリックスを光センサと使った時の値でした。<br />
青色LEDではlight levelが0で光センサとしては使えなかった。<br />
<br />
LEDマトリックスは起電力の大きい赤色LEDを使うのが望ましいようです。<br />
<br />
参考<br />
<a href="http://www.rika.com/product/prod_detail1.php?catalog_no=B10-2680-01">LEDエネルギー変換実験器 LT(赤)</a><br />
<br />
(2016/5/7)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-67365354476539987852016-04-27T23:30:00.000+09:002016-04-27T23:30:09.231+09:00mbed Repository APIをGo言語から使うRepository APIを使ったプログラムをGo言語で作ってみました。<br />
<br />
実行例 test_repo,test_repo2のリポジトリをコマンドラインから作製しています。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGh4HvGLsw2KFR9GetB9piiV3zQHlwzNo61m9GoCU8GXHGkHtjK4Fi989trHblmkO_aUXV05pni0J0G-NqNgh_j-QDbJVeLxzy-0n0VSyP1RGfO4-1AWpSSaQzSemJo5lpKNP2y7wOc8ot/s1600/rhgini.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGh4HvGLsw2KFR9GetB9piiV3zQHlwzNo61m9GoCU8GXHGkHtjK4Fi989trHblmkO_aUXV05pni0J0G-NqNgh_j-QDbJVeLxzy-0n0VSyP1RGfO4-1AWpSSaQzSemJo5lpKNP2y7wOc8ot/s400/rhgini.png" /></a><br />
<br />
作成時のメモ<br />
<br />
Compile APIと同じくmbedのアカウントでBASIC認証。<br />
<br />
リポジトリの作製に成功した時のレスポンス例。<br />
<script src="https://bitbucket.org/va009039/mbedapi/src/1fcc3f20a7e3681dd88a8e67d49270d6f33deb11/doc/Repository-API-success.json?embed=t"></script><br />
既に存在するリポジトリ名で作製しようとした時のレスポンス例。<br />
<script src="https://bitbucket.org/va009039/mbedapi/src/1fcc3f20a7e3681dd88a8e67d49270d6f33deb11/doc/Repository-API-errors.json?embed=t"></script><br />
プログラムのリポジトリを作製する時は、repotype=prog に設定する。<br />
ライブラリのリポジトリを作製する時は、repotype=lib に設定する。<br />
repotypeを設定しない時はライブラリとして作製されます。<br />
<br />
参考資料<br />
<br />
Repository APIのドキュメント<br />
<a href="
https://developer.mbed.org/teams/mbed-api-users/wiki/Repository-API
">https://developer.mbed.org/teams/mbed-api-users/wiki/Repository-API</a><br />
<br />
作ったプログラム<br />
<br />
rhgini.go Repository APIを使ったコマンド作成例<br />
<a href="https://bitbucket.org/va009039/rarmcc/src/83490fd23f1c61eaf31b31eb0c81336905a19ca2/rhgini.go">https://bitbucket.org/va009039/rarmcc/src/83490fd23f1c61eaf31b31eb0c81336905a19ca2/rhgini.go</a><br />
<br />
Repository API クライアントのライブラリ<br />
<a href="
https://bitbucket.org/va009039/mbedapi
">https://bitbucket.org/va009039/mbedapi</a><br />
<br />
Windows用の実行ファイル(rhgini.exe)は次のサイトからダウンロードして下さい。<br />
<a href="https://developer.mbed.org/users/va009039/notebook/mbed-api-client/">https://developer.mbed.org/users/va009039/notebook/mbed-api-client/</a><br />
<br />
(2016/4/27)<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-32943264152828188342016-04-24T19:30:00.000+09:002016-05-09T18:12:04.543+09:00BBC micro:bit互換のLEDマトリックスを作ってみる<blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"><div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"><div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BEki1hQkiqL/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">@va009039が投稿した動画</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-04-24T05:18:53+00:00">2016 4月 23 10:18午後 PDT</time></p></div></blockquote><script async defer src="https://platform.instagram.com/en_US/embeds.js"></script><br />
<br />
<a href="https://developer.mbed.org/platforms/Microbit/">BBC micro:bit</a>は5行5列のLEDマトリックスを持っているが、内部的には9行3列でダイナミック表示をしているようです。<br />
<br />
回路図を見つけれなかったのでソースコードから調べて配線してみました。<br />
<br />
mbedライブラリでのピン名称<br />
<a href="https://github.com/mbedmicro/mbed/blob/master/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h">mbed/libraries/mbed/targets/hal/TARGET_NORDIC/TARGET_MCU_NRF51822/TARGET_NRF51_MICROBIT/PinNames.h</a><br />
と、<br />
ランライムのLEDマトリックスドライバの変換配列(MICROBITMICROBIT_DISPLAY_TYPE == MICROBIT_SB2)<br />
<a href="
https://github.com/lancaster-university/microbit-dal/blob/master/inc/drivers/MicroBitMatrixMaps.h
">microbit-dal/inc/drivers/MicroBitMatrixMaps.h</a><br />
を参考にしてLEDへ接続するピン番号を割り当てると次のようになります。<br />
<table border="1"><tr><td>LED(X,Y)</td><td>X=0</td><td>X=1</td><td>X=2</td><td>X=3</td><td>X=4</td></tr>
<tr><td>Y=0</td><td>p13,p4</td><td>p14,p7</td><td>p13,p5</td><td>p14,p8</td><td>p13,p6</td></tr>
<tr><td>Y=1</td><td>p15,p7</td><td>p15,p8</td><td>p15,p9</td><td>p15,p10</td><td>p15,p11</td></tr>
<tr><td>Y=2</td><td>p14,p5</td><td>p13,p12</td><td>p14,p6</td><td>p15,p12</td><td>p14,p4</td></tr>
<tr><td>Y=3</td><td>p13,p11</td><td>p13,p10</td><td>p13,p9</td><td>p13,p8</td><td>p13,p7</td></tr>
<tr><td>Y=4</td><td>p15,p6</td><td>p14,p10</td><td>p15,p4</td><td>p14,p9</td><td>p15,p5</td></tr>
</table><br />
ピン番号からLED位置への変換<br />
<table border="1"><tr><td>Pin to LED(X,Y)</td><td>COL1(p4)</td><td>COL2(p5)</td><td>COL3(p6)</td><td>COL4(p7)</td><td>COL5(p8)</td><td>COL6(p9)</td><td>COL7(p10)</td><td>COL8(p11)</td><td>COL9(p12)</td></tr>
<tr><td>ROW1(p13)</td><td>(0,0)</td><td>(2,0)</td><td>(4,0)</td><td>(4,3)</td><td>(3,3)</td><td>(2,3)</td><td>(1,3)</td><td>(0,3)</td><td>(1,2)</td></tr>
<tr><td>ROW2(p14)</td><td>(4,2)</td><td>(0,2)</td><td>(2,2)</td><td>(1,0)</td><td>(3,0)</td><td>(3,4)</td><td>(1,4)</td><td>NC</td><td>NC</td></tr>
<tr><td>ROW3(p15)</td><td>(2,4)</td><td>(4,4)</td><td>(0,4)</td><td>(0,1)</td><td>(1,1)</td><td>(2,1)</td><td>(3,1)</td><td>(4,1)</td><td>(3,2)</td></tr>
</table><br />
適当なnRF51822なマイコンに、このLEDマトリックスを接続して、mbedインターフェイスからドラッグアンドドロップ書き込めるようにしました。<br />
<br />
ブロックエディタを使ってプログラミングしてLEDマトリックスに表示できるようになります。<br />
<blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"><div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"><div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BEkp0r2EikT/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">@va009039が投稿した動画</a> - <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-04-24T06:19:56+00:00">2016 4月 23 11:19午後 PDT</time></p></div></blockquote><script async defer src="https://platform.instagram.com/en_US/embeds.js"></script><br />
<br />
参考<br />
<br />
mbed HRM1017 互換機を安価に作成する方法<br />
<a href="http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668">http://qiita.com/EsseiK/items/debaff7c2f2e4f6ae668</a><br />
<br />
(2016/4/24)<br />
<br />
補足<br />
<br />
Micro:bitは16MHzクリスタル搭載、32.768kHzクリスタル非搭載です。<br />
32.768kHzクリスタル搭載ではP0_26が使われてしまうので、ボタンB(BUTTON_B P0_26)は使えなくなります。<br />
<br />
Block Editor等で使うピン名称とnRF51822でのピン名称とは違います。<br />
<a href="https://github.com/lancaster-university/microbit-dal/blob/master/inc/drivers/MicroBitPin.h">microbit-dal/inc/drivers/MicroBitPin.h</a><br />
で定義されています。まとめると次のようになります。<br />
<table border="1"><tr><td>Block Editor</td><td>P0</td><td>P1</td><td>P2</td><td>P8</td><td>P12</td><td>P16</td><td>A</td><td>B</td></tr>
<tr><td>nRF51822<br />
mbed</td><td>P0_3<br />
PAD1</td><td>P0_2<br />
PAD2</td><td>P0_1<br />
PAD3</td><td>P0_18</td><td>P0_20</td><td>P0_16</td><td>P0_17<br />
BUTTON_A</td><td>P0_26<br />
BUTTON_B<br />
※32.768kHzクリスタル非搭載のみ使用可</td></tr>
</table><br />
(2016/4/26追加)<br />
---<br />
<br />
<iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?lt1=_blank&bc1=000000&IS1=1&npa=1&bg1=FFFFFF&fc1=000000&lc1=0000FF&t=mbed-22&o=9&p=8&l=as1&m=amazon&f=ifr&ref=qf_sp_asin_til&asins=B00LIPC7FW" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><iframe src="https://rcm-fe.amazon-adsystem.com/e/cm?t=mbed-22&o=9&p=8&l=as1&asins=B0166Q2K6I&IS1=1&ref=tf_til&fc1=000000&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&npa=1&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe><br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-69122294833465739262016-04-19T23:30:00.000+09:002016-04-27T09:47:21.275+09:00mbed Compile APIをGo言語から使うCompile APIを使ったプログラムをGo言語で作ってみました。<br />
<br />
LEDチカチカmbed_blinkyをmbed LPC1768用にコンパイルしてバイナリファイルをダウンロードする実行例。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIi4bQZ7KdKu0l4sJ4aeUSiJotVk_tl24AlkRA_Eib3C1qqAdfYydxJ28T8iPjqTLpfAUrzLJ-MkYcEMoMwbDl5o2DEIMkCWBpNlZjnNTIEgc4V1VJYVXfz3XC_TflpOp_F6C5KNYF3eJ/s1600/rarmcc.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDIi4bQZ7KdKu0l4sJ4aeUSiJotVk_tl24AlkRA_Eib3C1qqAdfYydxJ28T8iPjqTLpfAUrzLJ-MkYcEMoMwbDl5o2DEIMkCWBpNlZjnNTIEgc4V1VJYVXfz3XC_TflpOp_F6C5KNYF3eJ/s400/rarmcc.png" /></a><br />
<br />
プログラム作成時のメモ<br />
<br />
mbedオンラインIDEのアカウントのユーザ名とパスワードでBASIC認証をする。<br />
Teams » mbed API users <a href="https://developer.mbed.org/teams/mbed-api-users/">https://developer.mbed.org/teams/mbed-api-users/</a> に加入しなくても使える。<br />
<br />
tasks/compiler/startで指定するプラットフォーム(platform)はmbedオンラインIDEとは関係ない。<br />
mbedオンラインIDEでプラットフォームを追加しなくてもエラーにはならない。<br />
<br />
プログラム(program)で指定したときはプログラムワークスペースのプログラムが対象になる。<br />
対象外のプログラム名を指定するとコンパイル時にInternal errorになる。<br />
<br />
リポジトリ(repo)でURL指定したときはパブリッシュされたプログラムが対象になる。<br />
プライベートリポジトリ(private)も対象になる。<br />
mbedオンラインIDEのアカウントとは関連のないリポジトリも対象なのでインポートしなくてもバイナリを作製出来た。<br />
<br />
tasks/compiler/outputでコンパイルエラーの時のレスポンスはbinaryフィールドに文字列ではなくて、falseが返ってきます。<br />
jsonライブラリ(encoding/json)の構造体への変換(json.Unmarshal)でエラーになってしまう。現状はエラーを無視して対応。<br />
<br />
tasks/compiler/binでバイナリファイルをダウンロードをするのにタスクID(task_id)だけを指定すれば良さそうなものだが、バイナリファイル名(binary)とプログラム名(program)も指定しないとインターナルサーバーエラー(500)になる。<br />
outputのレスポンスのbinary、programと同じでなければならない。<br />
<br />
リポジトリでプログラムを指定した時はrepomode=1を設定しています。<br />
repomode=だけではインターナルサーバーエラーになる。<br />
<br />
参考資料<br />
<br />
Compile APIのドキュメント<br />
<a href="https://developer.mbed.org/handbook/Compile-API">https://developer.mbed.org/handbook/Compile-API</a><br />
<br />
作ったプログラム<br />
<br />
Compile APIを使ったコマンド<br />
<a href="https://bitbucket.org/va009039/rarmcc">https://bitbucket.org/va009039/rarmcc</a><br />
<br />
Compile APIクライアントのライブラリ<br />
<a href="https://bitbucket.org/va009039/mbedapi">https://bitbucket.org/va009039/mbedapi</a><br />
<br />
Windows用の実行ファイル(rarmcc.exe)は次のサイトからダウンロードして下さい。<br />
<a href="https://developer.mbed.org/users/va009039/notebook/mbed-api-client/">https://developer.mbed.org/users/va009039/notebook/mbed-api-client/</a><br />
<br />
(2016/4/19)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-27741693830560697082016-01-05T18:30:00.000+09:002016-02-22T17:31:25.583+09:00LPCXPresso1769/CD(OM13085)をmbedとして使うLPC1769 LPCXpresso/LPCXPresso1769 with CMSIS-DAP(OM13085)に搭載されているデバッガー(LPC11U35)のファームウェアを書き換えてmbed対応にしました。<br />
<br />
LPC1768/LPC1769専用のフラッシュアルゴリズムに変更。<br />
DAP_LEDでファイル書込み・シリアル通信のLEDを代用。<br />
プログラム書込み後に自動リセットするように変更。<br />
<br />
<h4>動作例</h4><iframe width="420" height="315" src="https://www.youtube.com/embed/pK_oGtCDQgU" frameborder="0" allowfullscreen></iframe><br />
<br />
<h4>mbed対応方法</h4><br />
SW1を押しながらUSB接続するとCRP DISABLDのドライブが現れるので、firmware.binを削除して次のファイルをコピーします。<br />
<a href="https://bitbucket.org/va009039/lpc11u35_cmsis-dap/src/b72e6f8bc3dbb34b97264490ddcee8ed38fed1cd/firmware/lpc11u35_lpcxpresso1769_if.bin?at=master">lpc11u35_lpcxpresso1769_if.bin</a>(29,236 バイト) または <a href="https://bitbucket.org/va009039/lpc1347_cmsis-dap/src/6a41345eaadeab9b60bcd50b367ac2681fdd7d39/firmware/lpc11u35_lpc_if.bin?at=master">lpc11u35_lpc_if.bin</a>(29,712 バイト)<br />
<br />
printf()等のUSBシリアル通信を使うには R66 R67 を付けて下さい。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEtYkC9AHLHB-wFuXu09AoHvF6L_fzSFOpOTDsuQOLr182-HmzvfahpAx6VzB9JJ0DngSm-MJJBEK3Dgbott3oPXglA_9axnY6SGDrFfUPpacw-lyrrXbqfrw6gjbnKWbUvby1RxFbtgpb/s1600/lpcxpresso1769_R66_R67.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEtYkC9AHLHB-wFuXu09AoHvF6L_fzSFOpOTDsuQOLr182-HmzvfahpAx6VzB9JJ0DngSm-MJJBEK3Dgbott3oPXglA_9axnY6SGDrFfUPpacw-lyrrXbqfrw6gjbnKWbUvby1RxFbtgpb/s400/lpcxpresso1769_R66_R67.jpg" /></a><br />
<br />
WindowsでCMSIS-DAPを使うにはUSBシリアルドライバ(<a href="http://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe">mbedWinSerial_16466.exe</a>)をインストールして下さい。<br />
<br />
<a href="https://developer.mbed.org/users/va009039/code/lpcxpresso1769_helloworld/">https://developer.mbed.org/users/va009039/code/lpcxpresso1769_helloworld/</a><br />
<br />
<h4>ファームウェアの再構築方法</h4><br />
Keil MDK-Lite 4.74 をダウンロード、インストール。<br />
リポジトリ https://bitbucket.org/va009039/lpc11u35_cmsis-dap をダウンロード(クローン)。<br />
MDKでプロジェクトファイル interface/mdk/lpc11u35/lpc11u35_lpcxpresso1769_interface.uvproj を開く。<br />
ターゲット lpc11u25_lpcxpresso1769_if をビルド。<br />
ファームウェア firmware/lpc11u35_lpcxpresso1769_if.bin が出来上がります。<br />
<br />
(2016/1/11)<br />
(2016/2/5)修正<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-35685381213271613542015-12-10T15:00:00.000+09:002015-12-13T11:02:36.873+09:00"LPCXpresso1769/CD"互換機の試作<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7IsOZcCOEUcnlRr9seonbv_Ct6O7t4Rxv0had2zuEFU2a7U8bSpsg-LdzM0kzYWFukRaH9gmIGt2JbTI8hHo_U6bRyjzH3ZYZkD38sg0SuylNnQXd6xFEj5Z-KY_5IlpUBImNp6Ln70v4/s1600/lpcxpresso1769cd_IMG_1466.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7IsOZcCOEUcnlRr9seonbv_Ct6O7t4Rxv0had2zuEFU2a7U8bSpsg-LdzM0kzYWFukRaH9gmIGt2JbTI8hHo_U6bRyjzH3ZYZkD38sg0SuylNnQXd6xFEj5Z-KY_5IlpUBImNp6Ln70v4/s400/lpcxpresso1769cd_IMG_1466.jpg" /></a><br />
<br />
最新の「LPCXpresso 1769 with CMSIS-DAP」はデバッガーがLPC11U35に変更になりました。<br />
まだ入手できそうもないので、互換機をTG-LPC11U35-501と旧版のLPCXpresso LPC1769 Rev.Bで作ってみました。<br />
<br />
製品のファームウェアの詳細がわからないが、mbedインターフェースのを使えば書込み用のソフトウェアを使わずにドラッグ・アンド・ドロップでプログラムを書き込む事が出来ます。<br />
ローカルストレージが付いていない mbed LPC1768 とほぼ同等になります。<br />
イーサネットのPHYチップがLAN8720で違いますが、mbedライブラリが自動判定して動きます。<br />
<br />
<h3>結線</h3>TG-LPC11U35-501とLPCXpresso LPC1769を次のように繋げます。<br />
<table border="1"><tr><td></td> <td>TG-LPC11U35-501</td> <td>LPCXpresso1769 Rev.B</td></tr>
<tr><td>TARGET_SWDIO</td> <td>CN1-6(PIO0_8)</td> <td>J4-4</td></tr>
<tr><td>TARGET_SWCLK</td> <td>CN1-8 (PIO0_7)</td> <td>J4-6</td></tr>
<tr><td>TARGET_NRESET</td> <td>CN2-11(PIO0_1)</td> <td>J4-12</td></tr>
<tr><td>TARGET_TXD</td> <td>CN1-10(PIO0_19)</td> <td>J6-21(P0_2)</td></tr>
<tr><td>TARGET_RXD</td> <td>CN1-9(PIO0_18)</td> <td>J6-22(P0_3)</td></tr>
<tr><td>TARGET_ISP</td> <td>CN2-15(PIO1_15)</td> <td>J6-51(P2_10)</td></tr>
</table>ISP は使ってないがファームウェアの動作確認のために繋げておきます。<br />
Flash Magic に対応して DTR/RTS で RESET/ISP を制御するのかもしれない。<br />
<br />
<h3>回路図</h3><ul><li><a href="https://developer.mbed.org/platforms/TG-LPC11U35-501/">TG-LPC11U35-501</a><br />
<a href="http://toragi.cqpub.co.jp/Portals/0/support/2014/mbed/TG-LPC11U35-501.pdf">http://toragi.cqpub.co.jp/Portals/0/support/2014/mbed/TG-LPC11U35-501.pdf</a><br />
<li><a href="https://www.embeddedartists.com/products/lpcxpresso/lpc1769_xpr.php">LPC1769 LPCXpresso Board / LPCXpresso LPC1769 Rev.B</a><br />
<a href="https://www.embeddedartists.com/sites/default/files/docs/schematics/LPCXpressoLPC1769revB.pdf">https://www.embeddedartists.com/sites/default/files/docs/schematics/LPCXpressoLPC1769revB.pdf</a><br />
<li><a href="https://www.embeddedartists.com/products/lpcxpresso/lpc1769_cmsis_xpr.php">LPC1769 LPCXpresso / LPCXpresso1769 with CMSIS-DAP</a><br />
<a href="https://www.embeddedartists.com/sites/default/files/docs/schematics/LPCXpresso1769_CD_revD.pdf">https://www.embeddedartists.com/sites/default/files/docs/schematics/LPCXpresso1769_CD_revD.pdf</a><br />
</ul>
<h3>ファームウェア</h3>TG-LPC11U35-501に次のファームウェアをUSB ISPで書込みます。 <ul><li><a href="https://developer.mbed.org/users/va009039/notebook/lpc1114fn28lpc800max/">LPC1114FN28・LPC810対応のLPC800-MAXの作り方</a><br />
mbedインターフェースです。LPC1768/LPC1769にも対応しているファームウェアです。<br />
<a href="https://bitbucket.org/va009039/lpc1347_cmsis-dap/src/6a41345eaadeab9b60bcd50b367ac2681fdd7d39/firmware/lpc11u35_lpc_if.bin?at=master">lpc11u35_lpc_if.bin</a><br />
<li><a href="https://developer.mbed.org/users/va009039/code/TG-LPC11U35-501_Simple-CMSIS-DAP/">TG-LPC11U35-501_Simple-CMSIS-DAP</a><br />
CMSIS-DAPだけのファームウェアです。<br />
</ul><br />
(2015/12/10)<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-15678561555088106112015-12-04T23:30:00.000+09:002015-12-04T23:30:02.310+09:00ASUSノートパソコンK53Uのキーボード交換特定のキーを押しても反応がない時があるのでASUSのノートパソコンK53Uのキーボードを交換してみました。<br />
<br />
<h4>キーボードの取り外し方</h4><br />
ノートパソコン裏側の「K」記号のところのネジを2本外します。<br />
1本は外側、もう1本は内蔵メモリのフタを開けたところの内側にあります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcvi_j8l_-q2ynIsLskS86rXfQdIUKN8EV6A3o5fR-oS_Xyci1Xeke6kmt10jxxHAWRn6X4ObJCRcT7T6d4m2y4WuuuyLvTjbxZn1g5A3BvA37vN4P17ot_jbEbONW2apABfF6qG7EKVK/s1600/ASUS_K53U_IMG_1439.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtcvi_j8l_-q2ynIsLskS86rXfQdIUKN8EV6A3o5fR-oS_Xyci1Xeke6kmt10jxxHAWRn6X4ObJCRcT7T6d4m2y4WuuuyLvTjbxZn1g5A3BvA37vN4P17ot_jbEbONW2apABfF6qG7EKVK/s1600/ASUS_K53U_IMG_1439.jpg" /></a><br />
<br />
esc・f9・endキーの上あたりに本体から伸びているツメを3箇所、マイナスドライバーで引っ込めてキーボートを剥がします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwbemsirQIelXq3dP6mwNACObPZA6rQZZM4xwXl2gE1C5JY06LLMUqTztbUiFjdGkt4whKJBlVypIWkEFvDKKOePGd3n0krbaY9JlkNF5hNRQV2vmRspj9nmNc7nojHNTVaCnbway3sj-K/s1600/ASUS_K53U_IMG_1440.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwbemsirQIelXq3dP6mwNACObPZA6rQZZM4xwXl2gE1C5JY06LLMUqTztbUiFjdGkt4whKJBlVypIWkEFvDKKOePGd3n0krbaY9JlkNF5hNRQV2vmRspj9nmNc7nojHNTVaCnbway3sj-K/s1600/ASUS_K53U_IMG_1440.jpg" /></a><br />
<br />
コネクタの黒い部分を起こしてキーボートから伸びているフィルムケーブルを外します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88nlId9QsujQgbsPaquXvbyjWNc99sJSE8bP9VUBTrsAFRyXdGvVxkSlUVdyfLOW3Z9VoOzONyG6tRQ6Zs1puOMmF_lAOfWpagZun8rAGwyBVBVChQpMTkScAlGkD_gT6s7Gc7mcujpJe/s1600/ASUS_K53U_IMG_1445.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg88nlId9QsujQgbsPaquXvbyjWNc99sJSE8bP9VUBTrsAFRyXdGvVxkSlUVdyfLOW3Z9VoOzONyG6tRQ6Zs1puOMmF_lAOfWpagZun8rAGwyBVBVChQpMTkScAlGkD_gT6s7Gc7mcujpJe/s1600/ASUS_K53U_IMG_1445.jpg" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqGXIECRyO0qW5_DRjCwVwDbEQs51e3rOG7y_whaMVfUAq7g6_CRshYImTvO3kAAtKWbwqzWtON9clrk4CJhdZqTlwNjqVEL8FsLaIXX-S5Awsj-B9sx_MAAI6-Q4fuwYQOFgKg57jimKL/s1600/ASUS_K53U_IMG_1446.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqGXIECRyO0qW5_DRjCwVwDbEQs51e3rOG7y_whaMVfUAq7g6_CRshYImTvO3kAAtKWbwqzWtON9clrk4CJhdZqTlwNjqVEL8FsLaIXX-S5Awsj-B9sx_MAAI6-Q4fuwYQOFgKg57jimKL/s1600/ASUS_K53U_IMG_1446.jpg" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8VbH_LGosVRYzeMDtaNvB7O090L8F8wDMHLxHNhw2JfZPhwyXCJLLMfiy3jPR-VQSv6bs-GQo6dcqgff_wgQ-K0zBLe-0lBAGr91jvRfXD9tkIjt0_uxa1ZfF_fuWd1WVh-U2G_8fteHV/s1600/ASUS_K53U_IMG_1447.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8VbH_LGosVRYzeMDtaNvB7O090L8F8wDMHLxHNhw2JfZPhwyXCJLLMfiy3jPR-VQSv6bs-GQo6dcqgff_wgQ-K0zBLe-0lBAGr91jvRfXD9tkIjt0_uxa1ZfF_fuWd1WVh-U2G_8fteHV/s1600/ASUS_K53U_IMG_1447.jpg" /></a><br />
<br />
これで本体からキーボートを取り外す事が出来たので、新しいキーボートを逆手順で取り付けます。<br />
<br />
参考文献:<br />
<a href="http://enjoyalmightypc.blog.fc2.com/blog-entry-331.html">ASUS製 K53U キーボード交換 - オールマイティパソコンスクール北浦和駅前教室</a><br />
<br />
(2015/12/04)<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-77191464998275808322015-09-13T08:30:00.000+09:002016-02-13T07:55:07.055+09:00Nitrous IDEでmbedプログラミング<h4>注意</h4>Nitrous IDEの無料のworkspaceは2週間使わないと削除されます。<br />
1週間前、24時間前に削除予告のメール通知があります。なお、アカウントは削除されません。<br />
<br />
11月10日以降に無料のworkspaceは作製出来なくなりました。2週間毎にログインしていれば保持できたようです。(2015/12/13追加)<br />
<br />
無料のworkspaceが作製出来るようになりました。一ヶ月に50時間まで使用出来るようです。<br />
Account Setting - Bonus HoursのGet Bonus Hoursで11時間追加出来ます。<br />
<a href="https://community.nitrous.io/posts/the-nitrous-free-tier-is-back">https://community.nitrous.io/posts/the-nitrous-free-tier-is-back</a><br />
(2016/2/13追加)<br />
<br />
<h4>プログラムのエクスポート</h4><br />
mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートして<br />
mbed_blinky_gcc_arm_nucleo_l152re.zip をローカルに保存します。<br />
<br />
<h4>Nitrous環境の構築</h4><br />
GCC ARM Embeddedをインストールします。<br />
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded<br />
sudo apt-get update<br />
sudo apt-get install gcc-arm-none-eabi<br />
<br />
<h4>ファイルのアップロード</h4><br />
ファイルツリーのnitrousフォルダで右クリックメニューUpload Files to nitorusで<br />
mbed_blinky_gcc_arm_nucleo_l152re.zipをアップロードします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzGrAw501e3555smaijI1JYdiJMeRbO4vseepBEydfA1-uRmNIN3JFvMpE5sXfhIDIhv-2xZneOXNFoSNxLreH8mqI4zLkxlLeqnqzDNcH3CG327dqXV9YxhOLleoQRT9YVaDSx2hKqAVM/s1600/nitrous-upload.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzGrAw501e3555smaijI1JYdiJMeRbO4vseepBEydfA1-uRmNIN3JFvMpE5sXfhIDIhv-2xZneOXNFoSNxLreH8mqI4zLkxlLeqnqzDNcH3CG327dqXV9YxhOLleoQRT9YVaDSx2hKqAVM/s400/nitrous-upload.png" /></a><br />
<br />
unzipコマンドでZIPファイルを展開します。<br />
unzip mbed_blinky_gcc_arm_nucleo_l152re.zip<br />
<br />
mbed_blinkyディレクトリに展開されます。<br />
<br />
<h4>ビルド</h4><br />
makeコマンドを実行します。<br />
cd mbed_blinky<br />
make<br />
<br />
mbed_blinky.binが作製されます。<br />
<br />
<h4>ダウンロード</h4><br />
ファイルツリーのmbed_blinky.binの右クリックメニューDownload mbed_blinky.bin<br />
からダウンロードします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodn-ALtlOxmR7zjjTi7yRctvZRWGN_m1U1IxqRnJ-HQbnaapRl8-TecXW_o4ATqmZxK92nNROiwNQu2vjHUsASOfeTPKTt2yB9ikogaqwVKgyAnaf_iw50l_7TbJwFBc18rLZOIqjwPQ2/s1600/nitrous-download.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjodn-ALtlOxmR7zjjTi7yRctvZRWGN_m1U1IxqRnJ-HQbnaapRl8-TecXW_o4ATqmZxK92nNROiwNQu2vjHUsASOfeTPKTt2yB9ikogaqwVKgyAnaf_iw50l_7TbJwFBc18rLZOIqjwPQ2/s400/nitrous-download.png" /></a><br />
<br />
(2015/9/3)<br />
(2015/9/13)追加<br />
(2015/12/02)追加<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-9541119270972770092015-09-05T23:30:00.000+09:002015-09-05T23:30:01.059+09:00LPC4088 QuickStart BoardをISPモードで復旧するLPC4088 QuickStart Boardにmbedインターフェース(SWD)からプログラムが書けなくなったのでISPモードで復旧します。<br />
<br />
SW2(User-SW)を押しながら電源投入(リセット)でISPモードに入る。<br />
ターミナルソフト(TeraTerm)を起動して、<br />
「?」だけを送る。Synchronized が返ってくるのでISPモードに入ったのを確認出来ます。<br />
「Synchronized」を送ると OK が返ってくるので、<br />
「12284」を送る。<br />
「U 23130」を送る。<br />
「P 0 0」を送る。<br />
「E 0 0」を送る。<br />
これでLPC4088のフラッシュのプログラムを削除して復旧出来ます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNpLQtMejvFwdyUm7Gw7tmfdmd7oUeEnWjXnpErNR8D5Id5x1cv93U1YElXUTmcCE_sxdAKsh9mQVKYHQxrLiF8zVTgSd21aSHvgkDj8-V-HVfDUirDmviKJrrBypS3-LqUugA18AT23s/s1600/lpc4088.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNpLQtMejvFwdyUm7Gw7tmfdmd7oUeEnWjXnpErNR8D5Id5x1cv93U1YElXUTmcCE_sxdAKsh9mQVKYHQxrLiF8zVTgSd21aSHvgkDj8-V-HVfDUirDmviKJrrBypS3-LqUugA18AT23s/s400/lpc4088.png" /></a><br />
<br />
TeraTermのマクロで記述すると次のようになります。<br />
setbaud 9600<br />
send '?'<br />
waitln 'Synchronized'<br />
sendln 'Synchronized'<br />
waitln 'OK'<br />
sendln '12284'<br />
waitln 'OK'<br />
sendln 'U 23130'<br />
waitln '0'<br />
sendln 'P 0 0'<br />
waitln '0'<br />
sendln 'E 0 0'<br />
waitln '0'<br />
<br />
(2015/9/5)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-82523632607951692162015-09-04T23:30:00.000+09:002015-09-04T23:30:00.100+09:00EmBitzでC++11を使うEmBitz では メニューProject - Build options - compiler settings - C++ Flags - Languate standardで <br />
GNU++ 98 から GNU++ 11 へチェックボタンを切り替えます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFqRXsRNTP8s2KXWb8gBkXCEDrhCxE8lmp8EKMd2rC4vPhH0ZjnVG7cAmPkWD_rUcyscxfVrcFJV9JOmDuu8b8uJ7WyBK6I4CMztPzZL_po9TQiYeftQL4K9tNpLSAzUVOpKxxTMJxmT_h/s1600/EmBitz-cpp11.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFqRXsRNTP8s2KXWb8gBkXCEDrhCxE8lmp8EKMd2rC4vPhH0ZjnVG7cAmPkWD_rUcyscxfVrcFJV9JOmDuu8b8uJ7WyBK6I4CMztPzZL_po9TQiYeftQL4K9tNpLSAzUVOpKxxTMJxmT_h/s400/EmBitz-cpp11.png" /></a><br />
プログラムからは 定義済みマクロの __cplusplus の値を見てC++のバージョンを区別出来ます。<br />
ARM C++コンパイラ __cplusplus=1<br />
GCCのC++98 __cplusplus=199711<br />
GCCのC++11 __cplusplus=201103<br />
<br />
例えばC++11以前のバージョンを弾くには次のように記述します。<br />
#if __cplusplus < 201103<br />
#error "not C++11."<br />
#endif<br />
<br />
参考:<br />
<a href="http://www.slideshare.net/syundo/c-48237620">組み込み向けC++のやり方を探る - mbedで楽しい組み込みプログラミング</a><br />
<br />
(2015/9/3)<br />
---<br />
<br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-5039303942759499072015-09-02T23:30:00.001+09:002015-09-02T23:30:01.277+09:00Koding IDEでmbedプログラミング<h4>プログラムのエクスポート</h4><br />
mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートして<br />
mbed_blinky_gcc_arm_nucleo_l152re.zip をローカルに保存します。<br />
<br />
<h4>Koding IDE環境の構築</h4><br />
GCC ARM Embeddedとmakeをインストールします。<br />
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded<br />
sudo apt-get update<br />
sudo apt-get install gcc-arm-none-eabi<br />
sudo apt-get install make<br />
<br />
<h4>ファイルのアップロード</h4><br />
IDEのファイルツリーにドラッグ・アンド・ドロップで mbed_blinky_gcc_arm_nucleo_l152re.zip をアップロードします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuLWGDFisR2GWshdwhLQEB-W3bDERvadmfa4a-Cg0MdU7r9JIqVX6NL13TpRuI6kUKEEUNoxaZi9DEg8EbRWWxS2sTMcuJ8kmgcfnZYkozsNcMQ7PQRVSm0ryNhVzUVPdL7mBEsYz769dP/s1600/koding-drop.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuLWGDFisR2GWshdwhLQEB-W3bDERvadmfa4a-Cg0MdU7r9JIqVX6NL13TpRuI6kUKEEUNoxaZi9DEg8EbRWWxS2sTMcuJ8kmgcfnZYkozsNcMQ7PQRVSm0ryNhVzUVPdL7mBEsYz769dP/s400/koding-drop.png" /></a><br />
<br />
右クリックメニューのExtractでZIPを展開します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEz2FQ_jZAFjwZSCv9RrYcMFL8Zw6CLvgdYW5193F0EEtOOPe_13cbn-pUPcQaTGAYAyJm7njBdWsH3luGd-rgVJ15IA8st-mP6VCTUTQH3dq9mxw1PXiKfq_Df4dR5BcdoWqqCe8dQee6/s1600/koding-extract.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEz2FQ_jZAFjwZSCv9RrYcMFL8Zw6CLvgdYW5193F0EEtOOPe_13cbn-pUPcQaTGAYAyJm7njBdWsH3luGd-rgVJ15IA8st-mP6VCTUTQH3dq9mxw1PXiKfq_Df4dR5BcdoWqqCe8dQee6/s400/koding-extract.png" /></a><br />
mbed_blinky_gcc_arm_nucleo_l152re/mbed_blinkyフォルダにファイルが展開されます。<br />
<br />
<h4>ビルド</h4><br />
cd mbed_blinky_gcc_arm_nucleo_l152re/mbed_blinky/<br />
make<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMYe2n5jsujYRBWhRenHqw16Uae7u61seiowdv6fmA7CMcaX602HP5Gw2DTcz_5ch1_s-DsvYyJJrksg3gyDfUktEjytkANswq0asBBV77Q6ph1saknjygoYhrftAiru9Gapy3Dyw46t4/s1600/koding-build.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDMYe2n5jsujYRBWhRenHqw16Uae7u61seiowdv6fmA7CMcaX602HP5Gw2DTcz_5ch1_s-DsvYyJJrksg3gyDfUktEjytkANswq0asBBV77Q6ph1saknjygoYhrftAiru9Gapy3Dyw46t4/s400/koding-build.png" /></a><br />
mbed_blinky.binが作製されます。<br />
<br />
<h4>ダウンロード</h4><br />
mbed_blinky.bin をWebフォルダにコピーします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNFySez-eu9o1ih7ZXZDxzbo4x19xNbfUYwL9aV8g6ypeUjRdO_JKjMf-pRTD_k4YnFIVsuqVJCs2cJ2NZPdcht7t-oWwKuI7JcxjHoAoyhjRmgKop22kOv_E7iASVyuXl3XD_q1E1CkXu/s1600/koding-download1.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNFySez-eu9o1ih7ZXZDxzbo4x19xNbfUYwL9aV8g6ypeUjRdO_JKjMf-pRTD_k4YnFIVsuqVJCs2cJ2NZPdcht7t-oWwKuI7JcxjHoAoyhjRmgKop22kOv_E7iASVyuXl3XD_q1E1CkXu/s400/koding-download1.png" /></a><br />
<br />
ブラウザから http://KODING_USERNAME.koding.io/mbed_blinky.bin に接続して mbed_blinky.bin をダウンロードします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi50gHYQI6B01xFqGRGklVsXf0nccdJO8MAeoGU99fjgkSMXz3a4CnKvauRFUFoEWjfsIGeKyPG9maZcovD0TMWCDVhLdb967maim8zaeLc4EZ2mNEvuoUkqqYBbGRfa90CL1Bm-0Nn8sQG/s1600/koding-download2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi50gHYQI6B01xFqGRGklVsXf0nccdJO8MAeoGU99fjgkSMXz3a4CnKvauRFUFoEWjfsIGeKyPG9maZcovD0TMWCDVhLdb967maim8zaeLc4EZ2mNEvuoUkqqYBbGRfa90CL1Bm-0Nn8sQG/s400/koding-download2.png" /></a><br />
<br />
詳しくは:<br />
How do I transfer/copy files to and from my VM?<br />
<a href="http://learn.koding.com/faq/transfer-files/">http://learn.koding.com/faq/transfer-files/</a><br />
<br />
mbed_blinky.bin を mbed のドライブにコピーしてプログラミングを実行します。<br />
<br />
(2015/9/2)<br />
---<br />
<br />
<br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-6148512821208905842015-09-01T23:30:00.000+09:002015-09-01T23:30:02.019+09:00Cloud9 IDEでmbedプログラミング<h4>プログラムのエクスポート</h4><br />
mbedオンラインコンパイラ(mbed.org)でプログラムをGCC(ARM Embedded)でエクスポートする。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwPP_GDAVvXzBA5C_zMC-QHhhdcIv3SOgjkqh_r_KemC6Jw231a1IrGNDuy8PVMDycbMbhl4mE5j18BbKL8F3wJ4ANeettLHmLYGP-wB4VyilxQzzx0Crzj2eBzKB6e0k1jz0qGlASce0U/s1600/cloud9-mbed-export.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwPP_GDAVvXzBA5C_zMC-QHhhdcIv3SOgjkqh_r_KemC6Jw231a1IrGNDuy8PVMDycbMbhl4mE5j18BbKL8F3wJ4ANeettLHmLYGP-wB4VyilxQzzx0Crzj2eBzKB6e0k1jz0qGlASce0U/s400/cloud9-mbed-export.png" /></a><br />
mbed_blinky_gcc_arm_nucleo_l152re.zip が保存されます。<br />
<br />
<h4>Cloud9環境の構築</h4><br />
Cloud9でworkspaceを作製する。workspaceの種類はどれでもよい。demo-projectでもよい。<br />
<br />
次のコマンドを実行して GCC ARM Embedded をインストールする。<br />
sudo add-apt-repository -y ppa:terry.guo/gcc-arm-embedded<br />
sudo apt-get update<br />
sudo apt-get install gcc-arm-none-eabi<br />
<br />
<h4>プログラムのインポート</h4><br />
メニューFile - Upload Local Files でmbed_blinky_gcc_arm_nucleo_l152re.zipをアップロードする。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPepzO0yxcm1Nmbi7sNOdX0uNdKjid3zBVhwwBfaMv_Ado5RvDLuUSoFl7GbLmuOWM8JIu-yPhVbB46rFTkhxs1VnfLIhAE2kTxdj8rr75BSswTxDkXfkx6CJNdjVW3Fg387jDdX_CdjMd/s1600/cloud9-file_upload_local_files.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPepzO0yxcm1Nmbi7sNOdX0uNdKjid3zBVhwwBfaMv_Ado5RvDLuUSoFl7GbLmuOWM8JIu-yPhVbB46rFTkhxs1VnfLIhAE2kTxdj8rr75BSswTxDkXfkx6CJNdjVW3Fg387jDdX_CdjMd/s400/cloud9-file_upload_local_files.png" /></a><br />
<br />
unzipコマンドでZIPファイルを展開します。<br />
unzip mbed_blinky_gcc_arm_nucleo_l152re.zip<br />
<br />
mbed_blinkyディレクトリに展開されます。<br />
<br />
<h4>ビルド</h4><br />
makeコマンドを実行します。<br />
cd mbed_blinky<br />
make<br />
<br />
mbed_blinky.binが作製されます。<br />
<br />
<h4>ダウンロード</h4><br />
mbed_blinky.binファイルの右クリックメニューのDownloadでローカルにダウンロードします。<br />
mbed_blinky.binが現れない時はmbed_blinkyディレクトリでRefreshします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJWPsYlLVFiNmoyfDadz1CkRgH93frVXeZfdM8Ai0K2OlIA_jAOz5axci4ruAue0ASEn-XsA4GQbWBawEuaNLMyJ4_rvgrA1Jr7Q98fwAu9eBAK8KxufzW4lkLlCY7mENyOyD1EXm2a_Ov/s1600/cloud9-file_download.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJWPsYlLVFiNmoyfDadz1CkRgH93frVXeZfdM8Ai0K2OlIA_jAOz5axci4ruAue0ASEn-XsA4GQbWBawEuaNLMyJ4_rvgrA1Jr7Q98fwAu9eBAK8KxufzW4lkLlCY7mENyOyD1EXm2a_Ov/s400/cloud9-file_download.png" /></a><br />
mbedのドライブに直接ダウンロードしてもよい。プログラムが実行されます。<br />
<br />
(2015/9/1)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-12906478175941835682015-08-31T23:30:00.000+09:002015-09-01T18:12:28.402+09:00DS18B20動作確認用プログラムのLPC812対応<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIoukzpQBY3g8F4QcGy4Ur8wiMUeXGtLLn8FWTvhwwbCjL_Di9qahAqiuZ-spT7VJIIjdjT1jokrUCP0qvlFqHuAVBURMrhuwlTxzINtDfQ18h49BmgVwUvUCebmzyizlTKI1gUZ1tg2CJ/s1600/DS18B20-LPC812.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIoukzpQBY3g8F4QcGy4Ur8wiMUeXGtLLn8FWTvhwwbCjL_Di9qahAqiuZ-spT7VJIIjdjT1jokrUCP0qvlFqHuAVBURMrhuwlTxzINtDfQ18h49BmgVwUvUCebmzyizlTKI1gUZ1tg2CJ/s320/DS18B20-LPC812.jpg" /></a><br />
<br />
<a href="http://va009039.blogspot.jp/2013/01/ds18b20.html">DS18B20動作確認用プログラム</a>は mbed LPC812では動かなくなってしまった。<br />
<br />
以前のwait_us関数はSCTで実装されていたのでone wireパラメータを調整してなんとか動いていました。<br />
<br />
最近のmbedライブラリではMRTでwait_us関数を実装しているのでus単位をシステムクロックに変換する演算に時間がかかって立ち上がりが遅くなって、とうとう動かなくなってしまったようです。<br />
<br />
予めシステムクロック単位に変換しておいてwait関数を軽くするように変更しました。<br />
MRTのTIMER3を使っているので競合に注意。<br />
<br />
<a href="https://developer.mbed.org/users/va009039/code/DS18B20_test/">https://developer.mbed.org/users/va009039/code/DS18B20_test/</a><br />
<br />
(2015/8/31)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-91238708748832187762015-08-16T23:30:00.000+09:002015-08-16T23:30:00.745+09:00LPCScryptでLPC-Link2にCMSIS-DAPファームウェアの書込み<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1k1VqxWyIKb91YM3_cpWjvrGJKNOAXxvI5XK5uxkZdtFkoWmGGCkf1dKLj2xsW7EeeqfazVzlsdJu_pWp-ZtPlgbPixz5bxxDBFdJEYsKFy-iAmocKzG94BlZkCvtFVxoQJc1L51Ac0Z/s1600/lpc-link2.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY1k1VqxWyIKb91YM3_cpWjvrGJKNOAXxvI5XK5uxkZdtFkoWmGGCkf1dKLj2xsW7EeeqfazVzlsdJu_pWp-ZtPlgbPixz5bxxDBFdJEYsKFy-iAmocKzG94BlZkCvtFVxoQJc1L51Ac0Z/s320/lpc-link2.jpg" /></a><br />
<br />
<b>インストール</b><br />
LPCScrypt(LPCScrypt_installer_1.5.2_588.exe)を次のサイトからダウンロードして実行する。<br />
<a href="https://www.lpcware.com/lpcscrypt">https://www.lpcware.com/lpcscrypt</a><br />
<br />
セットアップウィザードに従えばいいが、シリアルドライバーはインストールしない。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF9d_vnvFwQ-aHXikBLvXa6nSjegOEVvPZ_VlRftwEdu-kAUHChf-2fazs6eXBqUmKqhwGF9Ds7RxsREqTpL2A6f7X2kMLnEAP_0yxO3b93sCgl3bqfjrY64OAB0mSDVjFa86tUN2ifXyf/s1600/LPCScrypt-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF9d_vnvFwQ-aHXikBLvXa6nSjegOEVvPZ_VlRftwEdu-kAUHChf-2fazs6eXBqUmKqhwGF9Ds7RxsREqTpL2A6f7X2kMLnEAP_0yxO3b93sCgl3bqfjrY64OAB0mSDVjFa86tUN2ifXyf/s320/LPCScrypt-2.png" /></a><br />
<br />
<b>ファームウェア書込み</b><br />
LPC-Link2のJP1を外してUSBに接続する。(DFUモードでLPC-Link2を起動する)<br />
C:\NXP\LPCScrypt\scripts に移動して、program_CMSIS.cmd NB を実行する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_70hInqetdj8sfGp6BWe8JimwVKhId2QjvtewkBp5LGQXbG2pNUIEzEFzzTQlR4Bz4sS6xLkLxYA3gTF_bX9_HjtuEHKHJng57BYSd-SGZTMgnI7ZSW3aUUxilADfQJkTVJLv5n0sbwu/s1600/LPCScrypt-3.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEit_70hInqetdj8sfGp6BWe8JimwVKhId2QjvtewkBp5LGQXbG2pNUIEzEFzzTQlR4Bz4sS6xLkLxYA3gTF_bX9_HjtuEHKHJng57BYSd-SGZTMgnI7ZSW3aUUxilADfQJkTVJLv5n0sbwu/s320/LPCScrypt-3.png" /></a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3MBiqfQl23cbTK7s6nHzJ6ixAtCaLQ_tgRNwqJpZ66mDyvX2YE5fkpjFnCJ5wj0ZsiJrYygNdZdbsx6XFtXbE09yl_jI8d4V8TFqqVv4DQkgOSELiavtobrj9ZAKQ_EiNATXSHr5l_u-P/s1600/LPCScrypt-4.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3MBiqfQl23cbTK7s6nHzJ6ixAtCaLQ_tgRNwqJpZ66mDyvX2YE5fkpjFnCJ5wj0ZsiJrYygNdZdbsx6XFtXbE09yl_jI8d4V8TFqqVv4DQkgOSELiavtobrj9ZAKQ_EiNATXSHr5l_u-P/s320/LPCScrypt-4.png" /></a><br />
<br />
LPC-Link2のJP1をショートする。(SPI Flashから起動する)<br />
<br />
<b>CMSIS-DAP確認</b><br />
MDKを起動してDebugでCMSIS-DAPを認識できれば成功です。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrMiFDYaJIbSU1cnRkPrBEZ6Zh9SJ0E_F-5IohQhiTRptaHRTu8Kl_1q1NE0CZj7tPeVZhiCPA_kGUp74VVkTK9rKCkExlOgvxUT0kEcp4jofaiBqroTXLm1wbB31jx8loJN4LqowryyCl/s1600/LPCScrypt-5.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrMiFDYaJIbSU1cnRkPrBEZ6Zh9SJ0E_F-5IohQhiTRptaHRTu8Kl_1q1NE0CZj7tPeVZhiCPA_kGUp74VVkTK9rKCkExlOgvxUT0kEcp4jofaiBqroTXLm1wbB31jx8loJN4LqowryyCl/s320/LPCScrypt-5.png" /></a><br />
<br />
<b>トラブルシューティング</b><br />
CMSIS-DAPはHIDデバイスなので専用のドライバは不要なのですが、<br />
NXPのシリアルドライバーをインストールするとHIDより優先されるようで、MDKからは認識出来なかった。<br />
シリアルドライバーを削除。シリアルポートなしのファームウェアを書き込んだところ認識されるようになりました。<br />
<br />
(2015/8/16)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-79712781539297999952015-08-15T13:02:00.000+09:002015-08-15T18:39:18.721+09:00NUCLEO-L152REをUSBデバイスにする<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwTg_mfiPVPkEA2emYFb6l8CpQ3LhA2CKGWg6_HKqyzBXB9YivRmFICJUmeCzppsYmbaerzbhijbJ1o3hR-jcWGh_lDL-QHeAWTBmS30qOdfb_A0UJguKD_U8rb_G6nHgN9qUFDi6kWssf/s1600/L152RE_USBDevice.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwTg_mfiPVPkEA2emYFb6l8CpQ3LhA2CKGWg6_HKqyzBXB9YivRmFICJUmeCzppsYmbaerzbhijbJ1o3hR-jcWGh_lDL-QHeAWTBmS30qOdfb_A0UJguKD_U8rb_G6nHgN9qUFDi6kWssf/s320/L152RE_USBDevice.jpg" /></a><br />
<br />
NUCLEO-L152REにmbed USBDevice互換のUSBデバイススタックをHAL_PCDで作ってみました。<br />
<br />
<a href="https://developer.mbed.org/users/va009039/code/L152RE_USBDevice/">https://developer.mbed.org/users/va009039/code/L152RE_USBDevice/</a><br />
<br />
<b>STM32CubeMX</b><br />
まずは、USBコネクタとの配線ミスを防ぐため、HAL_PCDの動作を知るために<br />
STM32CubeMXでMSCのUSBデバイスやHIDデバイスを作成してパソコンに接続してみる。<br />
ボードとUSBコネクタは次のとおりです。<br />
PA12 --- D+<br />
PA11 --- D-<br />
F401REのようにPA9にVCCを接続する必要はない。<br />
<br />
<b>USBクロック設定</b><br />
mbedのオフライン環境にSTM32CubeMXで作製したコードをそのまま取り込んだところ動かなくなってしまった<br />
。USBの48MHzを作るためにクロック設定をしている。既にmbedのスタートアップが走ってクロック設定をしているので、<br />
再設定するには HAL_RCC_DeInit() を呼んで初期状態に戻してから設定し直さないといけない。<br />
<br />
<b>ソフトコネクト</b><br />
USBのDPをプルアップにしてパソコン(USBホスト)にUSBデバイスを検出させます。<br />
ソフトウェアでプルアップを制御する事によって、任意の時点でUSBデバイスを検出させる事が出来ます。<br />
L152REにはSYSCFG_PMCでUSB_PU 内部プルアップを制御できるのだが、システム設定コントローラはUSBコントローラとは<br />
別のクロック供給なので__SYSCFG_CLK_ENABLE()の追加が必要です。<br />
<br />
<b>USBDevice</b><br />
USBDevice互換にするためにUSBHAL_STM32L1.cppをHAL_PCDを使って実装する。<br />
デバッグのためにDBG()PRINT文を入れると表示のタイムアウトでUSB認識しないところがある。<br />
デバッグ情報をRAM上に残して、後から見れるようにトレースプログラムを追加してデバッグをします。<br />
HAL_PCDからのSETUP,IN,OUTパケットのコールバックを使っているのでUSBAL.hにも若干修正をしています。<br />
<br />
ソフトコネクト、割込み番号の違いだけで他のボードにも使えると思います。<br />
<br />
F103RBは外部にプルアップ抵抗を付けて動作確認しています。他のボードでは未確認です。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfh5VUkNw1c7kSuGxlaC9Sevxr0U9VvCjB-500VJv-jyhKBHBVB-IgqH5W1LEBYScfkjoArIYPQ9U_r1BscSc_fc-vPoOf_X_rrjXXcBWx4S69Q1ML2LVkJQvkgNu8NPJyBzMPbNYLT4N/s1600/F103RB_USBDevice.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUfh5VUkNw1c7kSuGxlaC9Sevxr0U9VvCjB-500VJv-jyhKBHBVB-IgqH5W1LEBYScfkjoArIYPQ9U_r1BscSc_fc-vPoOf_X_rrjXXcBWx4S69Q1ML2LVkJQvkgNu8NPJyBzMPbNYLT4N/s320/F103RB_USBDevice.jpg" /></a><br />
<br />
各ボードのUSBの違いは以下のとおりです。<br />
<br />
L152RE<br />
ソフトコネクトは可能。STM32CubeMXでHAL_PCDEx_SetConnectionState の実装例はある。<br />
_HAL_SYSCFG_USBPULLUP_ENABLE()、__HAL_SYSCFG_USBPULLUP_DISABLE()で内部プルアップ制御をしている。<br />
割込みベクター番号 USB_LP_IRQn <br />
<br />
F103RB F303RE<br />
ソフトコネクトはない。プルアップが必要。<br />
割込みベクター番号 USB_LP_CAN1_RX0_IRQn<br />
<br />
F072RB(STM32F0) L053R8(STM32L0x3)<br />
ソフトコネクトは可能だが、STM32CubeMXでHAL_PCDEx_SetConnectionState の実装はない。<br />
USB_BCDR DPPU(bit15) を直接制御する。<br />
割込みベクター番号 USB_IRQn<br />
<br />
(2015/8/15)<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-82683658831091708022015-08-14T13:52:00.000+09:002015-08-15T18:36:05.273+09:00EmBitzでmbed LPC1768のデバッグ設定(暫定)MDKのようなソースコードレベルでのデバッグはまだ出来ていませんが、<br />
pyOCDバイナリ版のpyOCD_Winを使えばフラッシュ書込み、アセンブラレベルでのステップ実行くらいならできるようになったので設定方法です。<br />
<br />
pyocd_win.exe を次のサイトからダウンロードします。<br />
<a href="https://launchpad.net/gcc-arm-embedded-misc/pyocd-binary/">https://launchpad.net/gcc-arm-embedded-misc/pyocd-binary/</a><br />
<br />
EmBitzのメニューDebug - interfacesでGDBサーバとしてpyOCDを設定します。<br />
Generic<br />
IP address: localhost<br />
port: 3333<br />
Executable: pyocd_win.exe<br />
Pathはpyocd_win.exeをBrowse入力すると自動で設定されます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif8BT2v62kXW7qPVykKYj9LcgzvSwxESb5Dbq1Qic0O2w2L5QAAOlaXWYTtLx6u0-hY86cw-7lV157G4757pex_cioQz8bb3n-pa_ZyL9eo7Ds1jbVQ_jYgNKMpnGrYH-RUKgz0_Ctgcz7/s1600/pyocd_win-1.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif8BT2v62kXW7qPVykKYj9LcgzvSwxESb5Dbq1Qic0O2w2L5QAAOlaXWYTtLx6u0-hY86cw-7lV157G4757pex_cioQz8bb3n-pa_ZyL9eo7Ds1jbVQ_jYgNKMpnGrYH-RUKgz0_Ctgcz7/s400/pyocd_win-1.png" /></a><br />
<br />
メニューDebug - start sessionでデバッグを開始すると初回のみセキュリティ確認がでますが、<br />
pyOCDが実行されてmbed LPC1768のデバッグが出来るようになります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFdSn4dqLjsVavz-_3YJC-9Ao3mqy5gnvk8_ZZiw4CetMSUHVIX3u8prARPvhlzplUvQaIfwI9xvKGk_b6QUz81xAjgUl2nQWg4qTV8c0yIX93uL6_tkXYTHtYpiE6t0z2as82q3BuOjst/s1600/pyocd_win-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFdSn4dqLjsVavz-_3YJC-9Ao3mqy5gnvk8_ZZiw4CetMSUHVIX3u8prARPvhlzplUvQaIfwI9xvKGk_b6QUz81xAjgUl2nQWg4qTV8c0yIX93uL6_tkXYTHtYpiE6t0z2as82q3BuOjst/s400/pyocd_win-2.png" /></a><br />
<br />
ただし、ソースコードレベルでブレークポイントで止めたりステップ実行は出来ない。<br />
ディスアセンブル表示の中ではブレークポイント、ステップ実行は効きます。<br />
EmBitz側で設定しなければならないところがあるのだろうと思います。<br />
<br />
pyOCDなのでCMSIS-DAPのmbedなら同様にデバッグ出来そうだが未確認です。<br />
<br />
参考:<br />
pyOCD Binary Version<br />
<a href="https://developer.mbed.org/blog/entry/pyOCD-Binary-Version/">https://developer.mbed.org/blog/entry/pyOCD-Binary-Version/</a><br />
<br />
(2015/8/14)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-8536409458108795182015-08-14T09:48:00.000+09:002015-08-14T09:48:28.903+09:00STM32 ST-LINK Utilityでフラッシュ書込みNUCLEO-L152REはmbedインターフェースのドラッグ・アンド・ドロップでもフラッシュ書込みが出来るのだが、<br />
EmBitzのメニューからSTM32 ST-LINK Utilityを使えるようにします。<br />
<br />
<b>インストール</b><br />
次のサイトから STSW-LINK004 stsw-link004.zip をダウンロードします。<br />
<a ref="http://www.st-japan.co.jp/web/jp/catalog/tools/PF258168">http://www.st-japan.co.jp/web/jp/catalog/tools/PF258168</a><br />
zipファイルを展開すると STM32 ST-LINK Utility_v3.7.0.exe が出来るので実行してインストールします。<br />
<br />
STM32 ST-LINK Utilityを起動してNUCLEO-L152REが認識するのを確認します。<br />
左から3個目のアイコンまたはメニューのTarget-ConnectでボードのMCUの情報が読み取れます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7L0BYs6le8USvUlZ0M2r7YtSKI6HcoiHbosw-FZlVqsMC1wtGQV4Z2-6MYYJJHgElyvUXmYrNOqPtRxN23IUQvZ2i2eieyQdVBu8MkJfE59ElPGTIMgHN4w4D59gzWOdkCWoY2ychtQaZ/s1600/ST-LINK_Utility-1.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7L0BYs6le8USvUlZ0M2r7YtSKI6HcoiHbosw-FZlVqsMC1wtGQV4Z2-6MYYJJHgElyvUXmYrNOqPtRxN23IUQvZ2i2eieyQdVBu8MkJfE59ElPGTIMgHN4w4D59gzWOdkCWoY2ychtQaZ/s400/ST-LINK_Utility-1.png" /></a><br />
<br />
<b>EmBitzの設定</b><br />
EmBitzでhexファイルを作成するように<br />
メニューのProject-Properties-Build TargetsでGenerate Hex fileのチェックを入れます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxp6jRfI6hhcU28KfoKuFr-U1eWKwxXD4jGDTOp1t2CQj0z-tcjN-U6OU2XcRmK9Z_UDr0F8tDCJlsPvEbVX7tA-lEQYP3NWbrFxtXmIvuROp03p_opeWy1lKx1MJSLfbIRh8HUDPMswHd/s1600/ST-LINK_Utility-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxp6jRfI6hhcU28KfoKuFr-U1eWKwxXD4jGDTOp1t2CQj0z-tcjN-U6OU2XcRmK9Z_UDr0F8tDCJlsPvEbVX7tA-lEQYP3NWbrFxtXmIvuROp03p_opeWy1lKx1MJSLfbIRh8HUDPMswHd/s400/ST-LINK_Utility-2.png" /></a><br />
<br />
EmBitzのメニューのTools-Configure tools-Addで<br />
次のようにコマンドライン版のST-LINK_CLI.exeを設定します。<br />
parameters: -P ${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}.hex -Rst<br />
-P オプションはフラッシュ書込み、 -Rst オプションはリセットの意味です。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRVAPuJbulzPsN_wis_8KzfaNmzaBJiV8CE-yD4Lm7X2-ZuVO6yobUJni1IpDbxjsv6XGajIClMfzw1tOXnuk9ODykFh7oTV1OE0hr2_zej1fYT5xoIuMzBUK66iFL4lmAHZ_EPodiDBwD/s1600/ST-LINK_Utility-3.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRVAPuJbulzPsN_wis_8KzfaNmzaBJiV8CE-yD4Lm7X2-ZuVO6yobUJni1IpDbxjsv6XGajIClMfzw1tOXnuk9ODykFh7oTV1OE0hr2_zej1fYT5xoIuMzBUK66iFL4lmAHZ_EPodiDBwD/s400/ST-LINK_Utility-3.png" /></a><br />
<br />
<b>フラッシュ書込み</b><br />
EmBitzのメニューのTools - STM32 ST-LINK Utilityでフラッシュ書込みが出来るようになります。<br />
<br />
(2015/8/14)<br />
---Unknownnoreply@blogger.comtag:blogger.com,1999:blog-6631476964695009469.post-9483405604861986272015-08-14T06:50:00.000+09:002015-08-14T18:43:29.714+09:00LPC812エミュレータの試作<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08h6DjH7I0KliZsZldey8D1LdexU1B8dBrD829E1PomeIb6JZGJE2baEu28aOmo899Q-_x6yT1S28Ijxcoa7RIkc175WCskSNqrGGiMTgkUPhvZsaaAkW6mWU5WGXNY_wb4jsamkNC-7W/s1600/emu812.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh08h6DjH7I0KliZsZldey8D1LdexU1B8dBrD829E1PomeIb6JZGJE2baEu28aOmo899Q-_x6yT1S28Ijxcoa7RIkc175WCskSNqrGGiMTgkUPhvZsaaAkW6mWU5WGXNY_wb4jsamkNC-7W/s400/emu812.jpg" /></a><br />
<br />
LPC812(Cortex-M0+,V6Mアーキテクチャ)のエミュレータを試作してみました。<br />
とりあえず、mbed_blinky(Lチカ)のバイナリを動かすまでは出来ました。<br />
<br />
mbed LPC1768で動作します:<a href="https://developer.mbed.org/users/va009039/code/emu812/">https://developer.mbed.org/users/va009039/code/emu812/</a><br />
<br />
<b>pythonでの検証</b><br />
まずは、動作速度は関係なく、V6Mアーキテクチャを理解するためにpythonで書き初めました。<br />
ステップ実行のレジスタやメモリアクセスの様子をログに残すようにして、他の言語で書いたものと機械的に比較して間違いを検出しやすくするようにします。<br />
<br />
大まかな動作は次のとおりです。<br />
プログラムカウンタが指すアドレスから命令を取り出す。<br />
ジャンプテーブルで命令の上位バイトから256通りに分岐します。<br />
命令をデコードしてレジスタにアクセスするための添字を求めます。<br />
演算(データ処理)またはデータ転送をします。<br />
<br />
ゼロフラグ(Z)、符号フラグ(N)は演算結果から求める事はできる。<br />
キャリーフラグ(C )、オーバーフローフラグ(V)はどうするのだろうと調べてみたら、演算前の最上位ビットと演算後の最上位ビットから求める事ができるのがわかりました。<br />
ADD Rd,Rn,Rm のそれぞれRd,Rn,Rmの最上位ビットからテーブルを引いています。<br />
<br />
ADD Rd,#imm レジスタとイミディエートとの演算、ADD Rd,Rn レジスタとレジスタの演算を共通化するためにイミディエート用の仮のレジスタを作りました。<br />
命令をデコードしたときにイミディエートの値をR[17]に入れます。<br />
つまり、 R0 = R1 + #imm は R0 = R1 + R17 に換えて演算処理に渡します。<br />
<br />
演算結果を求めるのでなくてフラグの結果だけを知りたい比較命令CMPと減算命令SUBを共通化します。<br />
比較命令を Rd = Rn - Rm に共通化するために 命令のデコードでRd をR[18]に書き換えて演算結果を捨てるようにします。<br />
<br />
pythonでのLPC810エミュレータです:<a href="https://bitbucket.org/va009039/emu810">https://bitbucket.org/va009039/emu810</a><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJfCgw3BNU5R69IGJeyOulaV_6oQckYXzvf5O5QgxJp2Qnb_a2oMnvtDle2cm5SQ2qMxQT2JzHkVVtCAYtImT_eWkXIKrcxR64UjVHVLFo5-ig4e_hjHBTLxqooepbTFMWoSpkTGtQY8td/s1600/emu810_py.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJfCgw3BNU5R69IGJeyOulaV_6oQckYXzvf5O5QgxJp2Qnb_a2oMnvtDle2cm5SQ2qMxQT2JzHkVVtCAYtImT_eWkXIKrcxR64UjVHVLFo5-ig4e_hjHBTLxqooepbTFMWoSpkTGtQY8td/s320/emu810_py.png" /></a><br />
<br />
<b>C++への半自動変換</b><br />
pythonで書いたプログラムをC++に書きなおすのですが同じような作業の繰り返しなので簡単な文字列置換のプログラムを作ってC++へまとめて変換します。<br />
pythonでは冗長なselfでのメソッド変数へのアクセスは文字列置換には好都合です。<br />
ジャンプテーブルの自動作成のために命令範囲をコメントとして書いています。同じ形式の関数名にして抽出しやすいようにしています。<br />
変換に作ったプログラムです: <a href="https://bitbucket.org/va009039/emu810/src/d2508f16a2bb2ae681a5006bce2c6c95963d5d90/conv.py?at=master">conv.py</a><br />
<br />
<b>ペリフェラル</b><br />
初期設定を進めるためにPLLがロックしたとみなすステータスを返すようにします。<br />
wait()タイマーはMRTを使っているので適当な間隔でTIMER0を進めます。<br />
GPIOはDIRレジスタをみて出力だけをホストMCUに渡すようにしています。<br />
LPC1114版も作ってみました: <a href="https://developer.mbed.org/users/va009039/code/emu1114/">https://developer.mbed.org/users/va009039/code/emu1114/</a><br />
<br />
<b>参考文献</b><br />
<ul><li><a href="http://www.amazon.co.jp/gp/aw/rd.html?ie=UTF8&a=4789833518&at=va009039-22&dl=1&lc=msn&uid=NULLGWDOCOMO&url=%2Fgp%2Faw%2Fd.html">ARMプロセッサ―32ビットRISCのシステム・アーキテクチャ (DesignWaveBooksシリーズ)</a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=va009039-22&l=msn&o=9&a=4789833518" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />
<li><a href="http://www.slideshare.net/open-arch/3-fpga">第3回ローレイヤー勉強会 : FPGAでコンピュータを作ってみた</a><br />
<li><a hef="http://dmitry.gr/index.php?r=05.Projects&proj=08.%20uM0">Cortex-M0 emulator on ATTiny85</a><br />
</UL>(2015/8/14)<br />
---Unknownnoreply@blogger.comtag:blogger.com,1999:blog-6631476964695009469.post-21047819373612385002015-05-21T06:30:00.000+09:002015-05-23T08:18:47.473+09:00mbedオフライン環境にEmBitz beta 0.31を試す(Nucleo F411RE編)<h3>インストール</h3>EmBitz beta 0.31をダウンロードする。<br />
<a href="http://www.emblocks.org/forum/download/file.php?id=431">EmBitz_Beta 0.31.7z</a><br />
<a href="http://www.emblocks.org/forum/viewtopic.php?f=1&t=595">http://www.emblocks.org/forum/viewtopic.php?f=1&t=595</a><br />
7zipで展開、EmBitz_Beta 0.31.exeを実行してインストールする。<br />
<br />
<h3>プログラムのエクスポート</h3>オンラインコンパイラからmbed_blinky_emblocks_nucleo_f411re.zipを保存する。展開する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIALZK_aHednN2xzLRRmoS2z9TzpwBIwRGmZSm8WFuRxOORhUSpIIRsBiAy9QsYZnnYJ7MIUQt4YU-dVa_h5Vogb7ODVLV3g2PoBv8q9Fvkh9tinfrRdHDy-mcB0d0BMqY_54ZBJ03_5mI/s1600/embitz-export.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIALZK_aHednN2xzLRRmoS2z9TzpwBIwRGmZSm8WFuRxOORhUSpIIRsBiAy9QsYZnnYJ7MIUQt4YU-dVa_h5Vogb7ODVLV3g2PoBv8q9Fvkh9tinfrRdHDy-mcB0d0BMqY_54ZBJ03_5mI/s400/embitz-export.png" /></a><br />
<br />
<h3>プログラムのインポート</h3>EmBitzでmbed_blinky.eixを開く。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb90FrURbF6vmXd9n3wxfMadTJQGrN4JqzPcbA1PR4RQsp3yFt4WaY5lxnCjMHAtuTPfetjLhaZN8ayt69sdIOZoZvZG2tWvuNFHx5EhrzUwDXk-SB5uRC5eSs1lBVxxHn4F8pGE-PAMJu/s1600/embitz-import.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhb90FrURbF6vmXd9n3wxfMadTJQGrN4JqzPcbA1PR4RQsp3yFt4WaY5lxnCjMHAtuTPfetjLhaZN8ayt69sdIOZoZvZG2tWvuNFHx5EhrzUwDXk-SB5uRC5eSs1lBVxxHn4F8pGE-PAMJu/s400/embitz-import.png" /></a><br />
<br />
ビルドするとmain.cppで使っているmbedライブラリのwait関数が他のライブラリのと衝突する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6hnTeSLUB9j7dWoZKK57S6Qp4lTXt7-CRCu100xbmMFubiuX6PZ63yJLbHEVc_xMkh6vStj-Wug_AjltqkqGkaJLjlnzCbVJYbu2V3hQ77o5Ydh2aFX7V83-bfziwCkNTO-szpy_-3dMh/s1600/embitz-build-error.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6hnTeSLUB9j7dWoZKK57S6Qp4lTXt7-CRCu100xbmMFubiuX6PZ63yJLbHEVc_xMkh6vStj-Wug_AjltqkqGkaJLjlnzCbVJYbu2V3hQ77o5Ydh2aFX7V83-bfziwCkNTO-szpy_-3dMh/s400/embitz-build-error.png" /></a><br />
<br />
wait関数を使わない(例えば、代わりにwait_msを使う)か、次のようにmbedライブラリを最初にリンクするように変更する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLcnR9S_BKKo_JGxYs5J2-lvOg9KAlQzrsqS5vWjMgu-aoeJrIfn8cWbwsoUfWzvtnXnOSq9B8GVF0yReOmf0VyuYZ4O8sTKgEUA2QHwyd1RTOLXvxJbyEAtf0O5wMUqdDWEzK9aOH6SnP/s1600/embitz-linkers-settings.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLcnR9S_BKKo_JGxYs5J2-lvOg9KAlQzrsqS5vWjMgu-aoeJrIfn8cWbwsoUfWzvtnXnOSq9B8GVF0yReOmf0VyuYZ4O8sTKgEUA2QHwyd1RTOLXvxJbyEAtf0O5wMUqdDWEzK9aOH6SnP/s400/embitz-linkers-settings.png" /></a><br />
<br />
ビルドは成功する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkSADzBebOSklTb_7lhPATqmVV-xIiot99i0JYdr3iB47hXqfmd6phIGRQAZezVikhZ00tx05XBW1CUWpWkZ3Z7LdWiycg-f04aTJiYpgUKF_6gSgqvvIWhp6-po4OZv1Z25_ycFDsGTAC/s1600/embitz-build-ok.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkSADzBebOSklTb_7lhPATqmVV-xIiot99i0JYdr3iB47hXqfmd6phIGRQAZezVikhZ00tx05XBW1CUWpWkZ3Z7LdWiycg-f04aTJiYpgUKF_6gSgqvvIWhp6-po4OZv1Z25_ycFDsGTAC/s400/embitz-build-ok.png" /></a><br />
<br />
<h3>実行・デバッグ</h3>デバッカを起動して実行ファイルをNucleo F411REに書込む。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVDsVmvVMRyUHO5qMqMzhPOToPsF7fxMu0FFTfObcHtYLWQHXXjFxNLRMvUpMp2OevNub2ptcZmbPRSigViyaVp7uIp31RfpDB1yLheIaEA93vT-mZu4o5TKyt43bXEUF14ReJaSbp5Y8/s1600/embitz-debug-start.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRVDsVmvVMRyUHO5qMqMzhPOToPsF7fxMu0FFTfObcHtYLWQHXXjFxNLRMvUpMp2OevNub2ptcZmbPRSigViyaVp7uIp31RfpDB1yLheIaEA93vT-mZu4o5TKyt43bXEUF14ReJaSbp5Y8/s400/embitz-debug-start.png" /></a><br />
<br />
デバッカでステップ実行も出来ます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb-jk5tfxnhVipNRUQt2Ih6sj3rxrELyqprqU-cLp3OmzJiXjpzWtZ31Uu-GrDtaDgPkTgdMqV4C7JjYNH8wBEOjgLROpW-fMqlyLJGXZm-aqOqRPK8YOOTeYWViKSaats099wWHU7-QaZ/s1600/embitz-debug-dis.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjb-jk5tfxnhVipNRUQt2Ih6sj3rxrELyqprqU-cLp3OmzJiXjpzWtZ31Uu-GrDtaDgPkTgdMqV4C7JjYNH8wBEOjgLROpW-fMqlyLJGXZm-aqOqRPK8YOOTeYWViKSaats099wWHU7-QaZ/s400/embitz-debug-dis.png" /></a><br />
<br />
<h3>バイナリーファイルの作成</h3>mbedに書込むだけならバイナリーファイル形式が便利なので、EmBitzのToolsメニューにELFファイルからの変換を追加します。<br />
<br />
メニューのTools - Configure tools… - Add - Edit tool で以下のように設定します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimhSiF8XC2Is1-Ycoeva-y19PDMcvbBimnnVpwb6J69JO-KBG6OBMTokQRr4Vb6IPl1RJ_QUdRxZl1y3TV3-7ukvJU2fBenZSpohPDelz3YIxJ7ELwZWGRy03N79iiiBrK5kn6niUd8vZC/s1600/embitz-elf2bin.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimhSiF8XC2Is1-Ycoeva-y19PDMcvbBimnnVpwb6J69JO-KBG6OBMTokQRr4Vb6IPl1RJ_QUdRxZl1y3TV3-7ukvJU2fBenZSpohPDelz3YIxJ7ELwZWGRy03N79iiiBrK5kn6niUd8vZC/s400/embitz-elf2bin.png" /></a><br />
<br />
(2015/5/23)<br />
---<br />
<br />
<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-24910190522766135802014-11-01T10:33:00.000+09:002015-05-21T06:31:48.535+09:00mbedオフライン環境にEm::Blocks IDEを使う(Nucleo F401RE編)<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLL_pXDg7KFqHbdRv8sBXksBeU3RMpjLKBKOhMG9qSbuUST8SQQOA5XB62RYPK8Kl_59ACFMF35D_n9uWojlyvLwRBFLleoXGPzsLl0QXHPHlU13a-eQX5wIFNVDyLO50b2ExAQDC2vdbj/s1600/emblocks.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLL_pXDg7KFqHbdRv8sBXksBeU3RMpjLKBKOhMG9qSbuUST8SQQOA5XB62RYPK8Kl_59ACFMF35D_n9uWojlyvLwRBFLleoXGPzsLl0QXHPHlU13a-eQX5wIFNVDyLO50b2ExAQDC2vdbj/s400/emblocks.png" /></a><br />
<br />
Em::Blocks IDEをNucleo F401REのmbedのオフライン環境に試してみました。<br />
本体がC++で書かれているのでCoIDEやLPCXpressoIDEに比べて軽快に動きます。<br />
GCCコンパイラは内蔵されているので別途インストールする必要はありません。<br />
<br />
<h2>Em::Blocks IDEのインストール</h2>次のサイトから EmBlocks_2.30.zip をダウンロードする。<br />
<a href="http://www.emblocks.org">http://www.emblocks.org</a><br />
<a href="http://www.emblocks.org/web/downloads-main">http://www.emblocks.org/web/downloads-main</a><br />
(ファイルサイズは40Mバイトと小さいのだが回線が細いようなのでダウンロードに20分くらいかかってしまった)<br />
展開して、EmBlocks_2.30.exe を実行する。<br />
<br />
<h2>プログラムのエクスポート</h2>mbedオンラインコンパイラからプログラムを emblocks でエクスポートする。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxNtByM9Z6lksW4HALMBo-J70t7Zb7pals33WXiGeXO6E8HEJYfweZwNw0OoBFytGbLosJi6Rfna7b2HVg6WkruhyMFCl_Uuj8jzbhU1l16Q8FfytyNmd7rJU21hNE46-NVCGCHs7Yl17w/s1600/emblocks-export.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxNtByM9Z6lksW4HALMBo-J70t7Zb7pals33WXiGeXO6E8HEJYfweZwNw0OoBFytGbLosJi6Rfna7b2HVg6WkruhyMFCl_Uuj8jzbhU1l16Q8FfytyNmd7rJU21hNE46-NVCGCHs7Yl17w/s400/emblocks-export.png" /></a><br />
<br />
exportしたファイル(mbed_blinky_emblocks_nucleo_f401re.zip)を展開しておく。<br />
<br />
Em::Blocksで mbed_blinky.eix をインポートする。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIH-415mmXVI52s06fsNJGlrx35XMoJIlIrdzzMPCAAwsrJ-ARg_kqweSwhlMksYRvHkPp_RyKY1zIbcWOV7Wgqu8_oL_S8I0Sxx75O775Zv__pS1MkP78w2PsPbP45xJVBoQYwmvnX54D/s1600/emblocks-import.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIH-415mmXVI52s06fsNJGlrx35XMoJIlIrdzzMPCAAwsrJ-ARg_kqweSwhlMksYRvHkPp_RyKY1zIbcWOV7Wgqu8_oL_S8I0Sxx75O775Zv__pS1MkP78w2PsPbP45xJVBoQYwmvnX54D/s400/emblocks-import.png" /></a><br />
<br />
<font "+3"><b>《重要》</b></font> mbedライブラリを最初にリンクするように移動する。(Project build options)<br />
最後にリンクしているとmbedライブラリのwait関数(wait_api.c)とシステムライブラリ のwait関数(syswait.c)が衝突してリンクエラーになります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLZNRJfEwUCXcXfW0NRIlnUVTo01PnP4nIZ3NiuaBFGCIjtpULMT7RJ1JUiwfGWEatkDhWXV5g90jORfJR7-Kpbs32Ba7x7ly3kF5Yr6aI0UtM9SWHjOmciGyKbiF-waMNniVZeLA6bPsr/s1600/emblocks-mbed-lib.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLZNRJfEwUCXcXfW0NRIlnUVTo01PnP4nIZ3NiuaBFGCIjtpULMT7RJ1JUiwfGWEatkDhWXV5g90jORfJR7-Kpbs32Ba7x7ly3kF5Yr6aI0UtM9SWHjOmciGyKbiF-waMNniVZeLA6bPsr/s400/emblocks-mbed-lib.png" /></a><br />
<br />
ビルドする。buildフォルダに 実行ファイル mbed_blinky.elf が作成されます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi22uyD1IjfBi0k4bEpg3lD6KZcPwqOVXtCV5ZJ7naeXAZV7LxsphEifqUoyxy5L1f6sDTX1nE_R6MnzXkomnP5PAz9Bu_dUhDBIDQYI-n009j8_VHD0hXHzD-s8g8PxEkRftQwKVgnpqV4/s1600/emblocks-build.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi22uyD1IjfBi0k4bEpg3lD6KZcPwqOVXtCV5ZJ7naeXAZV7LxsphEifqUoyxy5L1f6sDTX1nE_R6MnzXkomnP5PAz9Bu_dUhDBIDQYI-n009j8_VHD0hXHzD-s8g8PxEkRftQwKVgnpqV4/s400/emblocks-build.png" /></a><br />
<br />
実行ファイルを書込むだけの機能は内蔵されていないのでデバッガを開始させて書込む。<br />
Reset Run でプログラムを実行します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvvkU8N0RRWFcN4hocpelL9EEWJipQcHHqfZI3rs5qAeDmnRpmTHh8noi3niDTJPBEG53PleZ7wmZPFH7ugUZ7pprx_pWtDW5hDO_LmWYDs9p0PBL9RU1ZdVs_U2nEZS5IhjeTLrfLE-W/s1600/emblocks-debug.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpvvkU8N0RRWFcN4hocpelL9EEWJipQcHHqfZI3rs5qAeDmnRpmTHh8noi3niDTJPBEG53PleZ7wmZPFH7ugUZ7pprx_pWtDW5hDO_LmWYDs9p0PBL9RU1ZdVs_U2nEZS5IhjeTLrfLE-W/s400/emblocks-debug.png" /></a><br />
<br />
(2014/11/1)<br />
---<br />
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-6941927186720199872014-10-23T10:45:00.000+09:002014-11-01T11:22:04.645+09:00mbedオフライン環境にCoIDEを使う<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpGyGbQE89z46X1kq02vbYhPUBcFHo0ud_D2SRaUWDF2wJ4_fIJeML_q5PRpX-d4lxdetQP1D3VZvjPGQYk2NVDSjHpIB1Nmh9hPqE3zfBp5iGUx9_zweQOzEuSYRFse2x99MBSLCelAoP/s1600/coide.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpGyGbQE89z46X1kq02vbYhPUBcFHo0ud_D2SRaUWDF2wJ4_fIJeML_q5PRpX-d4lxdetQP1D3VZvjPGQYk2NVDSjHpIB1Nmh9hPqE3zfBp5iGUx9_zweQOzEuSYRFse2x99MBSLCelAoP/s400/coide.png" /></a><br />
<br />
Nucleo F401REのmbedのオフライン環境にMDK-Liteを使っていたのだが、<br />
32Kバイトを超えるコードはリンク出来ないのでサイズ制限のないCooCox CoIDEを試してみました。<br />
<br />
<h3>CoIDEのインストールと設定</h3><br />
CooCoxのサイトからCoIDEをダウンロードしてインストールする。<br />
<a href="http://www.coocox.org/CooCox_CoIDE.htm">http://www.coocox.org/CooCox_CoIDE.htm</a><br />
<a href="http://www.coocox.org/Tools/coIDE-1.7.7.exe">http://www.coocox.org/Tools/coIDE-1.7.7.exe</a> 422MB(442,827,819バイト)<br />
<br />
CoIDEを起動して、Toolchain Path を設定する。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx-xFbSze7T7UCcnKO49h_cpqDwcLiBU9Gf5F1Ep9hxgXEslpprxNicS1wGvCLrSXFlHwKByK0gILUXWcXtcCI1iAxGk4MdbUvObX-GTjbnj3E30e3q6lHROHB6jqBcKbDiTkEb_26No1p/s1600/coide-toolchain-1.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjx-xFbSze7T7UCcnKO49h_cpqDwcLiBU9Gf5F1Ep9hxgXEslpprxNicS1wGvCLrSXFlHwKByK0gILUXWcXtcCI1iAxGk4MdbUvObX-GTjbnj3E30e3q6lHROHB6jqBcKbDiTkEb_26No1p/s400/coide-toolchain-1.png" /></a><br />
<br />
本来はgccを新規にインストールするのだが、LPCXpresso付属のgccを使う。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUD-bcVUSiz1d9xDAM87Gdy14RilGU-6nvdGrxL-GZLho9T18XF3dlmKawDLlKdmZF149HQaf2opkgsrIxsydnphEJZF-qqVb4j6AW0PNCOAq_zXY3S2bWmQOVgRehrfn_SyB2FmxuLcRZ/s1600/coide-toolchain-2.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUD-bcVUSiz1d9xDAM87Gdy14RilGU-6nvdGrxL-GZLho9T18XF3dlmKawDLlKdmZF149HQaf2opkgsrIxsydnphEJZF-qqVb4j6AW0PNCOAq_zXY3S2bWmQOVgRehrfn_SyB2FmxuLcRZ/s400/coide-toolchain-2.png" /></a><br />
<br />
<h3>プログラムのエクスポート </h3><br />
mbedオンラインコンパイラのexportの変更によりmbedライブラリが付くようになりましたのでmbed-srcへの変更は必要なくなりました。<br />
<s>mbedオンラインコンパイラからexportする前にmbedライブラリを mbed-src に切替える。<br />
(mbedライブラリを削除して mbed-src をインポートする)<br />
<a href="http://developer.mbed.org/users/mbed_official/code/mbed-src/">http://developer.mbed.org/users/mbed_official/code/mbed-src/</a></s><br />
<!--
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU2h7pCRCltNTtBYv3y-rlxyqivj1WjREhV-LK6i_nXyY-UA5zm9NYwiVkPq21Mcxcev0mYNZi-V6gM-U3UmsMlRVCJZb67MRLTyR_2aDKYjYVl9egIt4UztM5hg9s-K4IJnD5PvqcGcnY/s1600/coide-mbed-src.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjU2h7pCRCltNTtBYv3y-rlxyqivj1WjREhV-LK6i_nXyY-UA5zm9NYwiVkPq21Mcxcev0mYNZi-V6gM-U3UmsMlRVCJZb67MRLTyR_2aDKYjYVl9egIt4UztM5hg9s-K4IJnD5PvqcGcnY/s400/coide-mbed-src.png" /></a><br />
--><br />
プログラムをToolchain CooCox CoIDE形式でエクスポートする。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-qrP0e_V_leGh7I3SL7Rs3276lXIzJsojZQQzF7cdxlQ2dSJ7DLaCL3WNwF0iOq25TAzVjBoZtPZCXj58x8-lY5vTjS2Soa9eYq3960FVHqXBZf-RVcZswBlrjrvIg415m__Jas83iClj/s1600/coide-export.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-qrP0e_V_leGh7I3SL7Rs3276lXIzJsojZQQzF7cdxlQ2dSJ7DLaCL3WNwF0iOq25TAzVjBoZtPZCXj58x8-lY5vTjS2Soa9eYq3960FVHqXBZf-RVcZswBlrjrvIg415m__Jas83iClj/s400/coide-export.png" /></a><br />
<br />
exportしたファイル Nucleo_blink_led_coide_nucleo_f401re.zip を展開する。<br />
<br />
CoIDE でプロジェクトファイル Nucleo_blink_led.coproj を開く。(Open Project…)<br />
<br />
リビルドする。(Rebuild)<br />
<br />
実行コードをNucleo-F401REに書き込み、実行する。(Download Code To Flash)<br />
<br />
<s><h4>現在の問題点</h4>wait()関数が速くなってLチカが10倍くらい速く動く。<br />
しかし、printf()を実行した後なら正しい時間間隔になる。原因は未調査です。<br />
</s><br />
(2014/10/23)<br />
(2014/11/1)修正 mbed-srcへの変更、現在の問題点を削除。<br />
---Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-6631476964695009469.post-78373048850605241912014-09-11T00:13:00.000+09:002014-09-11T07:44:07.102+09:00TinyJS on mbedをLPC4088,FRDM-K64Fで動かす<a href="http://tinyjsmbed.appspot.com/"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqp9daHURembFctZcNKdeLziJZ5NI-t98vmwB2_FbxxdFXzzHcn3rPu2Y2dfI9RWMNBVtTyzWe6ibU8Fj31RqJc8dedqa0kJnQv4PTFnnGA0VF-INA27MTPxAA95yUtLtTYkyrTAuK0VAD/s1600/tinyjs-lpc4088.png" /></a><br />
<br />
<a href="http://mbed.org/users/ohneta/code/TinyJS/">TinyJS on mbed</a>をLPC4088,FRDM-K64Fで動かしてみました。<br />
<br />
GAEでオンラインコンパイラ風(ソースコードを繫げてるだけ)にしています。<br />
オンラインエディタでコードを入力してbuildボタンでバイナリーがダウンロードされます。<br />
次のURLで試すことが出来ます。<br />
<a href="http://tinyjsmbed.appspot.com/">http://tinyjsmbed.appspot.com/</a><br />
<br />
PinNameの違いはpython-on-a-chipで使っていたPinNameテーブルを使っています。PinNameTable.h<br />
<br />
LPC1768版ではメモリの都合で外されていたjavascriptの関数を追加しました。<br />
TinyJS_Functions.cpp(registerFunctions)<br />
exec(jsCode) eval(jsCode) trace() Object.dump() Object.clone() Math.rand() Math.randInt(min, max) charToInt(ch) String.indexOf(search) String.substring(lo,hi) String.charAt(pos) String.charCodeAt(pos) String.fromCharCode(char) String.split(separator) Integer.parseInt(str) Integer.valueOf(str) JSON.stringify(obj, replacer) Array.contains(obj) Array.remove(obj) Array.join(separator)<br />
<br />
更に数値・三角関数も追加しました。<br />
TinyJS_MathFunctions.cpp(registerMathFunctions) <br />
Math.abs(a) Math.round(a) Math.min(a,b) Math.max(a,b) Math.range(x,a,b) Math.sign(a) Math.PI() Math.toDegrees(a) Math.toRadians(a) Math.sin(a) Math.asin(a) Math.cos(a) Math.acos(a) Math.tan(a) Math.atan(a) Math.sinh(a) Math.asinh(a) Math.cosh(a) Math.acosh(a) Math.tanh(a) Math.atanh(a) Math.E() Math.log(a) Math.log10(a) Math.exp(a) Math.pow(a,b) Math.sqr(a) Math.sqrt(a)<br />
<br />
メモリが多いNucleo-F401REでも動いてほしいのだが、microlibのボードとは相性が良くないみたいです。<br />
<br />
print(mbed.memfree());での残りメモリの表示。<br />
LPC4088版<br />
47645バイト<br />
36301バイト TinyJS_Functions.cpp(registerFunctions)を使用。<br />
23733バイト TinyJS_Functions.cpp(registerFunctions)と TinyJS_MathFunctions.cpp(registerMathFunctions)を使用。<br />
<br />
FRDM-K64F版<br />
122101バイト TinyJS_Functions.cpp(registerFunctions) と TinyJS_MathFunctions.cpp(registerMathFunctions)を使用。<br />
<br />
TinyJS on mbed<br />
<a href="http://mbed.org/users/ohneta/code/TinyJS/">http://mbed.org/users/ohneta/code/TinyJS/</a><br />
<br />
GAE用に修正したTinyJS on mbed<br />
<a href="http://mbed.org/users/va009039/code/TinyJS/">http://mbed.org/users/va009039/code/TinyJS/</a><br />
<br />
GAEで動いているWebアプリのソースコード<br />
<a href="https://bitbucket.org/va009039/tinyjsmbed">https://bitbucket.org/va009039/tinyjsmbed</a><br />
<br />
(2014/9/11)<br />
---Unknownnoreply@blogger.com0