使用W800 SDK的過程中有幾個問題,請教一下,問題如下:
1、封裝後FREERTOS的和queue隊列相關的函數,實際上把原函數裡面的傳輸結構體隊列的功能(值傳遞,不是指針傳遞)取消了,好像只能傳輸4個字節的整型值(或者說是指針也可以),以後看能不能補上這個補丁;
2、時鐘使能裡面有GPIO使能選項,沒有看到具體使能的代碼,請問在哪裡使能的?這個使能起到什麼作用?好像IO使用一直都可以。
3、內部RAM分為160K和128K兩個部分,其中128K是供SDIO/SPI/UART使用做為數據緩沖。軟件編譯後RAM使用大概150K(bss段大小),這個150K是指160K裡面的?還是兩部分RAM使用量總和?那128K是不是只能給三個指定外設使用?使用SDIO/SPI/UART這三個外設編程的時候,什麼時候使用的是這128K的RAM?三個外設本身內部指定的收發緩沖區好像也沒多少,遠達不到這麼大內存。
4、內核支持DSP和浮點處理,這個使用的時候需要額外指定嗎?寫一段代碼,怎麼知道是使用內核的硬件支持還是軟件計算?
5、有沒有不修改LD文件,直接指定文件裡某個函數在內存運行的簡單方法?比如在函數前面簡單加個前綴?麻煩舉個例子。
多謝!
非常感謝你使用W800芯片,針對你疑惑做如下解答
1、封裝只是為了SDK 是更好符合當時的軟件設計架構<說白了就是更方便當時軟件設計開發^^>,如果你有其他需求的話,可以調用Freertos 本身的API 接口也是可以的。
2、針對這個問題的話使用,在SDK 的main 函數的開始是有使能的,你可以查閱下代碼看下。
3、這個的話你看鏈接文件的話,實際上定義RAM 的話是定義在一起的,軟件上來說的話並沒有明確的限制,你可以當作一塊RAM使用,ld文件中也是這樣用的。
你說的128K 由於跟那些外設掛載在同一個總線上,是為了數據交換方便,與CPU 之間是有AHB2AHB 橋做分界線,128KB作為CPU來說是都可以直接訪問的,作為程序執行本身來說
並沒有什麼太大的區別,128KB 只是告訴開發者某些外設一定可以用作緩沖區,同時也表明剩下的160KB 這些外設不一定可以使用。
4、針對浮點運算的話,你如果使用CDK 編譯的話在工程設置選項裡有 -mhard-float 選項,是默認使用的硬件浮點處理,這個其實是對編譯器的一種限制行為,如果在linux 下編譯的話對應的makefile 裡面也會有的。DSP的話也是在工程配置選項,是有鏈接DSP的庫的,你必須調用對應的API 才可以使用DSP指令,或者你直接調用 DSP 匯編指令達到你的功能,這些都是可以的。
5、這個問題,沒有人規定必須修改LD 文件才能使得某個函數在RAM 中運行啊,取巧的方法就是直接將你的函數放在 data 段裡面,因為data 段中的數據一定在RAM 中,做法也是比較簡單的,
只需要在對應的函數前面加上限定符就OK attribute ((section(".data")))《論壇下劃線不顯示》,需要注意的是,被修飾的函數體裡面不能調用存放在FLASH 中的函數接口。W800的編譯環境就是基於gcc 編譯鏈去做的gcc ld 那一套完全是適用的。
非常感謝ZYQ的熱心回答!!!