CubeIDEでのコンソールへのデバッグ出力(Macでは不完全)

推奨はUART使うらしいですが、簡単に実行するにはデバッグコンソールに出したいよね、ということでやってみたけど限定的にしか使えないから補助的な使い方になりそうだ

<環境>

・M4 MacBook

・CubeIDE 1.19.0

・STM32F401re

 

<手順>

以下にわかりやすく手順が記されていたので実行してみた

STM32CubeIDEでprintf【SWO編】

SWV(Serial Wire Viewer)を有効にする、SWV経由でデバッグコンソール(SWV ITM Data Console)に出力ということのようらしい

/* USER CODE BEGIN 4 */
int _write(int file, char *ptr, int len)
{
  int DataIdx;
  for(DataIdx=0; DataIdx<len; DataIdx++)
  {
    ITM_SendChar(*ptr++);
  }
  return len;
}
/* USER CODE END 4 */

int _write()関数の実装が必要、実は元の実装がweak指定でそのオーバーライド関数になってます

ITM Stimulus ポートにチェック、このポートを使うらしい

デバッグ用のprintf文は二箇所に入れてみた

  /* USER CODE BEGIN 1 */
	printf("---------------0078\r\n");
  /* USER CODE END 1 */

  /* USER CODE BEGIN WHILE */
	while (1) {
		if (adc_conv_complete_flag == 1) {
			adc_conv_complete_flag = 0;
			printf("---------------0111\r\n");
			// delay for 500 Milliseconds
			//HAL_Delay(500);
		}
	}
    /* USER CODE END WHILE */

埋め込みは、このプロジェクトの中のソースに、

https://isehara-3lv.sakura.ne.jp/blog/wp-admin/post.php?post=5058&action=edit

なぜおまじないのような”———“が入っているか、それはApple silicon(Intelでも同じかも)のMacではST-LINKの動作がイマイチ不安定で、

終わりの方の文字しか出力されない現象、ループ中では全部出力されてるけどもね、デバッガで変数の値を見れる環境ならば、最低限ここは通ったよという行数情報だけでも良さそうだからこうやってみた、但しwhile()中では出力されない時とまとめて二行出力される時とかあって不安定な雰囲気

FreeRTOSの場合には、タスク優先度考慮必要でちょっと違うみたいだね

 

admin

コメントを残す