LPCXpresso使ってみる
Suns & Moon Laboratory
2012-10-19
情報
http://elm-chan.org/junk/32bit/report.html elm
開発環境のダウンロード
ユーザー登録フォームに、ボット対策で計算しなきゃいけいなところがあった。
最初見逃して、なんでーとか思った。
LPCXpresso v4.3.0 Build 1023
インストール
デフォルトでインストール
アクティベート
new project
Import Projectsで、CMSISv2p00_LPC11xxをインポートしないと、Wizardが終了しない。
(ちゃんとメッセージでワークスペースに置けと書いてある)
Import archived projects(zip)
http://support.code-red-tech.com/CodeRedWiki/SuppliedExamples
LPC11U14使おうとしたら、またしてもWizardが終了しないので、下記をImport Projects(左下にあるQuickstartPanel)でインポート。
C:\code_red\RedSuiteNXP_4.3.0_1033\redsuite\Examples\NXP\LPC1000\LPC11Uxx\CMSISv2p00_LPC11Uxx.zip
使い方
File->Switch Workspace->Other で、ワークスペースの場所を指定
ショートカット
Ctrl+B ビルド
制限
・コードサイズ
・C++使えない?(無理矢理使っている例も有るが、バージョン違う。制限としてC++買えという事みたい)
LPC1114/F103レジスタ
LPC1114はLPC1100C series
Pin Functionで機能の選択→LPC_IOCON.PIOx_x
▼
Pin Modeでプルアップ、プルダウンの選択
UM10398.pdf
Chapter 9: LPC111x/LPC11Cxx Pin configuration (LPC1100, LPC1100C, and LPC1100L series, HVQFN/LQFP packages)
CMSIS
LPC11xx.h
LPC_IOCON.PIOx_x で定義されている。ビットまでは定義されていない。
GPIO example
GPIOInit()
GPIOSetValue()
GPIOSetDir()
起動時のクロック
12MHzで動作している
CLKOUTをdiv1で確認
最高速度
http://elm-chan.org/junk/32bit/report.html これが詳しい
IOが多いなら、48MHzのメリット少ないかも。(逆に遅い可能性も)
Flashへのアクセスタイミングは、初期値は最大の3になっている。
Flash configuration register(SYSCON.FLASHCFG.FLASHTIM)
マスクアクセス
GPIOなんかは、ビット単位にアクセスするための機構が用意されている。
GPIOだと、GPIOnDATA 0x0000 to 0x3FF8が、そのロケーションに割り当てられている。
http://blog.livedoor.jp/juggleryou/archives/5796273.html
LPC_GPIO0->MASKED_ACCESS[(1<<7)|(1<<1)] = 0xFF;
上記だと、ビット1,7に1をライトし、その他のビットに影響は無い。
タイマー
http://blog.livedoor.jp/juggleryou/archives/6220811.html
codered
redlibはC90なので、C++使えない
math.h使うと32Kに収まらない
sprintf使うと32Kに収まらない
What are Redlib and Newlib? http://support.code-red-tech.com/CodeRedWiki/RedlibAndNewlib
セクション
↓参考
http://www.ertl.jp/~takayuki/readings/info/no02.html
小さくする1
リンカでnostdlibは、
Tool Settings -> MCU C++ Linker -> General -> No startup or default libs(-nostdlib)
小さくする2
Settings→Tool Settings→MCU C++ Linker→Target→Use C Library→Newlib(none)
にして、以下の関数をC言語のソースで定義すると、小さくなる。(定義しないとエラーになる)
void _exit(int n)
{
}
int _kill(int pid, int val)
{
return 0;
}
int _getpid()
{
return 1;
}
#include <reent.h>
void *_sbrk (ptrdiff_t st)
{
return 0;
}
最小サイズ
Redsuite C Project
no | new | text | data | bss | dec | hex | filename | |
1 | Redsuite C Project | 920 | 0 | 4 | 924 | 39c | test_cproject.axf | |
2 | Redsuite C++ Project(NO_HEAP) | 8792 | 2112 | 68 | 10972 | 2adc | test_cppproject.axf | -O0,Newlib(semihost) |
3 | Redsuite C++ Project(NO_HEAP) | 8636 | 2112 | 68 | 10816 | 2a40 | test_cppproject.axf | -O2,Newlib(semihost) |
4 | Redsuite C++ Project(NO_HEAP) | 8632 | 2112 | 68 | 10812 | 2a3c | test_cppproject.axf | -Os,newlib(nohost) |
5 | Redsuite C++ Project(NO_HEAP) | 8464 | 2112 | 64 | 10816 | 2990 | test_cppproject.axf | -O2,Newlib(semihost) |
2に「小さくする2」試したが、効果無し。
HEX出力
Project Properties → C/C++ Build → Settings → Build Stepsタブ → Post-build steps → Command
変更後
arm-none-eabi-size "${BuildArtifactFileName}"; arm-none-eabi-objcopy -O ihex "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.hex"
変更前
arm-none-eabi-size "${BuildArtifactFileName}"; # arm-none-eabi-objcopy -O binary "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.bin" ; checksum -p ${TargetChip} -d "${BuildArtifactFileBaseName}.bin";
http://support.code-red-tech.com/CodeRedWiki/PostProcessApp
USB
ドライバの有無
http://msdn.microsoft.com/en-us/library/ff538820.aspx
C99にする?
Properties -> C/C++ Build -> Settings -> Tool Settings-> MIscellaneous -> C Dialect -> gnu99にしておく。
for(int i=0, みたいな記述を使いたい為だったりする。
C++でC標準ライブラリを使わない(RedSuite4)
newlibを使うと、何もしないソースで8Kくらいのサイズになります。
これだと16KくらいのROM使う場合非常に厳しいので、標準ライブラリを使用しない方法を検討。
以下の方法で1Kくらいになる。動作はまだ未確認。
1.プロジェクト作成
CPP_NO_HEAP
CMSIS使わない
2.リンカ設定からnewlibを外す
MCU C++ Linker→Target→Use C library→None
3.足りない関数を追加
cp_cpp_config.cppの最後に追加
extern "C" {
void __aeabi_unwind_cpp_pr1(void){}
void __cxa_pure_virtual(void){}
}
4.初期化ルーチン削除
cr_startup_lpc11.cpp
下記関数呼び出しをコメントアウト
//__libc_init_array();
5.レジスタのヘッダは使いたいので、CMSISをインクルードに追加
LPCXpresso7を使う
デバッガ
デバッガ1
2016-07-05
Windows7
LPC-Link(LPCXpressoから切り離し)
LPCXpresso v7.8.0
Debug Configurations -> Debugger -> Debug options for NXP LPC1114/302(cortex-m0)
Debug Coonection -> SWD
Miscellaneous -> Emulator selection -> LPC-Link(HID)
ターゲット LPC1114FBD48/302
デバッガ2
2016-07-05
Windows8.1
LPC-Link2
LPCXpresso v7.8.0
動かない。
Emulator selectionをCMSIS-DAPにすると認識するが、ダウンロードで失敗する。
デバッガ2
2016-07-05
Windows8.1
LPC-Link2
LPCXpresso v7.8.0
動かない。
Emulator selectionをCMSIS-DAPにすると認識するが、ダウンロードで失敗する。
2024-08-14 11:00:24 32400