怎样在pc模拟freertos lwip的任务运行

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
身体、性格、态度决定人的一生,当什么都没有的时候,至少我们要拿出态度来~
LOFTER精选
阅读(1681)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_094074',
blogTitle:'FreeRTOS初步(转)',
blogAbstract:'用了半天时间对FreeRTOS有了一个初步的认识,大概总结一下,其中混杂了系统实现和实际应用方面的问题。
现只是以应用为目的,实现方面待以后进一步研究。
1.FreeRTOS提供的功能包括:任务管理、时间管理、信号量、消息队列、内存管理。与平台有关的文件包含在portable文件夹中,主要是port.c, portmacro.h两个文件。平台无关的文件主要是:list.c(基本链表结构), queue.c(包括消息队列,信号量的实现), croutine.c,tasks.c(任务管理,时间管理)。
命名协定RTOS内核与范例程序源代码使用下面的协定: 变量 char类型的变量以 c 为前缀 short类型的变量以 s 为前缀 long类型的变量以 l 为前缀 float类型的变量以 f 为前缀 ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:7,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'身体、性格、态度决定人的一生,当什么都没有的时候,至少我们要拿出态度来~',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}沉寂了几年了,觉得应该分享些什么了。前段时间用FreeRTOS做了些东西,陆续拿出来给大家拍砖。应该说本人是Linux的粉丝吧,所以我业余时间分享的经验也多半是应用Linux作为桌面开发平台的。闲话少说,进入正题。选用FreeRTOS绝对不是应为他的代码是如何的优秀,而是因为他在自由软件社区展现出的很强的生命力。要知道,如果一个自由软件社区足够的活跃,就意味着有更多的爱好者不停的解决和修正他运行的过程中遇到的诸多问题。由于本人的工作中会采用STM32的CortexM的MCU,所以后续的调试方法会以STM32LDiscovery的开发板为例。FreeRTOS 发布包中有针对不同平台的移植和实例,要想在Linux主机交叉编译需要选用arm-none-eabi-gcc这样的编译工具链,而选用ST的MCU后一个廉价的ST-Link可以作为调试工具,而STM32LDiscovery的板子上自带就有这样的工具。硬件调试工具提供的下载调试程序的通道,还需要一个能够支持GDB Server的服务程序才能用arm-none-eabi-gdb完成代码的调试。下面的网站讲述了一个st-link的Linux工具可以支持下载调试你的二进制代码。/blog/linux.stm32.discovery.gcc.html我个人比较喜欢openocd,他有自己特有的telnet模式可以对目标板进行各种设置,他在支持标准GDB Server的同时还针对嵌入式系统提供RTOS的支持,很多人不太了解这对调试有何好处。如果用gdb调试Linux下的多线程程序可以用info thread这样的命令观察线程的运行状态,当然可以很容的检查线程栈溢出等情况。下载最新的openocd,系统自带的多半太陈旧,嵌入式系统的发展要比PC更快git clone git://git.code.sf.net/p/openocd/code& openocdFreeRTOS 8.1.2openocd对FreeRTOS的支持,需要在运行openocd的时候加入configure -rtos auto选项,下面是我修改过的openocd board 脚本文件# This is an STM32L discovery board with a single STM32L152RBT6 chip.# /internet/evalboard/product/250990.jspsource [find interface/stlink-v2.cfg]transport select hla_swdset WORKAREASIZE 0x4000source [find target/stm32l.cfg]# use hardware reset, connect under resetreset_config srst_only srst_nogate$_TARGETNAME configure -rtos auto运行的时候只需要如下命令openocd -f board/stm32ldiscovery.cfg这时候如果你用arm-none-eabi-gdb通过target remote:3333 load代码的时候,会显示没有检测的RTOS。网上找了些帖子,都没有解决,大概说明是openocd采用了7.6.2之前版本的一个优先级变量,但是如果你把FreeRTOS换成之前的版本仍旧不能成功检测。我研究了以下FreeRTOS 8.1.2的代码,发现加回原来的这个全局优先级变量可以解决这个问题,而且只是两条语句对于FreeRTOS优先级调度应该没有什么影响在task文件中寻找如下行,PRIVILEGED_DATA static volatile TickType_t xTickCount && &&& &&& &&& &= ( TickType_t ) 0U;在下面加入这一行PRIVILEGED_DATA static unsigned portBASE_TYPE uxTopUsedPriority&& & && &= tskIDLE_PRIORITY;在函数xTaskGenericCreate中的如下代码uxTaskNumber++;#if ( configUSE_TRACE_FACILITY == 1 ){/* Add a counter into the TCB for tracing only. */pxNewTCB-&uxTCBNumber = uxTaskN}#endif /* configUSE_TRACE_FACILITY */的前面加入#if ( configUSE_TRACE_FACILITY == 1 )if( pxNewTCB-&uxPriority & uxTopUsedPriority ){uxTopUsedPriority = pxNewTCB-&uxP}#endif /* configUSE_TRACE_FACILITY */重新编译FreeRTOS的实例(原创文章请著名出处http://blog.csdn.net/rickleaf)openocd FreeRTOS 调试openocd -f board/stm32ldiscovery.cfg调试下载代码arm-none-eabi-gdb stm32l1xx_freertos.elfload这时候server端显示如下信息Open On-Chip Debugger 0.9.0-dev-0b3-dirty (-23:00)Licensed under GNU GPL v2For bug reports, readhttp://openocd.sourceforge.net/doc/doxygen/bugs.htmladapter speed: 300 kHzadapter_nsrst_delay: 100Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWDsrst_only separate srst_nogate srst_open_drain connect_deassert_srstInfo : clock speed 300 kHzInfo : STLINK v2 JTAG v23 API v2 SWIM v0 VID 0x0483 PID 0x3748Info : using stlink api v2Info : Target voltage: 2.918068Info : stm32l.cpu: hardware has 6 breakpoints, 4 watchpointsInfo : accepting 'gdb' connection on tcp/3333Info : STM32L flash size is 128kb, base address is 0x8000000undefined debug reason 7 - target needs resetInfo : Auto-detected RTOS: FreeRTOSadapter speed: 300 kHztarget state: haltedtarget halted due to debug-request, current mode: ThreadxPSR: 0x pc: 0x0800021c msp: 0xSTM32L: Enabling HSIadapter speed: 2000 kHzInfo : Padding image section 0 with 3 bytestarget state: haltedtarget halted due to breakpoint, current mode: ThreadxPSR: 0x pc: 0x msp: 0xtarget state: haltedtarget halted due to breakpoint, current mode: ThreadxPSR: 0x pc: 0x msp: 0xadapter speed: 300 kHztarget state: haltedtarget halted due to debug-request, current mode: ThreadxPSR: 0x pc: 0x0800021c msp: 0x在调试端,通过info thread来查看FreeRTOS的运行状况GNU gdb (GNU Tools for ARM Embedded Processors) 7.6.0.-cvsCopyright (C) 2013 Free Software Foundation, Inc.License GPLv3+: GNU GPL version 3 or later &http://gnu.org/licenses/gpl.html&This is free software: you are free to change and redistribute it.There is NO WARRANTY, to the extent permitted by law.& Type &show copying&and &show warranty& for details.This GDB was configured as &--host=i686-linux-gnu --target=arm-none-eabi&.For bug reporting instructions, please see:&http://www.gnu.org/software/gdb/bugs/&...Reading symbols from /home/ricky/workspace/stm32/stm32l1xx_freertos/Debug/stm32l1xx_freertos.elf...done.(gdb) tar rem:3333Remote debugging using :33330x in ?? ()(gdb) loadLoading section .isr_vector, size 0x24c lma 0x8000000Loading section .text, size 0x3df9 lma 0x800024cLoading section .data, size 0xa4 lma 0x8004048Start address 0x800010c, load size 16617Transfer rate: 4 KB/sec, 5539 bytes/write.(gdb) cContinuing.^CProgram received signal SIGINT, Interrupt.[Switching to Thread ]0x08002b78 in prvCheckTasksWaitingTermination ()at ../system/src/FreeRTOS/Source/tasks.c:28592859&& &&& &&& &while( uxTasksDeleted & ( UBaseType_t ) 0U )(gdb) info thread[New Thread ][New Thread ][New Thread ]Id&& Target Id&&&&&&&& Frame4&&& Thread
(LED3) 0x08001b90 in vPortYield ()at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:3713&&& Thread
(Tmr Svc) 0x08001b90 in vPortYield ()at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:3712&&& Thread
(LED4) 0x08001b90 in vPortYield ()at ../system/src/FreeRTOS/Source/portable/GCC/ARM_CM3/port.c:371* 1&&& Thread
(IDLE :& : Running) 0x08002b78 in prvCheckTasksWaitingTermination () at ../system/src/FreeRTOS/Source/tasks.c:2859(gdb)至此我们可以用openocd做一些和FreeRTOS更紧密的调试了。关于笔者是如何构建stm32的freertos的编译环境的,我会在后面的文章讲述。(原创文章请著名出处http://blog.csdn.net/rickleaf)
无相关信息AVR单片机中如何获得和更改程序计数器Program Counter(PC)的值,以实现多任务操作系统的设计!
[问题点数:40分,结帖人java_lover_]
AVR单片机中如何获得和更改程序计数器Program Counter(PC)的值,以实现多任务操作系统的设计!
[问题点数:40分,结帖人java_lover_]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
FreeRTOS实时内核实用指南
下载积分:2000
内容提示:道客巴巴文档,FreeRTOS实时内核实用指南,freertos,stm32 freertos,freertos ucos,freertos pc,freertos stm32f4,freertos官网,freertos中文网,freertos modbus,实时内核,寻找实时连击内核,值得下载、分享、收藏。
文档格式:PDF|
浏览次数:1|
上传日期: 08:10:36|
文档星级:
该用户还上传了这些文档
下载文档:FreeRTOS实时内核实用指南.PDF
官方公共微信

我要回帖

更多关于 freertos timer 的文章

 

随机推荐