lpcxpresso
*LPCXpresso使ってみる [[index]] 2012-10-19 #contents **情報 [[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
>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にすると認識するが、ダウンロードで失敗する。
2025-04-01 00:03:05 32400