Home New Help Edit

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
nonewtextdatabssdechexfilename
1Redsuite C Project9200492439ctest_cproject.axf
2Redsuite C++ Project(NO_HEAP)8792211268109722adctest_cppproject.axf-O0,Newlib(semihost)
3Redsuite C++ Project(NO_HEAP)8636211268108162a40test_cppproject.axf-O2,Newlib(semihost)
4Redsuite C++ Project(NO_HEAP)8632211268108122a3ctest_cppproject.axf-Os,newlib(nohost)
5Redsuite C++ Project(NO_HEAP)8464211264108162990test_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にすると認識するが、ダウンロードで失敗する。



Home New Help Edit
2023-03-24 09:22:17 32400