【精品博文】用我的SDK亲吻你的FreeRTOS

赢一个双肩背包

有多难?

戳一下试试看!

→_→

长摁识别

屌丝男们,题目是不是很诱惑?刚开始接触,这个过程算是强吻吧,本来我是想用Vivado16.2来开发的,这个版本上SDK已经添加了FreeRTOS,但是怎么生成不了bps,弄了两天没弄出来,逛了各个论坛,包括问了技术支持,都没有解决,因为项目时间紧,只能退而求其次,找了一个FreeRTOS官网的开发包,这个是根据14.3调好的,所以就直接上手Vivado14.3了,不在这个问题上面浪费时间。附件是这个开发包的说明文档,里面讲了怎么找到这个开发包,我建议自己根据这个去找,毕竟找资源也是开发过程中比较重要的,如果找不到,可以私信我,我会发到百度文库。ps后来项目完成后,我在Vivado16.2上调出来了,先把这一系列更新完,后面有机会在介绍Vivado16.2我是怎么弄的。

下面讲一下,我自己在使用过程中遇到的一些问题和使用技巧,下面就请大神勿喷,有什么不足有人指正我会很开心的。

首先是怎么导入,这个在附件里面已经说的很清楚了,只不过是英文的,作为理工男看懂英文文档是很必要的,这里就不赘述了,自己去看吧。。。。。

然后是怎么修改头文件和某些底层代码。这个问题也困扰了我一段时间,因为某些头文件是用脚本生成的(.tcl文件),这些文件当重新编译的时候会重新生成,所以在工程里面直接改是改不了的(刚开始我也不知道,不得不说坑太多了,只知道这些文件肯定是在某些地方存了默认参数,但就是不到在哪,终于某一天无意中被我找到了,缘分啊!!!)。下面我先把这个现象举例演示一下,比如我要关掉Lwip的DHCP(默认是打开的),这就要改LWIP_DHCP为0。这个是在lwipopt.h文件里面,如下。

当我把他改为0,然后保存,编译。就会弹出如下窗口,然后点Yes,

然后,编译完成LWIP_DHCP自己有变回来了。正是项目紧的时候,工具用不好很让人抓狂。

下面讲在什么地方改。

在\repo\bsp\lwip141_v1_0\data文件夹下(刚开始只是知道这个和bsp的编译有关),仔细看过之后才知道,确实有关(废话

),我们打开看看,还是以LWIP_DHCP为例,在lwip141.mld文件夹里面搜索LWIP_DHCP,会找到这么一句,如下图

在lwip141.tcl也会有这么一句

现在是不是明白了,只要把lwip141.mld里面改成       PARAM name = lwip_dhcp, desc = "Is DHCP required?", type = bool, default = false;就好了,接下来关键一步。要点一下Rescan Repositories,点OK,Ctrl+B重新编译就好了,如果还是不行,删了旧的bsp,重新生成一下就可以了。

还有一些C代码,都是在\repo\bsp\freertos_zynq_v1_02_a\src\或repo\bsp\lwip141_v1_0\src中,一般要改的话都是做好备份,直接在这个里面改,而不是在工程的bsp里面改,这样的好处是避免重新扫描之后,重新生成bsp的时候把之前改过的代码又回复到原来的样子。

怎么开发讲完了,FreeRTOS的调试和上篇介绍的裸跑C语言是一样的。上一篇忘了介绍怎么生成bin文件和怎么固化(我用的是flash,没有用sd卡或tf卡)。

当把工程调完之后,你不得不面临一个问题,就是固化程序。要固化程序你首先要有一个FSBL(First Stage Bootloader),这个应用SDK已经给开发好了,生成步骤如下:

1.

2.

3.

OK,完成!就是这么简单。

然后,生成bin文件,还是和debug一样,选中你的应用程序,然后接下来一些必要的文件,SDK会自动添加好。下面继续贴图

  1. 请允许我某些文件打马赛克。。。。。

选中应用

2.生成

3.到这里,我们看到,工程自己添加了三个文件,而你们弄的时候可能少了一个bit文件,这个没关系,不知道还记不记得在建立工程的时候,左侧的Project Explorer是空的,在生成第一个应用程序会生成,bsp、应用程序,还生成了一个硬件平台,这个硬件平台如果是选择的SDK自带的(生成过程如下面第二个图),它是没有bit文件的,不过没关系,这个不影响PS端的工作。我这个包含bit文件是因为,我开发的这个工程里面包含PL的应用,如果你的SDK里面用的硬件平台是在Vivado生成bit文件之后导出的,那么就会包含bit文件,到这里另外说一下其他的,就是Zynq的固化必须用SDK生成的bin文件,即使是只开发了PL端,把Zynq当作是FPGA用,这时生成bin文件的时候只需包含FSBL和bit文件就好了。

继续性感的马赛克

4.最后一步,固化,注意,这一步需要时间比较长,大概需要10到20分钟,固化好,断电选择Flash模式重启

好了,工欲善其事,必先利其器。这样就可以开始开发了。

接下来是关于一下写代码要注意的地方,这些是我写给自己作为笔记的,由于我之前没有写给C代码,更没有接触过嵌入式系统(做这个项目太痛苦了,好多东西都是从零开始的,经常熬夜,加班,通宵),有些东西说的不一定对。

1.不同线程对共有资源的操作,包括全局变量,指针等,要用互斥信号量加以保护(不知道,这些东西多了会不会对系统的效率有影响)。

2.一定不要让线程一直处于激活状态,一是这样的线程用起来很有局限性,二是这样会使空线程饿死,使你在删除某些不用的线程时,资源不能释放。

3.要注意malloc()和free()不能直接用,要用pvPortMalloc()与 vPortFree()。

4.有一些函数有中断程序里的专用函数,目前接触到的是关于队列的函数,都有。。。

其他的中断怎么设,DMA怎么用,在接下来更新。

以后更新都在周末,工作日事情太多了。。。。。一中午没睡觉,经常熬夜,又不午休感觉很累,。。。。。

(0)

相关推荐

  • Vitis尝鲜(二)

    上一篇安装完相关程序后,这一篇就简单运行一个"Hello Vitis"的程序. 本例硬件平台为ZYNQ平台,具体芯片为XC7Z035. ZYNQ 芯片分为 PL 和 PS, PS ...

  • 【Vivado那些事】Vivado下头文件使用注意事项

    并不局限于Vivado一种EDA. 头文件主要使用"文件包括"处理,所谓'文件包含'处理是一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中.Veri ...

  • 基于Zynq平台的EtherCAT主站方案实现

    作者:陈秋苑 谢晓锋 陈海焕 广州虹科电子科技有限公司 摘 要:EtherCAT 是开放的实时以太网通讯协议,由德国倍福自动化有限公司研发.EtherCAT 具有高性能.低成本.容易使用等特点,目前在 ...

  • 【精品博文】EDK之路(4)——自定义IP(SDK部分)

    SDK部分(BSP的创建) 由于我们存在一个自定义IP,这导致在建立BSP时,会增加一点操作.如果我们什么都不做,直接建立BSP,那么该BSP将不会包括自定义IP的驱动.其实,不用该驱动也行,我们直接 ...

  • 【精品博文】EDK之路(2)——GPIO之SDK篇

    在上篇文章中,说明了一下一个简单的GPIO工程的XPS部分.XPS部分的建立说明我们的硬件平台已经搭好,类似已经做好单片机了.接下来就是在这个"单片机"中运行我们的软件程序,即SD ...

  • 【精品博文】JTAG模式下Vivado SDK运行时的奇怪报错

    问题描述下载elf完毕后,弹出如图1所示的消息框,提示软件运行出现问题.软件运行结果却是OK的,比如我这里VGA接口就能够正常显示图片,如图2所示.此外,在Debug模式下,也不会报该错误. 图1 全 ...

  • 【精品博文】干货|一个工科生的职业规划(转)

    我今年39岁了,25岁研究生毕业,工作14年,回头看看,应该说走了不少的弯路,有一些经验和教训.现在开一个小公司,赚的钱刚够养家糊口的.看看这些刚毕业的学生,对前景也很迷茫,想抛砖引玉,谈谈自己的看法 ...

  • 【精品博文】一种借助EBR实现数据延时的方法

    数据延时线(Delay Line)在数字信号处理中具有广泛的应用,例如FIR滤波器设计中就会需要用到数据延时线.实际上,在绝大部分的Pipeline设计中都会需要用到数据延时.本文介绍一种基于EBR( ...

  • 【精品博文】PWM蜂鸣器驱动之引脚分配

    【精品博文】PWM蜂鸣器驱动之引脚分配

  • 【精品博文】聊一聊数字电路中时钟抖动

    随着通信系统中的时钟速率迈入GHz级,抖动这个在模拟设计中十分关键的因素,也开始在数字设计领域中日益得到人们的重视.在高速系统中,时钟或振荡器波形的时序误差会限制一个数字I/O接口的最大速率.不仅如此 ...

  • 【精品博文】MIPI扫盲——DSI介绍(二)

    目录篇地址:http://blog.chinaaet.com/justlxy/p/5100052503  这一篇来简单的介绍一下MIPI DSI Video Mode的三种操作模式: Non-Busr ...

  • 【精品博文】MIPI扫盲——D-PHY介绍(一)

    D-PHY种的PHY是物理层(Physical)的意思,那么D是什么意思呢?在MIPI D-PHY的文档中有提到过,D-PHY的最初版本的设计目标是500Mbits/s,而D是罗马数字(拉丁文数字)中 ...