【精品博文】用我的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会自动添加好。下面继续贴图
请允许我某些文件打马赛克。。。。。
选中应用
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怎么用,在接下来更新。
以后更新都在周末,工作日事情太多了。。。。。一中午没睡觉,经常熬夜,又不午休感觉很累,。。。。。