本文介紹zynq中使用FreeRTOS的空閑鉤子函數(shù)時(shí)在SDK中的設(shè)置和一些說(shuō)明
初玩zynq發(fā)現(xiàn),在zynq中可以運(yùn)行FreeRTOS,果斷試了下;測(cè)試了幾個(gè)例子,一切正常,但是在使用空閑鉤子函數(shù)時(shí)導(dǎo)致無(wú)法正常執(zhí)行。
要使用空閑鉤子函數(shù)必須將FreeRTOSConfig.h文件中的configUSE_IDLE_HOOK定義為1,當(dāng)然編譯前已手動(dòng)將其定義改為1,但是空閑鉤子函數(shù)仍然沒(méi)有運(yùn)行。
查看源文件沒(méi)發(fā)現(xiàn)錯(cuò)誤,無(wú)意間再次確認(rèn)configUSE_IDLE_HOOK是否改為1時(shí),查看FreeRTOSConfig.h文件中configUSE_IDLE_HOOK定義為0了,再次修改,重新編譯運(yùn)行,不行,再看,configUSE_IDLE_HOOK又定義為0了,嗯,應(yīng)該是編譯工程時(shí)BSP也重新生成了,而默認(rèn)configUSE_IDLE_HOOK定義為0,所以configUSE_IDLE_HOOK又回到了0。
找到原因,進(jìn)入以下處理過(guò)程
不成功的處理
直接在源文件(包含main的實(shí)現(xiàn)文件)頭加上#define configUSE_IDLE_HOOK 1
這樣當(dāng)然不行,在編譯FreeRTOS時(shí)configUSE_IDLE_HOOK任為0,這里定義的configUSE_IDLE_HOOK只有在編譯源文件時(shí)有用,而源文件中也沒(méi)使用這個(gè)宏,所以這樣改是不行的。
當(dāng)然將#define configUSE_IDLE_HOOK 1放到包含F(xiàn)reeRTOSConfig.h文件的FreeRTOS.h文件包含#include "FreeRTOS.h"之前也是同樣道理,同樣不行。
修改SDK自帶BSP中源文件
直接將SDK生成FreeRTOS BSP的源文件修改,這樣看似可行。
當(dāng)找到SDK的BSP目錄(E:\Xilinx\SDK\2015.3\data\embeddedsw\ThirdParty\bsp\freertos821_xilinx_v1_0,這里假定vivado安裝目錄為E:\Xilinx)時(shí),搜索發(fā)現(xiàn)根本沒(méi)有FreeRTOSConfig.h這個(gè)文件,所以本方法不可行。
(后來(lái)發(fā)現(xiàn)FreeRTOSConfig.h是編譯時(shí)才生成的)
直接自定義BSP
后來(lái)在網(wǎng)上找資料,找到官網(wǎng)(個(gè)人認(rèn)為Xilinx官網(wǎng)資料還是挺多的,不像LatTIce實(shí)在太少,也可能是我沒(méi)找到方法),找到的確有自定義BSP的方法(AR# 63964),但是例子中是自定義stand alone BSP的方法,以類(lèi)似的方法修改,但是可能由于是FreeRTOS BSP的修改與stand alone有所不同,最后選擇修改后的BSP,每次生成BSP會(huì)在執(zhí)行freertos821_xilinx.tcl出錯(cuò),沒(méi)有解決,待日后處理,所以本方法還未成功。
解決辦法
最后,真是,踏破鐵鞋無(wú)覓,得來(lái)全不費(fèi)功夫;最后在發(fā)現(xiàn)是我多慮了,SDK早已考慮到這些,直接在BSP上右鍵->Board Support Package SetTIngs,可以看到下圖
直接在這里有設(shè)置,直接將use_idle_hook設(shè)置為true即可(以下還有關(guān)于FreeRTOS更多的設(shè)置,如STDIO、心跳鉤子函數(shù)等)。
真是一個(gè)簡(jiǎn)單的問(wèn)題,甚至可以說(shuō)是不存在的問(wèn)題,而網(wǎng)上搜索真沒(méi)找到類(lèi)似情況的說(shuō)明,費(fèi)了不少時(shí)間,這里特此記錄,不成功的處理也可作為以后其它問(wèn)題處理的備選方法。
其它
對(duì)于使用了隊(duì)列的應(yīng)用要添加#include "queue.h";使用了互斥量的要添加#include "semphr.h"
要使用xil_printf則要添加#include "xil_printf.h";用了vivado中的宏定義要添加#include "xparameters.h" 文章來(lái)源:電子發(fā)燒友