金沙集团186cc成色(中国)有限公司 - 百度百科

销售咨询热线

金沙集团186cc成色
网站导航
技术资料
当前位置:首页 > 新闻中心 > 技术资料

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

时间:2021-09-16 点击次数:529

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

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

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

    查看源文件没发现错误,无意间再次确认configUSE_IDLE_HOOK是否改为1时,查看FreeRTOSConfig.h文件中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.h文件的FreeRTOS.h文件包含#include "FreeRTOS.h"之前也是同样道理,同样不行。

    修改SDK自带BSP中源文件

    直接将SDK生成FreeRTOS BSP的源文件修改,这样看似可行。
当找到SDK的BSP目录(E:\Xilinx\SDK\2015.3\data\embeddedsw\ThirdParty\bsp\freertos821_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,可以看到下图

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

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

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

    其它

    对于使用了队列的应用要添加#include "queue.h";使用了互斥量的要添加#include "semphr.h"
要使用xil_printf则要添加#include "xil_printf.h";用了vivado中的宏定义要添加#include "xparameters.h"                                                                                    文章来源:电子发烧友

友情链接:全国互联网安全管理服务平台 | 工信和信息化部政务服务平台 |

版权所有:Copyright © 2010-2024金沙集团186cc成色(信息部)  备案号:滇ICP备20006267号

Baidu
sogou