www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

首頁 > 評測 > One to Many-多核心編程初探——CY8CKIT-062-BLE評測之二

One to Many-多核心編程初探——CY8CKIT-062-BLE評測之二

  • 作者:
  • 來源:21ic
  • [導讀]
  • 任務(wù)分配與同步是多核編程的最重要問題

文件:cy_ipc_sema.c, cy_ipc_sema.h

此外PDL中還包含有IPC的配置模版文件:cy_ipc_config.c, cy_ipc_config.h,這兩個文件會在每個使用了IPC的工程中拷貝一份以便該項目配置IPC功能.

image7.png

圖 IPC硬件應(yīng)用結(jié)構(gòu)

從硬件的角度來講,IPC通信分5步走:

1. 發(fā)送的內(nèi)核獲取一個通道;

2. 將數(shù)據(jù)放入通道;

3. 發(fā)送內(nèi)核產(chǎn)生一個通知中斷;

4. 接收內(nèi)核獲取發(fā)送內(nèi)核的標記并取走數(shù)據(jù);

5. 接收內(nèi)核產(chǎn)生一個釋放中斷

從硬件上來講,傳輸?shù)臄?shù)據(jù)最大為32bit的word,但是如果使用管道API,真正傳輸?shù)臄?shù)據(jù)為指向任意數(shù)據(jù)的指針.

管道層

管道層與桌面/服務(wù)器系統(tǒng)的管道十分類似,就是建立起一個雙向的通信連接.每個管道有兩個端點,每個端點位于不同內(nèi)核.每個端點都有自己的通道與中斷.

image8.png

圖 管道層操作

就PSOC6雙核處理器來講,一共有16個IPC通道和相應(yīng)的IPC中斷.0-7的通道與中斷留給系統(tǒng)用,其余給應(yīng)用程序使用.

信號旗層

Semaphore就是上一章的例子使用的用來共享,同步資源使用的API.(另:Semaphore有很多種中文翻譯版本,信號旗是作者認為最合理的翻譯.)

這里把上一章的例子中的代碼簡要分析一下子:

要初始化Semaphore

/* Place your initialization/startup code here (e.g. MyInst_Start()) */

/* Initialize the IPC semaphore subsystem. This must done by this CPU, with definition of

semaphore array address, before the other CPU starts using the semaphore system. */

if (Cy_IPC_Sema_Init(CY_IPC_CHAN_SEMA, sizeof(myArray) * 8ul, myArray) != CY_IPC_SEMA_SUCCESS)

{

handle_error();

}

這里初始化的是128bit的semaphore,事實上這個大小只受SRAM大小的限制.注意多個內(nèi)核中只能有一個內(nèi)核運行這個函數(shù),一般而言是Cortex M0+來運行這段代碼.

之后獲取Handle,以后的應(yīng)用要使用:

myIpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(MY_IPC_CHANNEL);

至此為止就可以喚醒另外一個內(nèi)核了:

Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR);

對于Cortex M4這邊的初始化代碼:

if (Cy_IPC_Sema_Init(CY_IPC_CHAN_SEMA, (uint32_t)NULL, (uint32_t *)NULL) != CY_IPC_SEMA_SUCCESS)

{

handle_error();

}

myIpcHandle = Cy_IPC_Drv_GetIpcBaseAddress(MY_IPC_CHANNEL);

注意用來存儲Semaphore的地址那里是空的.另外兩邊的通道號當然要是一樣的.

這樣兩邊都可以開始使用這個Semaphore了.具體如何使用代碼請參考Github頁面.

結(jié)論與資源

嵌入式系統(tǒng)多核心并行編程是個較新的話題, 作者對其理解還不深刻. 文章肯定不少缺漏之處, 請讀者多多指教.

另外本文所配的代碼請于此Git頁面下載:

https://github.com/zhanzr/cy8ckit-demo.git

正在本文寫作的期間,Cypress公司又推出了PSoC Creator 4.2的Beta 2版本,感興趣的同學可以去下載看看新內(nèi)容.

https://community.cypress.com/servlet/JiveServlet/downloadBody/14408-102-3-15787/PSoCCreatorSetup_4.2_b574.exe.zip

上述Github中除了上述的Semaphore的例子之外,還有本人所作的雙內(nèi)核的Benchmark的程序.其中Dhrystone得分為:

Both Cortex M0+ and Cortex M4 run @ 100MHz. ARMGCC 5.4.1, -O3, Newlib-Nano, Without float format printf. UART 115200 Retarget IO.

CM0+: Microseconds for one run through Dhrystone: 7.35 Dhrystones per Second: 136008.16

CM4: Microseconds for one run through Dhrystone: 4.97 Dhrystones per Second: 201156.66

為了便于比較,兩個內(nèi)核都設(shè)定為100MHz.因為這種評測并非能準確反映所評測內(nèi)核的真實性能,故此僅僅作為參考,不做過多解讀.相關(guān)代碼,感興趣的同學可以參考.

此篇分享到此為止,多謝閱讀!

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論