[[PSoC4]] #contents 2015/06/07からのアクセス回数 &counter; ** 参考資料 [#t3d33faf] [[基板付き体験編 ARM PSoCで作るMyスペシャル・マイコン>http://shop.cqpub.co.jp/hanbai/books/48/48171.html]] に倣って、LEDチカチカ(FreeRTOS版)を試してみます。 ** FreeRTOSのダウンロード [#k67bc91b] CypressのフォーラムPSoC4からFreeRTOSDemo.zipをダウンロードします。 - http://www.cypress.com/?app=forum&id=4749&rID=89893 ** プロジェクトの作成 [#ie084e6d] [[PSoC4/LEDチカチカ(ソフト版)]]と同じようにPSoC4_LED_FreeRTOSを作成し、LEDの配置とシステムクロックをセットします。 - プロジェクトフォルダーにFreeRTOSCofnig.hをコピー - プロジェクトフォルダーにFreeRTOSDemoのFreeRTOSをコピー - プロジェクトにFreeRTOS/src, FreeRTOS/includeフォルダーを作成 - FreeRTOSのsrc/, include/以下のファイルをプロジェクトに追加 *** main.c [#ha29bf3a] main.cを以下の様に書き替えます。 #pre{{ #include <project.h> #include <FreeRTOS.h> #include <task.h> // Define Prototype void prvHardwareSetup(); /* --------------------------------------------------------------------------- * FreeRTOS support and configuration functions * --------------------------------------------------------------------------- */ void prvHardwareSetup( void ) { /* Port layer functions that need to be copied into the vector table. */ extern void xPortPendSVHandler( void ); extern void xPortSysTickHandler( void ); extern void vPortSVCHandler( void ); extern cyisraddress CyRamVectors[]; /* Install the OS Interrupt Handlers. */ CyRamVectors[ 11 ] = ( cyisraddress ) vPortSVCHandler; CyRamVectors[ 14 ] = ( cyisraddress ) xPortPendSVHandler; CyRamVectors[ 15 ] = ( cyisraddress ) xPortSysTickHandler; } void vApplicationStackOverflowHook( xTaskHandle pxTask, signed char *pcTaskName ) { /* The stack space has been execeeded for a task, considering allocating more. */ taskDISABLE_INTERRUPTS(); for( ;; ); } void vApplicationMallocFailedHook( void ) { /* The heap space has been execeeded. */ taskDISABLE_INTERRUPTS(); for( ;; ); } // define user function values and prototypes #define TASK_STACK_LED 128 #define TASK_PRIORITY_LED (tskIDLE_PRIORITY +1) void Task_LED(void *pvParameters); int main() { prvHardwareSetup(); CyGlobalIntEnable; xTaskCreate(Task_LED, \ (signed portCHAR *) "LED", \ TASK_STACK_LED , \ NULL, \ TASK_PRIORITY_LED, \ NULL); vTaskStartScheduler(); while(1) continue; return 1; // We should never reach this } // Task : LED void Task_LED(void *pvParameters) { const portTickType xDelay = 500 / portTICK_RATE_MS; // 500 msの時間定義 while(1) { LED_Write(~LED_Read()); vTaskDelay(xDelay); } } }} *** 最終ビルドと書き込み [#o120cf46] 最後にもう一度ビルドします。以下の様にSRAMが90.7%と結構逼迫していますが、何とか動きました。 #pre{{ Flash used: 4566 of 32768 bytes (13.9%). SRAM used: 3716 of 4096 bytes (90.7%). Stack: 1024 bytes. Heap: 128 bytes. }} 最後にDebug→Programでプログラムを書き込みます。 &ref(th_PSoC4_Pioneeer_LED_FreeRTOS.jpg); 作成したプロジェクトファイルをZIPにまとめました。 - &ref(PSoC4_LED_FreeRTOS.zip); ** コメント [#fbdc4c12] #vote(おもしろかった[0],そうでもない[0],わかりずらい[0]) #vote(おもしろかった[1],そうでもない[0],わかりずらい[0]) 皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。 スパム防止に画像の文字列も入力してください。 #comment_kcaptcha