Zynq中使用FreeRTOS的空闲钩子函数时在SDK中的设置

分享到:
12666
下一篇 >

本文介绍zynq中使用FreeRTOS的空闲钩子函数时在SDK中的设置和一些说明

初玩zynq发现,在zynq中可以运行FreeRTOS,果断试了下;测试了几个例子,一切正常,但是在使用空闲钩子函数时导致无法正常执行。

要使用空闲钩子函数必须将FreeRTOSConfig.**件中的configUSE_IDLE_HOOK定义为1,当然编译前已手动将其定义改为1,但是空闲钩子函数仍然没有运行。

查看源文件没发现错误,无意间再次确认configUSE_IDLE_HOOK是否改为1时,查看FreeRTOSConfig.**件中configUSE_IDLE_HOOK定义为0了,再次修改,重新编译运行,不行,再看,configUSE_IDLE_HOOK又定义为0了,嗯,应该是编译工程时BSP也重新生成了,而默认configUSE_IDLE_HOOK定义为0,所以configUSE_IDLE_HOOK又回到了0。

找到原因,进入以下处理过程

不成功的处理

直接在源文件(包含main的实现文件)头加上#define configUSE_IDLE_HOOK 1

这样当然不行,在编译FreeRTOS时configUSE_IDLE_HOOK任为0,这里定义的configUSE_IDLE_HOOK只有在编译源文件时有用,而源文件中也没使用这个宏,所以这样改是不行的。

当然将#define configUSE_IDLE_HOOK 1放到包含FreeRTOSConfig.**件的FreeRTOS.**件包含#include "FreeRTOS.h"之前也是同样道理,同样不行。

修改SDK自带BSP中源文件

直接将SDK生成FreeRTOS BSP的源文件修改,这样看似可行。

当找到SDK的BSP目录(E:XilinxSDK2015.3dataembeddedswThirdPartybspfreertos821_xilinx_v1_0,这里假定vivado安装目录为E:Xilinx)时,搜索发现根本没有FreeRTOSConfig.h这个文件,所以本方法不可行。

(后来发现FreeRTOSConfig.h是编译时才生成的)

直接自定义BSP

后来在网上找资料,找到官网(个人认为Xilinx官网资料还是挺多的,不像LatTIce实在太少,也可能是我没找到方法),找到的确有自定义BSP的方法(AR# 63964),但是例子中是自定义stand alone BSP的方法,以类似的方法修改,但是可能由于是FreeRTOS BSP的修改与stand alone有所不同,*后选择修改后的BSP,每次生成BSP会在执行freertos821_xilinx.tcl出错,没有解决,待日后处理,所以本方法还未成功。

解决办法

*后,真是,踏破铁鞋无觅,得来全不费功夫;*后在发现是我多虑了,SDK早已考虑到这些,直接在BSP上右键->Board Support Package SetTIngs,可以看到下图

直接在这里有设置,直接将use_idle_hook设置为true即可(以下还有关于FreeRTOS更多的设置,如STDIO、心跳钩子函数等)。

真是一个简单的问题,甚至可以说是不存在的问题,而网上搜索真没找到类似情况的说明,费了不少时间,这里特此记录,不成功的处理也可作为以后其它问题处理的备选方法。

其它

对于使用了队列的应用要添加#include "queue.h";使用了互斥量的要添加#include "semphr.h"

要使用xil_printf则要添加#include "xil_printf.h";用了vivado中的宏定义要添加#include "xparameters.h"

你可能感兴趣: 技术文章 图片 SDK Zynq FreeRTOS
无觅相关文章插件,快速提升流量