
嵌入式系统
文章平均质量分 57
wtbcx2012
这个作者很懒,什么都没留下…
展开
-
OSTimeTick()
void OSTimeTick (void) //这个节拍服务函数是在OSTickISR函数中调用的,目的是在时钟节拍到来时,检查每个任务的任务控制块中的.OSTCBDly-1后是否为0,如果是,那么表明这个任务刚才是挂起的状态,此时应改变为就绪态{ OS_TCB *ptcb; OSTimeTickHook();原创 2012-11-07 14:22:55 · 1804 阅读 · 0 评论 -
USB启动过程分析
现在很多的主控上都带有USB的功能,但是对于初学者来说,这方面应用还是比较棘手,因为usb的不但固件程序需要编写,PC端的驱动也要编写,而且驱动写好了还要写个上位机才能看出效果。这样调试起来十分困难,建议从USB的键盘,鼠标开始做,了解清楚了,再做自己的协议就比较简单了。USB的概念历史啥的这里就不说了。我们先不管具体的数据包格式,这一节先从整个包的层面上简单的说,过程是这样的,-----原创 2015-01-25 21:37:53 · 646 阅读 · 0 评论 -
ARM 启动过程分析
开始学ARM 时就对芯片上电后的执行顺序很纳闷,但苦于网上的解释都不甚详细,而且常常有学弟学妹来问,含糊其辞总怕误人子弟,想讲诉详细又总不能够。近些天闲来无事,决心好好整理一下启动流程,一劳永逸。我想每个学习51 单片机的同学都应该记得一句话:芯片上电从零地址开始执行程序。说实话,不记得这句还好,记住就更乱了;不是说这句话错,而是说的太片面了。对于低级单片机,的确是这样;但对于转载 2015-01-25 21:33:51 · 752 阅读 · 0 评论 -
USB主机是如何检测到设备的插入的呢?
首先,在USB集线器的每个下游端口的D+和D-上, 分别接了一个15K欧姆的下拉电阻到地。这样,在集线器的端口悬空时,就被这两个下拉电阻拉到了低电平。而在USB设备端,在D+或者D-上接了1.5K欧姆上拉电阻。对于全速和高速设备, 上拉电阻是接在D+上;而低速设备则是上拉电阻接在D-上。这样,当设备插入到集线器时,由1.5K的上拉电阻和15K的下拉电阻分压,结果就将差分数据线中的一条拉原创 2015-01-21 22:20:24 · 6086 阅读 · 0 评论 -
路由器在转发以太帧时封装机制
最近接手的一个项目用到了以太网通讯,关于以太网通讯之前没有接触过,所以原创 2014-04-26 21:06:20 · 3297 阅读 · 0 评论 -
路由转发时以太帧的封装机制
交换功能是指路由器在一个接口接收数据包并将其从另一个接口转发出去的过程。交换功能的重要责任是将数据包封装成适用于传出数据链路的正确数据帧类型。对于从一个网络传入,以另一个网络为目的地的数据包,路由器会进行哪些处理?路由器主要执行以下三个步骤:1. 通过删除第 2 层帧头和帧尾来解封第 3 层数据包。2. 检查 IP 数据包的目的 IP 地址以便从路由表中选择最佳路径。原创 2014-04-26 21:17:05 · 2027 阅读 · 0 评论 -
ARP运行机理
ARP运行在局域网,所谓局域网相对于广域网而言的。本地PC和路由原创 2014-04-26 21:11:13 · 648 阅读 · 0 评论 -
ARP在同一网关和不同网关之间传输中的区别
ARP解析过程:如果A主机要对B主机进行数据传输的话1) A主机先会查看自己的ARP高速缓存中是否有B主机的MAC地址记录。2) 如果A主机的高速缓存中有B主机的记录,则直接通过这个MAC地址进行数据的传输。3)如果A主机的高速缓存中没有B主机的记录,则会向局域网的所有主机广播一个ARP请求,寻找B主机的MAC地址。 4) 当B主机收到A主机广原创 2014-04-27 12:48:38 · 2284 阅读 · 0 评论 -
InitInstance函数
BOOL InitInstance()为什么说它是程序的进入点?还有,那个WinMain函数又有什么作用,这两个函数之间有什么关系吗?BOOL InitInstance()是MFC的CWinApp类的成员函数,而WinMain才是真正的入口点,但是MFC不允许程序中有WinMain这个函数,因为MFC自己编写了WinMain函数,如果程序中再定义就重复定义了,而MFC编写的的WinMain函数转载 2013-01-19 16:09:11 · 1018 阅读 · 0 评论 -
code,date,pdate,xdate,idate
code 指定数据是存储在代码区,数据是在编程的时候跟代码一起写入代码存储器,运行过程中不能改变xdata 指定数据是存储在外部数据存储器了data 指定数据存储在内部低128字节数据存储器里,如果变量不指定存储位置,默认就是data型,这部分存储器寻址速度最快idata 指定数据存储在内部低256字节数据存储器里,但51只有128字节内部RAM,52才有256字节pdata 指定原创 2012-11-19 15:20:53 · 3860 阅读 · 0 评论 -
信号量的理解
1. 信号量的理解 (1)uc/os-ii的信号量是由两个部分组成:一部分是16位的无符号整型信号量的计数值(0~65535);另一部分是等待该信号量的任务组成的等待任务表。(另外参考事件控制块ECB)(2)信号量可以是2值的变量(称为二值信号量),也可以是计数式的。根据信号量的值,内核跟踪那些等待信号量的任务。(3)建立信号量的工作必须在任务级代码中或者多任务启动之前完成。(4)原创 2012-11-16 08:36:17 · 696 阅读 · 0 评论 -
信号量与优先级翻转的分析
1965年,荷兰学者Dijkstra提出了利用信号量机制解决进程同步问题,信号量正式成为有效的进程同步工具,现在信号量机制被广泛的用于单处理机和多处理机系统以及计算机网络中。信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用临界区的进程数。Dijkstra同时提出了对信号量操作的PV原语。P原语操作的动作是: (1)S减1;原创 2012-11-13 10:02:38 · 1043 阅读 · 0 评论 -
关于信号量的使用总结
在ucos-II中,为了实现任务之间的同步,用到的同步机制有:信号量,邮箱和消息队列。其中这里我主要说下对信号量的使用经验。信号量在创建时,调用OSSemCreate(INT16U cnt)函数。cnt为信号量的初始值。对cnt赋予不同的值,所起到的作用不同。如果Semp = OSSemCreate(0), 该信号量表示等待一个事件或者多个事件的发生。 例如:我们现在想实现这样一个功能:当有按键按原创 2012-11-13 11:02:40 · 633 阅读 · 0 评论 -
为什么c程序头文件中加#ifdef可以防止重复调用?
一些资料上说在头文件加上类似下面的语句就能防止头文件重复调用: #ifndef _TEST_H_ #define _TEST_H_ …… //头文件内容 #endif不是很明白,按照我的理解,如果之前没有定义过“_TEST_H_”,如上的条件编译会让整个头文件失效。另外头文件什么情原创 2012-11-09 10:30:30 · 1265 阅读 · 0 评论 -
如何实现一个malloc
原文出处: 张洋的博客 任何一个用过或学过C的人对malloc都不会陌生。大家都知道malloc可以分配一段连续的内存空间,并且在不再使用时可以通过free释放掉。但是,许多程序员对malloc背后的事情并不熟悉,许多人甚至把malloc当做操作系统所提供的系统调用或C的关键字。实际上,malloc只是C的标准库中提供的一个普通函数,而且实现malloc的基本思想并不复杂,任何一个对C转载 2017-11-24 20:49:00 · 261 阅读 · 0 评论