[[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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc