ラベル TOPPERS/ASP(PIC32MX版) の投稿を表示しています。 すべての投稿を表示
ラベル TOPPERS/ASP(PIC32MX版) の投稿を表示しています。 すべての投稿を表示

2023年12月13日水曜日

TOPPERS/ASP - PIC32MX版 目次

絶滅危惧の「MIPS」アーキテクチャのマイコン「PIC32MX」。

今後、たとえ「ARM」アーキテクチャに移行してしまっても、PICはPICらしく。

DIPパッケージをラインナップするなど、あくまでもホビーユーザーに寄り添ったマイコンであり続けて欲しいでものですね。

以下、TOPPERS/ASP PIC32MX版に関する記事の目次です。


■TOPPERS/ASP - PIC32MX版 その1

TOPPERS/ASP - PIC32MX版 概要

必要なもの

ダウンロード/GitHub


■TOPPERS/ASP - PIC32MX版 その2

開発環境の構築(MPLAB X IDE編)


■TOPPERS/ASP - PIC32MX版 その3

開発環境の構築(XC32コンパイラ編)


■TOPPERS/ASP - PIC32MX版 その4

開発環境の構築(Eclipse編)


■TOPPERS/ASP - PIC32MX版 その5

MPLAB Harmonyとは?

MPLAB Harmonyのインストール

MPLAB HarmonyのIDEへの登録


■TOPPERS/ASP - PIC32MX版 その6

雛形プロジェクトの作成


■TOPPERS/ASP - PIC32MX版 その7

Harmony Frameworkのコピー

雛形プロジェクトで生成したソースコードのコピー

コマンドラインでのビルド


■TOPPERS/ASP - PIC32MX版 その8

プロジェクトの作成(Eclipse編)

プロジェクトの作成(MPLAB X IDE編)


■TOPPERS/ASP - PIC32MX版 その9

シリアル通信用の配線の引き出し

プログラムの転送とデバッグ


■TOPPERS/ASP - PIC32MX版 その10

サンプルプロジェクトの説明

PIC32MX版カーネルについて

ライセンスについて


なお、Qiitaにも上記の記事を1ページにまとめたダイジェスト版を投稿しました。

こっちの方が読み易いです。

よろしければ参考にしてください。

Qiita

TOPPERS/ASP - PIC32MX版 - Qiita

2023年11月10日金曜日

TOPPERS/ASP - PIC32MX版 その10

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


サンプルプロジェクトの説明

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトで遊ぼう)を参照してください。

PIC32MX


PIC32MX版カーネルについて

以下、このカーネルにおける備考です。


●割り込み優先度

このカーネルでは、-1(優先度最低)から-7(優先度最高)の7段階の優先度設定が可能です。

PIC32MXは、実は64段階までの割り込み優先度をサポートしています。

でも…そんなに要らんでしょ?

ということで、私の実装では7段階までに抑えています。

7段階の根拠は、元祖TOPPERS/ASPの「m68k」版と合わせただけで深い意味はありません。

実用レベルでは十分かと…。


●割り込み番号の指定方法

このマイコンは、割り込み番号と、割り込みベクタ番号が一致しないタイプです。

ちょっと小さいので、クリックしてご覧いただきたいのですが、以下は、データシートからの一覧表です。

割り込み番号を意味する「IRQ#」と、割り込みベクタ番号を意味する「Vector#」の不一致がお分かりいただけるかと。

割り込み番号/割り込みベクター番号


例えば、デバッグシリアルの割り込み設定例を見てみましょう。

「..\target\1_2_5_starterlit_gcc\target_serial.h」において、以下のように定義しています。

  1. ...
  2. /*
  3.  * SIOの割込み番号,優先度,属性の定義
  4.  */
  5. #define INTNO_SIO_RX INT_SOURCE_USART_1_RECEIVE
  6. #define INTNO_SIO_TX INT_SOURCE_USART_1_TRANSMIT
  7. #define INHNO_SIO _UART_1_VECTOR
  8. #define INTPRI_SIO -6       /* 割込み優先度 */
  9. #define INTATR_SIO TA_NULL  /* 割込み属性 */
  10. ...


この定義において、シリアル通信の受信割り込みの割り込み番号が「INT_SOURCE_USART_1_RECEIVE」、送信割り込みの割り込み番号が「INT_SOURCE_USART_1_TRANSMIT」、更に両方の割り込みのベクタ番号は「_UART_1_VECTOR」と設定されていることが分かります。

この設定は「make depend」実行時に「..\target\1_2_5_starterlit_gcc\target_serial.cfg」によってコンフィグレータに渡されます。

では「INT_SOURCE_USART_1_RECEIVE」や「INT_SOURCE_USART_1_TRANSMIT」の実際の割り込み番号の値がどこに定義されているのか?

分かりにくい場所にあるのですが、今回の評価ボード「PIC32MX1/2/5 Starter Kit」に搭載されているマイコンの型番が「PIC32MX570F512L」ですので、「..\arch\pic32mx_gcc\framework\peripheral\int\processor\int_p32mx570f512l.h」の中の以下の記述にあります。

  1. ...
  2. typedef enum {
  3.     INT_SOURCE_TIMER_CORE = 0,
  4.     INT_SOURCE_SOFTWARE_0 = 1,
  5.     INT_SOURCE_SOFTWARE_1 = 2,
  6.     INT_SOURCE_EXTERNAL_0 = 3,
  7.     INT_SOURCE_TIMER_1 = 4,
  8.     INT_SOURCE_INPUT_CAPTURE_1_ERROR = 5,
  9.     INT_SOURCE_INPUT_CAPTURE_1 = 6,
  10.     INT_SOURCE_OUTPUT_COMPARE_1 = 7,
  11.     INT_SOURCE_EXTERNAL_1 = 8,
  12.     INT_SOURCE_TIMER_2 = 9,
  13.     INT_SOURCE_INPUT_CAPTURE_2_ERROR = 10,
  14.     INT_SOURCE_INPUT_CAPTURE_2 = 11,
  15.     INT_SOURCE_OUTPUT_COMPARE_2 = 12,
  16.     INT_SOURCE_EXTERNAL_2 = 13,
  17.     INT_SOURCE_TIMER_3 = 14,
  18.     INT_SOURCE_INPUT_CAPTURE_3_ERROR = 15,
  19.     INT_SOURCE_INPUT_CAPTURE_3 = 16,
  20.     INT_SOURCE_OUTPUT_COMPARE_3 = 17,
  21.     INT_SOURCE_EXTERNAL_3 = 18,
  22.     INT_SOURCE_TIMER_4 = 19,
  23.     INT_SOURCE_INPUT_CAPTURE_4_ERROR = 20,
  24.     INT_SOURCE_INPUT_CAPTURE_4 = 21,
  25.     INT_SOURCE_OUTPUT_COMPARE_4 = 22,
  26.     INT_SOURCE_EXTERNAL_4 = 23,
  27.     INT_SOURCE_TIMER_5 = 24,
  28.     INT_SOURCE_INPUT_CAPTURE_5_ERROR = 25,
  29.     INT_SOURCE_INPUT_CAPTURE_5 = 26,
  30.     INT_SOURCE_OUTPUT_COMPARE_5 = 27,
  31.     INT_SOURCE_ADC_1 = 28,
  32.     INT_SOURCE_SPI_1_ERROR = 35,
  33.     INT_SOURCE_SPI_1_RECEIVE = 36,
  34.     INT_SOURCE_SPI_1_TRANSMIT = 37,
  35.     INT_SOURCE_USART_1_ERROR = 38,
  36.     INT_SOURCE_USART_1_RECEIVE = 39,
  37.     INT_SOURCE_USART_1_TRANSMIT = 40,
  38.     INT_SOURCE_I2C_1_BUS = 41,
  39.     INT_SOURCE_I2C_1_ERROR = 41,
  40.     INT_SOURCE_I2C_1_SLAVE = 42,
  41.     INT_SOURCE_I2C_1_MASTER = 43,
  42.     INT_SOURCE_CHANGE_NOTICE_A = 44,
  43.     INT_SOURCE_CHANGE_NOTICE_B = 45,
  44.     INT_SOURCE_CHANGE_NOTICE_C = 46,
  45.     INT_SOURCE_CHANGE_NOTICE_D = 47,
  46.     INT_SOURCE_CHANGE_NOTICE_E = 48,
  47.     INT_SOURCE_CHANGE_NOTICE_F = 49,
  48.     INT_SOURCE_CHANGE_NOTICE_G = 50,
  49.     INT_SOURCE_PARALLEL_PORT = 51,
  50.     INT_SOURCE_PARALLEL_PORT_ERROR = 52,
  51.     INT_SOURCE_COMPARATOR_1 = 32,
  52.     INT_SOURCE_COMPARATOR_2 = 33,
  53.     INT_SOURCE_USB_1 = 34,
  54.     INT_SOURCE_DMA_0 = 72,
  55.     INT_SOURCE_DMA_1 = 73,
  56.     INT_SOURCE_DMA_2 = 74,
  57.     INT_SOURCE_DMA_3 = 75,
  58.     INT_SOURCE_SPI_2_ERROR = 53,
  59.     INT_SOURCE_SPI_2_RECEIVE = 54,
  60.     INT_SOURCE_SPI_2_TRANSMIT = 55,
  61.     INT_SOURCE_USART_2_ERROR = 56,
  62.     INT_SOURCE_USART_2_RECEIVE = 57,
  63.     INT_SOURCE_USART_2_TRANSMIT = 58,
  64.     INT_SOURCE_I2C_2_BUS = 59,
  65.     INT_SOURCE_I2C_2_ERROR = 59,
  66.     INT_SOURCE_I2C_2_SLAVE = 60,
  67.     INT_SOURCE_I2C_2_MASTER = 61,
  68.     INT_SOURCE_CAN_1 = 77,
  69.     INT_SOURCE_SPI_3_ERROR = 78,
  70.     INT_SOURCE_SPI_3_RECEIVE = 79,
  71.     INT_SOURCE_SPI_3_TRANSMIT = 80,
  72.     INT_SOURCE_USART_3_ERROR = 62,
  73.     INT_SOURCE_USART_3_RECEIVE = 63,
  74.     INT_SOURCE_USART_3_TRANSMIT = 64,
  75.     INT_SOURCE_SPI_4_ERROR = 81,
  76.     INT_SOURCE_SPI_4_RECEIVE = 82,
  77.     INT_SOURCE_SPI_4_TRANSMIT = 83,
  78.     INT_SOURCE_USART_4_ERROR = 65,
  79.     INT_SOURCE_USART_4_RECEIVE = 66,
  80.     INT_SOURCE_USART_4_TRANSMIT = 67,
  81.     INT_SOURCE_USART_5_ERROR = 68,
  82.     INT_SOURCE_USART_5_RECEIVE = 69,
  83.     INT_SOURCE_USART_5_TRANSMIT = 70,
  84.     INT_SOURCE_CLOCK_MONITOR = 29,
  85.     INT_SOURCE_RTCC = 30,
  86.     INT_SOURCE_FLASH_CONTROL = 31,
  87.     INT_SOURCE_COMPARATOR_3 = 76,
  88.     INT_SOURCE_CTMU = 71
  89. } INT_SOURCE;
  90. ...


これによると「INT_SOURCE_USART_1_RECEIVE」は「39」、「INT_SOURCE_USART_1_TRANSMIT」は「40」となっています。

上記のデータシートからの表と照らし合わせてください。

一致しますよね?

次に、割り込みのベクタ番号についてですが、割り込み番号と同様、「..\arch\pic32mx_gcc\framework\peripheral\int\processor\int_p32mx570f512l.h」の中の以下の記述にあります。

  1. ...
  2. typedef enum {
  3.     INT_VECTOR_CT = _CORE_TIMER_VECTOR,
  4.     INT_VECTOR_CS0 = _CORE_SOFTWARE_0_VECTOR,
  5.     INT_VECTOR_CS1 = _CORE_SOFTWARE_1_VECTOR,
  6.     INT_VECTOR_INT0 = _EXTERNAL_0_VECTOR,
  7.     INT_VECTOR_T1 = _TIMER_1_VECTOR,
  8.     INT_VECTOR_IC1 = _INPUT_CAPTURE_1_VECTOR,
  9.     INT_VECTOR_IC1_ERROR = _INPUT_CAPTURE_1_VECTOR,
  10.     INT_VECTOR_OC1 = _OUTPUT_COMPARE_1_VECTOR,
  11.     INT_VECTOR_INT1 = _EXTERNAL_1_VECTOR,
  12.     INT_VECTOR_T2 = _TIMER_2_VECTOR,
  13.     INT_VECTOR_IC2 = _INPUT_CAPTURE_2_VECTOR,
  14.     INT_VECTOR_IC2_ERROR = _INPUT_CAPTURE_2_VECTOR,
  15.     INT_VECTOR_OC2 = _OUTPUT_COMPARE_2_VECTOR,
  16.     INT_VECTOR_INT2 = _EXTERNAL_2_VECTOR,
  17.     INT_VECTOR_T3 = _TIMER_3_VECTOR,
  18.     INT_VECTOR_IC3 = _INPUT_CAPTURE_3_VECTOR,
  19.     INT_VECTOR_IC3_ERROR = _INPUT_CAPTURE_3_VECTOR,
  20.     INT_VECTOR_OC3 = _OUTPUT_COMPARE_3_VECTOR,
  21.     INT_VECTOR_INT3 = _EXTERNAL_3_VECTOR,
  22.     INT_VECTOR_T4 = _TIMER_4_VECTOR,
  23.     INT_VECTOR_IC4 = _INPUT_CAPTURE_4_VECTOR,
  24.     INT_VECTOR_IC4_ERROR = _INPUT_CAPTURE_4_VECTOR,
  25.     INT_VECTOR_OC4 = _OUTPUT_COMPARE_4_VECTOR,
  26.     INT_VECTOR_INT4 = _EXTERNAL_4_VECTOR,
  27.     INT_VECTOR_T5 = _TIMER_5_VECTOR,
  28.     INT_VECTOR_IC5 = _INPUT_CAPTURE_5_VECTOR,
  29.     INT_VECTOR_IC5_ERROR = _INPUT_CAPTURE_5_VECTOR,
  30.     INT_VECTOR_OC5 = _OUTPUT_COMPARE_5_VECTOR,
  31.     INT_VECTOR_SPI1_FAULT = _SPI_1_VECTOR,
  32.     INT_VECTOR_SPI1_RX = _SPI_1_VECTOR,
  33.     INT_VECTOR_SPI1_TX = _SPI_1_VECTOR,
  34.     INT_VECTOR_UART1_FAULT = _UART_1_VECTOR,
  35.     INT_VECTOR_UART1_RX = _UART_1_VECTOR,
  36.     INT_VECTOR_UART1_TX = _UART_1_VECTOR,
  37.     INT_VECTOR_I2C1_BUS = _I2C_1_VECTOR,
  38.     INT_VECTOR_I2C1_SLAVE = _I2C_1_VECTOR,
  39.     INT_VECTOR_I2C1_MASTER = _I2C_1_VECTOR,
  40.     INT_VECTOR_SPI2_FAULT = _SPI_2_VECTOR,
  41.     INT_VECTOR_SPI2_RX = _SPI_2_VECTOR,
  42.     INT_VECTOR_SPI2_TX = _SPI_2_VECTOR,
  43.     INT_VECTOR_UART2_FAULT = _UART_2_VECTOR,
  44.     INT_VECTOR_UART2_RX = _UART_2_VECTOR,
  45.     INT_VECTOR_UART2_TX = _UART_2_VECTOR,
  46.     INT_VECTOR_I2C2_BUS = _I2C_2_VECTOR,
  47.     INT_VECTOR_I2C2_SLAVE = _I2C_2_VECTOR,
  48.     INT_VECTOR_I2C2_MASTER = _I2C_2_VECTOR,
  49.     INT_VECTOR_SPI3_FAULT = _SPI_3_VECTOR,
  50.     INT_VECTOR_SPI3_RX = _SPI_3_VECTOR,
  51.     INT_VECTOR_SPI3_TX = _SPI_3_VECTOR,
  52.     INT_VECTOR_UART3_FAULT = _UART_3_VECTOR,
  53.     INT_VECTOR_UART3_RX = _UART_3_VECTOR,
  54.     INT_VECTOR_UART3_TX = _UART_3_VECTOR,
  55.     INT_VECTOR_SPI4_FAULT = _SPI_4_VECTOR,
  56.     INT_VECTOR_SPI4_RX = _SPI_4_VECTOR,
  57.     INT_VECTOR_SPI4_TX = _SPI_4_VECTOR,
  58.     INT_VECTOR_UART4_FAULT = _UART_4_VECTOR,
  59.     INT_VECTOR_UART4_RX = _UART_4_VECTOR,
  60.     INT_VECTOR_UART4_TX = _UART_4_VECTOR,
  61.     INT_VECTOR_UART5_FAULT = _UART_5_VECTOR,
  62.     INT_VECTOR_UART5_RX = _UART_5_VECTOR,
  63.     INT_VECTOR_UART5_TX = _UART_5_VECTOR,
  64.     INT_VECTOR_CHANGE_NOTICE_A = _CHANGE_NOTICE_VECTOR,
  65.     INT_VECTOR_CHANGE_NOTICE_B = _CHANGE_NOTICE_VECTOR,
  66.     INT_VECTOR_CHANGE_NOTICE_C = _CHANGE_NOTICE_VECTOR,
  67.     INT_VECTOR_CHANGE_NOTICE_D = _CHANGE_NOTICE_VECTOR,
  68.     INT_VECTOR_CHANGE_NOTICE_E = _CHANGE_NOTICE_VECTOR,
  69.     INT_VECTOR_CHANGE_NOTICE_F = _CHANGE_NOTICE_VECTOR,
  70.     INT_VECTOR_CHANGE_NOTICE_G = _CHANGE_NOTICE_VECTOR,
  71.     INT_VECTOR_PMP = _PMP_VECTOR,
  72.     INT_VECTOR_PMP_ERROR = _PMP_VECTOR,
  73.     INT_VECTOR_USB1 = _USB_1_VECTOR,
  74.     INT_VECTOR_RTCC = _RTCC_VECTOR,
  75.     INT_VECTOR_FLASH = _FCE_VECTOR,
  76.     INT_VECTOR_SPI1 = _SPI_1_VECTOR,
  77.     INT_VECTOR_UART1 = _UART_1_VECTOR,
  78.     INT_VECTOR_SPI3 = _SPI_3_VECTOR,
  79.     INT_VECTOR_I2C1 = _I2C_1_VECTOR,
  80.     INT_VECTOR_CN = _CHANGE_NOTICE_VECTOR,
  81.     INT_VECTOR_AD1 = _ADC_VECTOR,
  82.     INT_VECTOR_CMP1 = _COMPARATOR_1_VECTOR,
  83.     INT_VECTOR_CMP2 = _COMPARATOR_2_VECTOR,
  84.     INT_VECTOR_CMP3 = _COMPARATOR_3_VECTOR,
  85.     INT_VECTOR_UART3 = _UART_3_VECTOR,
  86.     INT_VECTOR_SPI2 = _SPI_2_VECTOR,
  87.     INT_VECTOR_UART2 = _UART_2_VECTOR,
  88.     INT_VECTOR_SPI4 = _SPI_4_VECTOR,
  89.     INT_VECTOR_I2C2 = _I2C_2_VECTOR,
  90.     INT_VECTOR_FSCM = _FAIL_SAFE_MONITOR_VECTOR,
  91.     INT_VECTOR_CTMU = _CTMU_VECTOR,
  92.     INT_VECTOR_DMA0 = _DMA_0_VECTOR,
  93.     INT_VECTOR_DMA1 = _DMA_1_VECTOR,
  94.     INT_VECTOR_DMA2 = _DMA_2_VECTOR,
  95.     INT_VECTOR_DMA3 = _DMA_3_VECTOR,
  96.     INT_VECTOR_FCE = _FCE_VECTOR,
  97.     INT_VECTOR_CAN1 = _CAN_1_VECTOR,
  98.     INT_VECTOR_UART4 = _UART_4_VECTOR,
  99.     INT_VECTOR_UART5 = _UART_5_VECTOR
  100. } INT_VECTOR;
  101. ...


これによると「INT_VECTOR_UART1_RX」や「INT_VECTOR_UART1_TX」は共に「_UART_1_VECTOR」という同じ値の割り込みベクタ番号に定義されています。

今回の場合、「..\target\1_2_5_starterlit_gcc\target_serial.h」において、割り込みベクタ番号を「INT_VECTOR_UART1_RX」や「INT_VECTOR_UART1_TX」とは書かずに「_UART_1_VECTOR」と直に記述しましたが、どちらでも結果は同じです。

ちなみに「_UART_1_VECTOR」の実際の割り込みベクタ番号の値は、これまた分かりにくい場所に…。

このブログの記述通り開発環境を作っていただいた場合は、

「C:\Program Files\Microchip\xc32\v4.30\pic32mx\include\proc\PIC32MX\p32mx570f512l.h」の中の以下の記述にあります。

ここはもう、ツールチェーンのディレクトリですよね。

  1. ...
  2. /* Vector Numbers */
  3. #define _CORE_TIMER_VECTOR 0
  4. #define _CORE_SOFTWARE_0_VECTOR 1
  5. #define _CORE_SOFTWARE_1_VECTOR 2
  6. #define _EXTERNAL_0_VECTOR 3
  7. #define _TIMER_1_VECTOR 4
  8. #define _INPUT_CAPTURE_1_VECTOR 5
  9. #define _OUTPUT_COMPARE_1_VECTOR 6
  10. #define _EXTERNAL_1_VECTOR 7
  11. #define _TIMER_2_VECTOR 8
  12. #define _INPUT_CAPTURE_2_VECTOR 9
  13. #define _OUTPUT_COMPARE_2_VECTOR 10
  14. #define _EXTERNAL_2_VECTOR 11
  15. #define _TIMER_3_VECTOR 12
  16. #define _INPUT_CAPTURE_3_VECTOR 13
  17. #define _OUTPUT_COMPARE_3_VECTOR 14
  18. #define _EXTERNAL_3_VECTOR 15
  19. #define _TIMER_4_VECTOR 16
  20. #define _INPUT_CAPTURE_4_VECTOR 17
  21. #define _OUTPUT_COMPARE_4_VECTOR 18
  22. #define _EXTERNAL_4_VECTOR 19
  23. #define _TIMER_5_VECTOR 20
  24. #define _INPUT_CAPTURE_5_VECTOR 21
  25. #define _OUTPUT_COMPARE_5_VECTOR 22
  26. #define _ADC_VECTOR 23
  27. #define _FAIL_SAFE_MONITOR_VECTOR 24
  28. #define _RTCC_VECTOR 25
  29. #define _FCE_VECTOR 26
  30. #define _COMPARATOR_1_VECTOR 27
  31. #define _COMPARATOR_2_VECTOR 28
  32. #define _USB_1_VECTOR 29
  33. #define _SPI_1_VECTOR 30
  34. #define _UART_1_VECTOR 31
  35. #define _I2C_1_VECTOR 32
  36. #define _CHANGE_NOTICE_VECTOR 33
  37. #define _PMP_VECTOR 34
  38. #define _SPI_2_VECTOR 35
  39. #define _UART_2_VECTOR 36
  40. #define _I2C_2_VECTOR 37
  41. #define _UART_3_VECTOR 38
  42. #define _UART_4_VECTOR 39
  43. #define _UART_5_VECTOR 40
  44. #define _CTMU_VECTOR 41
  45. #define _DMA_0_VECTOR 42
  46. #define _DMA_1_VECTOR 43
  47. #define _DMA_2_VECTOR 44
  48. #define _DMA_3_VECTOR 45
  49. #define _COMPARATOR_3_VECTOR 46
  50. #define _CAN_1_VECTOR 47
  51. #define _SPI_3_VECTOR 48
  52. #define _SPI_4_VECTOR 49
  53. ...


これによると「_UART_1_VECTOR」は「31」となっています。

こちらも、上記のデータシートからの表と一致しますね!

このように、もし新たな割り込みを実装する場合には、割り込みの設定は割り込み番号と割り込みベクタ番号をそれぞれ調べて設定するようにしてください。

面倒だけども…。


●例外ハンドラ

例外ハンドラは、以下の表のものが使用できます。

例外ハンドラ一覧表


今回のサンプルプロジェクトでターミナルから「z」や「Z」を入力して起こる例外は、13番の「Trap exception」例外です。

この設定は「..\arch\pic32mx_gcc\prc_test.h」の以下の記述で設定されています。

  1. ...
  2. #define CPUEXC1                    13        /* ゼロ除算例外 */
  3. #define RAISE_CPU_EXCEPTION        syslog(LOG_NOTICE, "zerodiv = %d", 10 / 0)
  4. ...


ご覧の通り「Trap exception」は、ゼロ除算を行った結果引き起こされるものです。

小文字の「z」と大文字の「Z」の違いは、CPU例外が小文字の場合はカーネル管轄内で、大文字の場合はカーネル管轄外でそれぞれ実行されるということだけです。

各CPU例外の詳細については、PIC32MXのデータシートを熟読していただく必要がありますが、これらが引き起こされた時点で致命的な状況が多く、デバッグでの用途以外、あまり使い道はないでしょう。


●一部サービスコールは未対応

性能評価用システム時刻取得のための「get_utm()」サービスコールは未実装です。


ライセンスについて

このカーネルは「TOPPERSライセンス」で配布しております。

無償ですが、使用に関しては自己責任です。

万が一、このカーネルを商用利用する方は、このリンク先の条項に従ってください。


さて、今回はPIC32MXを取り上げてみました。

「PIC32」と呼べるものは、今回の「MX」他にも「MM」、「MC」、「MK」や「MZ」などがラインナップされています。

これらの「M系」は、全てMIPSアーキテクチャです。

しかし、先ごろ「C系」のPIC32が発表されました。

CM」、「CX」や「CZ」などです。


https://www.microchip.com/en-us/products/microcontrollers-and-microprocessors/32-bit-mcus

PIC32ラインナップ


重要なことは、これらの「C系」PIC32が、遂にARMアーキテクチャになってしまったことです!


う~ん、ARM化の波が遂にここまでも。

世の中何でもかんでもARM一辺倒になって、ホントにいいんでしょうかね?

まあ、プログラマーとしては仕事の面では楽になりますが、趣味の面では退屈だし、寂しく思うのです…。

だいたい、同じARMアーキテクチャで各社しのぎを削っても、横一線で尖った特徴もなくなるので、製品のウリをアピールするのが難しくなると思うのですが。

私は、こういうピーキーなマイコンの方が好きだなぁ…。


そのARMも、いずれは今ホットな「RISC-V」に置き換わってしまうのか?

諸行無常、盛者必衰…。

注目して見ていきましょう!


<終わり>

2023年10月17日火曜日

TOPPERS/ASP - PIC32MX版 その9

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


シリアル通信用の配線の引き出し

さて、いよいよパソコンと「PIC32MX1/2/5 Starter Kit」評価ボードを接続します。

接続した結果は以下のような感じになりますが…。

パソコンと「PIC32MX1/2/5 Starter Kit」評価ボードの接続


まず、USBの方はデバッガと接続するためのものですが、問題はそれ以外の電線。

これらは「TOPPERS/ASP PIC32MX版」のサンプルプログラムで使用するデバッグメッセージ用のシリアル通信線です。

しかし「PIC32MX1/2/5 Starter Kit」評価ボードには、既に最初からD-SUBコネクタが実装されていますよね。

実は、これはシリアル通信のためのものではなく、CANのためのD-SUBコネクタなのです。

では、シリアル通信のためのコネクタが何処にあるかというと、実は、この評価ボードでは用意されていないのです。

そのため、シリアル通信を使用するには必要な信号線を評価ボードから引き出してあげる必要があるのです。

さて、どこから引き出しましょうか?

以下の「PIC32MX1/2/5 Starter Kit」評価ボードの回路図を御覧ください。

74ピンの「SOSC0/T1CK/RC14」と73ピンの「SOSC1/RC13」に注目してください。

これらのピンは「Y2」というクリスタルに接続されていますね?

しかしながら「DNP」とあるように、どうやらこのクリスタルは実装されていないようです。

「PIC32MX1/2/5 Starter Kit」評価ボードの回路図


そして、74ピンの「SOSC0/T1CK/RC14」と73ピンの「SOSC1/RC13」は、レジスタの設定により、それぞれシリアル通信の受信(RXD)と送信(TXD)端子として使用することができるようです。

では早速、そのレジスタの設定をしなくちゃ!

…って、実はもう設定できているんです

思い出してください。

TOPPERS/ASP - PIC32MX版 その6」の投稿の下の方で既にやっています。

こんな感じで雛形プロジェクトで設定しましたよね?

ピンの設定


この設定により、74ピンの「SOSC0/T1CK/RC14」と73ピンの「SOSC1/RC13」は、それぞれシリアル通信の受信(RXD)と送信(TXD)端子として使用することになります。

そして、この雛形プロジェクトから吐き出されたソースコードを前回「TOPPERS/ASP PIC32MX版の」ソースツリーにコピーしたため、これから動かすサンプルプログラムは、この設定通りに動くことになるのです。

では、シリアル通信に必要な信号線を評価ボードから引き出しましょう。

必要な信号線は、受信(RXD)、送信(TXD)、そしてGNDの計3本ですね。

受信(RXD)、送信(TXD)は、基板下方の未実装の「Y2」クリスタルのホール(穴のことね)をそのまま使いましょうか。

GNDは、基板上方にパッドがあります。

「PIC32MX1/2/5 Starter Kit」評価ボード


未実装の「Y2」クリスタルのホールから受信(RXD)と送信(TXD)を引き出しましょう。

こんな感じ。

受信(RXD)と送信(TXD)の引き出し


続いて、GNDも引き出します。

こんな感じ。

GNDの引き出し


これで、必要な信号線の引き出しは完了です。


プログラムの転送とデバッグ

引き出した線は、パソコンのシリアルポートに接続します。

しかしながら、今どきシリアルポートが備えられているパソコンは稀でしょう。

そこで、以下のような市販のUSB/シリアル通信変換ケーブルを用意します。

市販のUSB/シリアル通信変換ケーブル


USB/シリアル通信変換ケーブルのコネクタの形状によりますが、引き出した信号線は圧着端子などで加工する必要があるかもしれません。

USB/シリアル通信変換ケーブル側の配線は、上からTXDRXDGNDの順番でこんな感じ。

これでシリアルポートが使えるようになりました。

USB/シリアル通信変換ケーブル側の配線


続いて、このUSB/シリアル通信変換ケーブルをパソコンに繋いでみましょう。

パソコン上でデバイスマネージャーを開きます。

ポート(COMとLPT)のサブカテゴリーとして「USB Serial Port」というポートが追加されているはずです。

(私のパソコンでは、「COM15」として認識されていますね。)

このポート番号、覚えておいて下さい。

デバイスマネージャー


ここで、ターゲットとパソコンもUSBケーブルで繋げちゃいましょ。

ご覧の通り、通電します。

ターゲットとパソコンの接続


次に「TeraTerm」をご用意ください。

インストールしていない方は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「TeraTermの導入」の項目を参考にしてください。

もちろん、シリアル通信のターミナルであれば、他のものもお使いいただけます。

今回のTOPPERS/ASPのサンプルプログラムは、シリアル通信のメッセージを出力しますので、先程「USB Serial Port」として認識されたシリアルポート番号でターミナルを立ち上げておきましょう。

設定は、こんな感じです。

ボーレートは「9600」です。

(私のパソコンは、USB/シリアル通信変換ケーブルをCOM15として認識していました。)

TeraTerm - シリアルポートの設定


さて、「MPLAB X IDE」に戻りましょう。

「MPLAB X IDE」でプロジェクトを作成した状況から始めます。

画面左上の「Projects」リストにおいて「OBJ」プロジェクトが選択されていることを確認してください。

「MPLAB X IDE」 - 1


次に、プログラムの実行を行います。

画面上部のデバッグボタンをクリックします。

「MPLAB X IDE」 - 2


デバッガの起動には、意外と時間がかかります。

もしこの時、以下のようなエラーが表示されてしまったら、それはサンプルプログラムがビルドされていない証拠です。

「MPLAB X IDE」 - 3


「Eclipse」の方で「Makeターゲット」タブから「depend」、「all」の順にダブルクリックして、ビルドを終わらせましょう。

「Eclipse」


無事にデバッガが起動すると、立ち上げておいたターミナルに以下のような表示が出ていると思います。

TOPPERS/ASPカーネルとそのサンプルプログラムの転送と実行に成功です。

TeraTermの表示


ブレークポイントを試してみましょう。

動作中のプログラムを停止します。

画面上部の「」ボタンをクリックします。

「MPLAB X IDE」 - 4


ブレークポイントを仕掛けましょう。

エクスプローラーで「TOPPERS/ASP PIC32MX版」のソースツリーの「OBJ」ディレクトリの中にある「sample1.c」をドラッグし「MPLAB X IDE」にドロップして、ソースコードを表示します。

「MPLAB X IDE」 - 5


このソースコードの丁度中盤くらい、メインタスクの始めに仕掛けましょうか。

ブレークポイントは、ソースコードビューの左端をクリックするとが表示され、セットされていることを表します。

仮に、これを再びクリックするとブレークポイントが解除されも消えます。

「MPLAB X IDE」 - 6


では、ブレークポイントを仕掛けた状態で、プログラムを再び実行してみます。

上手く引っかかってくれるでしょうか…。

「MPLAB X IDE」 - 7


以下のようにプログラムが停止すれば成功です!

ここからは、「F8」キーでステップオーバー、「F7」キーでステップインなど、おなじみの操作が使用できます。

因みに、ステップオーバーやステップインなどを行っている時に命令が飛んでしまったり前後したりする場合は、最適化のせいです。

デバッグ時は、このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「サンプルプログラムのデバッグ」の項目を参考に最適化を解除しましょう。

「MPLAB X IDE」 - 8


今回の「TOPPERS/ASP PIC32MX版」は、やることが多くて大変でした~。

お疲れ様でした!!

次回はいよいよ最終回。

サンプルプログラムの動きの説明や、PIC32MX版カーネルの詳細な情報や注意事項などを書いていきます。


<続く>

2023年10月6日金曜日

TOPPERS/ASP - PIC32MX版 その8

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


プロジェクトの作成(Eclipse編)

前回までの作業で、開発環境をインストールし、PIC32MX版TOPPERS/ASPのソースコードをダウンロードし、それをコマンドラインでビルドするまでを行いました。

このままずっとコマンドラインで作業するのもシンドいので、Eclipse上でビルドが行えるようにプロジェクトを作成しましょう。

このページ(TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトのデバッグ)の「プロジェクトの作成」および「プロジェクトのクリーンとビルド」の項目を参考にプロジェクトを作成してください。

デバッガの登録」の項目は読み飛ばしてください。

今回はデバッグ作業をこのEclipse上で行わず、次にプロジェクトを作成する「MPLAB X IDE」上で行う方針なので、この作業は必要ありません。

Eclipseの画面右側に以下のようなアイコンが表示されて、これらをダブルクリックすることによりビルドができるまでを確認してください。

Eclipse


プロジェクトの作成(MPLAB X IDE編)

さて、もう一方のIDEである「MPLAB X IDE」用のプロジェクトも作りましょう。

とはいえ、既にこのプロジェクトは「TOPPERS/ASP PIC32MX版」のソースツリーのディレクトリの中に既に用意してあります。

OBJ.X」というディレクトリがそれです。

「asp_pic32mx_gcc」や「asp_pic32mx_gcc_master」を「asp_1.9.2」に改名した場合。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2

「OBJ.X」ディレクトリ


それでは「MPLAB X IDE」を起動させましょう!

起動させた場合、画面左上の「Projects」タブには、以前作成した雛形プロジェクトを示す「Hinagata」のみが登録されていることを確認してください。

「MPLAB IDE」 - 1


件の「OBJ.X」プロジェクトをここに登録したいと思います。

画面左上の「File」メニューから「Open Project...」項目をクリックしてください。

「MPLAB IDE」 - 2


以下のようなダイアログが表示されますので「OBJ.X」のディレクトリを選択してやってから「Open Project」ボタンをクリックします。

「Open Project」ダイアログ


すると、画面左上の「Projects」タブには、新たに「OBJ」というディレクトリが追加されていることが確認できるはずです。

「MPLAB IDE」 - 3


ここで注意していただきたいことがあります。

このプロジェクトのビルド対象は「OBJ.X」ではなく、同じディレクトリにある「OBJ」ディレクトリ以下のソースコードです。

なので、以下のように「Source Files」をクリックすると「OBJ」ディレクトリ以下のソースコードのリストが展開されると思うでしょう?

「MPLAB IDE」 - 4


しかしながら、今回用いた方法ではそのようにはなりません。

「Source Files」をクリックしても何も起こりません。

その上の「Header Files」も同様です。

その理由は、今回の方法は、雛形プロジェクトの時とは異なり「MPLAB X IDE」にとっては通常のプロジェクト作成手順ではないためです。

今回の場合「MPLAB X IDE」を使うのは、単にデバッガを操作するためであり、ソースコードの編集などはEclipseの方で行う方針なので、ソースコードの閲覧はEclipseの方で行ってください。

でも、デバッガのみを使う場合でも、ブレークポイントを仕掛ける際にソースコードを表示しなければなりませんよね。

では、どうするか?

その場合は、以下の方法が簡単です。

たとえば、サンプルプログラムのメインのソースコードである「sample.c」を「MPLAB IDE」で表示したい場合、以下のように「OBJ」ディレクトリの中にある「sample.c」をドラッグして「Start Page」タブにドロップしてみてください。

「MPLAB IDE」 - 5


すると、新たに「sample.c」タブが作成され、「sample.c」の内容が表示されます。

「MPLAB IDE」 - 6


この方法で「OBJ」ディレクトリ内のソースコードを閲覧することも出来ますし、ソースコードの中の任意の行にブレークポイントを仕掛けることもできます。

同じ操作を繰り返せば、複数のソースコードの表示も可能です。

ちょっと不便かもしれませんけど…。

申し訳ないです。


ともあれ、これで「MPLAB X IDE」の方のプロジェクトも準備ができました。

あとは、ビルドしたプログラムを実機に転送して実行させて、デバッグの方法を確認するだけです。

次回は、いよいよそれを行っていきましょう!


<続く>

2023年9月22日金曜日

TOPPERS/ASP - PIC32MX版 その7

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


Harmony Frameworkのコピー

既にインストール済みの「MPLAB Harmony」のディレクトリと、「TOPPERS/ASP PIC32MX版」のソースツリーのディレクトリを同時に2つエクスプローラーで開いておきましょう。

記事通りに作業すると、「MPLAB Harmony」は以下のディレクトリに保存されているはずです。


C:\microchip\harmony

「MPLAB Harmony」のディレクトリ - 1


同じく、TOPPERS/ASPのソースツリーは以下のディレクトリに保存されているはずです。

「asp_pic32mx_gcc」や「asp_pic32mx_gcc_master」を「asp_1.9.2」に改名した場合。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2

TOPPERS/ASPソースツリーのディレクトリ - 1


さて、2つ開いたエクスプローラーでそれぞれ以下の場所を表示するようにします。

まず、「MPLAB Harmony」の方は、以下のディレクトリへ移動させます。


C:\microchip\harmony\v2_06

「MPLAB Harmony」のディレクトリ - 2

次に、TOPPERS/ASPのソースツリーの方は、以下のディレクトリへ移動させます。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\arch\pic32mx_gcc

TOPPERS/ASPソースツリーのディレクトリ - 2


「MPLAB Harmony」の方のディレクトリに注目!
以下のディレクトリを確認して下さい。


●framework

「MPLAB Harmony」のディレクトリ - 3


この「framework」ディレクトリの中には「MPLAB Harmony」で使用できる様々な周辺機器のデバイスドライバのソースコードやヘッダーファイルが大量に入っています。

「TOPPERS/ASP PIC32MX版」で使用するタイマーやシリアル通信のデバイスドライバもこの中に含まれています。

この「framework」ディレクトリを開いてあるもう一方のエクスプローラー、TOPPERS/ASPのソースツリーの方にコピーします。

結果、TOPPERS/ASPのソースツリーの方は、以下のようになりましたか?

TOPPERS/ASPソースツリーのディレクトリ - 3


これで、HarmonyのFrameworkのソースコードの回収は完了です。


雛形プロジェクトで生成したソースコードのコピー

現在、2つ開いているエクスプローラーでそれぞれ以下の場所を表示するようにします。

「MPLAB Harmony」の方は、以下のディレクトリへ移動させます。

ここは、既に作成した雛形プロジェクトのソースが格納されている場所です。


C:\microchip\harmony\v2_06\apps\Hinagata\firmware\src

「MPLAB Harmony」のディレクトリ - 4


次に、TOPPERS/ASPのソースツリーの方は、以下のディレクトリへ移動させます。


C:\cygwin64\home\<ユーザー名>\asp_1.9.2\target\1_2_5_starterkit_gcc

TOPPERS/ASPソースツリーのディレクトリ - 4


「MPLAB Harmony」の方(ていうか、雛形プロジェクトの方)のディレクトリに注目!

以下の3つのディレクトリとソース/ヘッダーファイルを確認して下さい。


●system_config

●app.c

●app.h

「MPLAB Harmony」のディレクトリ - 5


雛型プロジェクトは、今回使用する「PIC32MX1/2/5 Starter Kit」評価ボードで動作する基本的な設定や定義を行うソースコードを生成させるために作成しました。

これらのディレクトリやファイルは、まさにその生成されたソースコードというわけです。

この3つを開いてあるもう一方のエクスプローラー、TOPPERS/ASPのソースツリーの方にコピーします。

結果、TOPPERS/ASPのソースツリーの方は、以下のようになりましたか?

TOPPERS/ASPソースツリーのディレクトリ - 5


これで、雛形プロジェクトによって生成されたソースコードの回収は完了です。


コマンドラインでのビルド

さて、これで全ての準備は整いました。

早速ビルドしてみましょう。

ここまで長かったですね!

お疲れ様です。

Cygwinを開いて、TOPPERS/ASPソースツリーの場所まで移動しましょう。


$ cd asp_1.9.2/


次にその直下の「OBJ」ディレクトリに移動します。


$ cd OBJ/


コンフィギュレーターのパーミッションを実行可能に設定します。


$ chmod 755 ../cfg/cfg/cfg.exe


ここまで、大丈夫ですか?

Cygwinターミナル - 1


そうしたら、プロジェクトのコンフィグファイル(sample1.cfg)の情報を元に、OSに必要な定義を記したソースコード(「kernel_cfg.c」と「kernel_cfg.h」)を生成します。


$ make depend


以下のような表示にならずエラーが出力される場合は、残念ながらこれまでの作業に誤りがあります。

お手数ですが、最初からご確認を!

Cygwinターミナル - 2


ここまで上手くいったら、本番のビルド。

以下のコマンドを実行します。


$ make all


以下のように無事にビルドが通ったでしょうか?

Cygwinターミナル - 3


今回はここまで!

長々と面倒な作業でしたが、お疲れ様でした。

ここまで付いてきてくれた方がいたら、本当にありがとうございました。


コマンドラインではビルドが通るようになりましたので、次回はIDE(統合開発環境)で開発できるようにプロジェクトを作りましょう。

今回は、デバッガを使うための純正IDEである「MPLAB X IDE」とコーディングとビルドを行うための「Eclipse」、2つのプロジェクトを作らなければなりません。

またまた面倒ですが、どうかお付き合いを!


2023年9月1日金曜日

TOPPERS/ASP - PIC32MX版 その6

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


雛形プロジェクトの作成

まずは「MPLAB X IDE」を起動して下さい。

前回から続いて作業している場合は、すでに起動していますかね。

画面上部の「File」、「New Project...」メニューを順にクリックしていきます。

「MPLAB X IDE」 - 1


以下のような「New Project」ダイアログが表示されます。

ここから「Categories」リストから「Microchip Embedded」を、「Projects」のリストから「32-bit MPLAB Harmony Project」をそれぞれ選択して、ダイアログ下方の「Next >」ボタンをクリックしてください。

「New Project 」ダイアログ - 1


すると、以下のような表示に切り替わります。

ここでは「Harmony Path:」のテキストボックスの右側のディレクトリボタンをクリックしましょう。

「New Project 」ダイアログ - 2


ディレクトリの選択ダイアログが表示されたはずです。

ここでは、先程インストールした「MPLAB Harmony」の場所を選択しましょう。

特に変わった操作をしていなければ、その場所は以下のパスになります。

このパスを指定したあとは「開く」ボタンをクリックです。


C:\microchip\harmony\v2_06

ディレクトリの選択ダイアログ


元の「New Project」ダイアログに戻ります。

ここで思い出してください。

現在は、TOPPERS/ASPのプロジェクトを作成するのではなく、そのために必要な「MPLAB Harmony」のソースコードを出力させるための雛形プロジェクトを作成する作業をしています。

したがって、今回作成するプロジェクト名、すなわち「Project Name:」のテキストボックスには「Hinagata」とでも入力しておきましょう。

「New Project 」ダイアログ - 3


続いて「Target Board」のコンボボックスでは、今回使用する評価ボードの「PIC32MX1/2/5 Starter Kit」を選択します。

「New Project 」ダイアログ - 4


以下のように正しく設定できたら、ダイアログ下方の「Finish」ボタンをクリック!

「New Project 」ダイアログ - 5


なにか「MPLAB X IDE」でワチャワチャ始まりました!

「MPLAB X IDE」 - 2


画面下方の「Output」エリアでは、次々とメッセージが表示されていますね。

「仕事してます」感バリバリ。

「MPLAB X IDE」 - 3


この処理の終盤に、以下のようなダイアログが表示されたら「Save」ボタンをクリックしましょう。

「Save Configuration」ダイアログ - 1


さて、処理が終了すると、メインの画面は以下のような表示になっていると思います。

ここで「Harmony Framework Configurarion」の項目をクリックしてください。

「MPLAB X IDE」 - 4


「Harmony Framework Configurarion」の項目が展開されて、更に色々な項目が出てきましたね。

その中で「Drivers」という項目があるので、これをクリックして展開します。

「MPLAB X IDE」 - 5


TOPPERS/ASPは、外部のハードウェアとしてOSタイマーである「Timer」と、デバッグシリアルに使用する「USART」の2つが必要です。

(正確には、「割り込み」もそうですが、ここでは特に意識する必要はありません。)

では、まずOSタイマーに使用する「Timer」の設定からいきましょう。

展開された「Drivers」という項目の中に「Timer」という項目がありますので、これをクリックして展開します。

「MPLAB X IDE」 - 6


すると、なにやら細々した項目が展開されましたね?

これを以下の通りに設定してください。

間違えると、後々面倒になりますのでここは慎重に!

「Timer」の設定


次にデバッグシリアルに使用する「USART」の設定にいきましょう。

展開された「Drivers」という項目の中に「USART」という項目がありますので、これをクリックして展開します。

「MPLAB X IDE」 - 7


またまた細々した項目が展開されました。

これを以下の通りに設定してください。

こちらも間違えないよう慎重にお願いします!

「USART」の設定


まだまだ、作業は続きます。

次は、PIC32MXマイコンのピンの設定です。

メインの画面のタブを現在の「Options」から「Pin Disgram」に切り替えてください。

「MPLAB X IDE」 - 8


すると以下のようにマイコンの絵が出てきましたね。

この中で74番ピン「RC14」と73番ピン「RC13」に注目してください。

これらのピンは、現在のデフォルト状態では何も機能が割り振られていない(GPIO入力?)ので、これらをUSART、いわゆるシリアル通信のためのRX(受信)とTX(送信)として使えるように設定します。

ピンの設定 - 1


まずは、74番ピン「RC14」をUSARTのRX(受信)に設定します。

ピンの部分をクリックすると、ドロップダウンリストが表示されます。

ここでは、このピンに割り当て可能な機能が列挙されます。

今回はUSARTのRX(受信)、すなわち「U1RX」を選択します。

ピンの設定 - 2


次は、73番ピン「RC13」をUSARTのTX(送信)に設定します。

同じ要領でUSARTのTX(送信)、すなわち「U1TX」を選択します。

ピンの設定 - 3


以下のように、74番ピンに「U1RX」、73番ピンに「U1TX」と、それぞれ表示が変わったでしょうか?

ここはミスるとシリアル通信ができなくなるなど、後々非常に厄介なので必ずご確認を!

ピンの設定 - 4


さて、以上で全ての設定が終了です。

メインの画面の左上のフロッピーディスクのマークをクリックして設定を保存しましょう。

「MPLAB X IDE」 - 9


以下のようなダイアログが表示されたら「Save」ボタンをクリックして、この雛形プロジェクトを保存しましょう。

「Save Configuration」ダイアログ - 2


もしこの先、無事に「TOPPERS/ASP」の起動に成功して、イザ何かを作ろう!となった場合、今回追加した「MPLAB Harmony」ライブラリだけでは絶対に足らなくなることでしょう。

評価ボードにセンサーを繋げて、そのセンサーとSPIで通信するとか、AD変換を使いたいだとか…。

その際には、再び今回の手順で必要になった「MPLAB Harmony」ライブラリを追加して、ソースコードを吐き出させて、更にそれを「TOPPERS/ASP」のソースツリーにコピーしなければなりません。

そういう意味では、この雛形プロジェクト、結構使用頻度が高くなるかもしれませんよ?

大切に取っておきましょう!


ではいよいよ、この雛形プロジェクトからソースコードを吐き出させてみましょう。

先程のフロッピーディスクのマークの右側、「歯車→Code」というアイコンのボタンをクリックします。

「MPLAB X IDE」 - 10


以下のような「Generate Project」ダイアログが表示されるので「Generate」ボタンをクリック!

「Generate Project」ダイアログ - 1


以下のように雛形プロジェクトからソースコードが生成されていきます。

「Generate Project」ダイアログ - 2


ソースコードの生成が終わると「Generate Project」ダイアログは自動的に消えます。

これで雛形プロジェクトから必要なソースコードを抽出できました。

雛形プロジェクトのソースコードは、以下のディレクトリに出力されています。


C:\microchip\harmony\v2_06\apps\Hinagata


どんなものが出力されているのか?

ちょっと見てみるのも良いでしょう。


さて次回は、この雛形プロジェクトから必要なソースコードを「TOPPERS/ASP PIC32MX版」のソースツリーにコピーし、コマンドのラインでOSのビルドを透すところまでやっていきましょう!

ここまで出来てしまえば、面倒くさいのはもう少しで終わりです。

最後までお付き合いいただけると嬉しいです。


<続く>

TOPPERS/ASP - Arduino UNO R4版 その7

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 プログラムの転送とデバッグ ターゲットの「Arduino UNO R4」とデバッガの「E2 emulator Lite」を 前々回 作成したケーブルで接続します。 こんな感じ。 これからTOPPE...