摘要: uc/os-II的启动流程:1 在程序中分配工作堆栈:分配工作堆栈的主要目的是为工作执行时的参数,堆栈提供存放和访问空间。我们可以通过定义数组 unsigned int StackX[STACKSIZE],并在工作启动时传送该数组完成工作堆栈的初始化。 eg :unsigned int StackX【STACKSIZE】;2 建立工作函数体:函数体中包含的内容有参数的定义以及初始化;功能函数或者是指令语句;设定工作挂起时间间隔。 eg :void Task4(void *Id) { 变量的定义以及初始化 功能函数或者指令语句 OSTimerDly(100);//任务挂起时间间隔 }3 描述启动 阅读全文
posted @ 2013-05-30 21:33 cronus象牙塔 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 内容摘要:记得以前看射雕英雄传经常听到郭靖念九阴真经里的一段话:天之道损有余而补不足,是故虚胜实,不足胜有余。虽然九阴真经是金庸老先生杜撰出来的,但是这句话却写的非常的经典,非常的有哲理。这句话意思大概是这样的:每个人的缺陷都非常多,想要完全的补上是不可能的,有时候虚的比实的还要好。... 阅读全文
posted @ 2013-05-30 15:35 cronus象牙塔 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 1、有智慧的人总是把嘴巴放在心里,而愚昧之人反而把心放在嘴里。 2、每个人都有五个不停旋转的球:工作、健康、家庭、朋友和灵魂。工作是橡胶球,掉下去会弹起来;而另外四个都是玻璃球,掉了-----就碎了。 3、漂亮的女人悦目,成熟的女人悦心。 4、忌妒别人,不会给自己增加任何的好处。忌妒别人,也不可能减少别人的成就。 5、多用心去倾听别人怎么说,不要急着表达你自己的看法。 6、每一个人都拥有生命,但并非每个人都懂得生命,乃至于珍惜生命。不了解生命的人,生命对他来说,是一种惩罚。 7、原谅别人,就是给自己心中留下空间,以便回旋。 8、命运一半掌握在上帝手中,另一半掌握在自己手中。成功就... 阅读全文
posted @ 2013-05-30 15:33 cronus象牙塔 阅读(185) 评论(0) 推荐(0) 编辑
摘要: #define KEY0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)//读取按键0#define KEY1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)//读取按键1#define KEY2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)//读取按键2#define KEY3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键3(WK_UP)#define KEY_UP4#define KEY_LEFT3#define KEY_DOWN2#define 阅读全文
posted @ 2013-05-30 15:05 cronus象牙塔 阅读(676) 评论(0) 推荐(0) 编辑
摘要: ;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************;* File Name : startup_stm32f10x_hd.s;* Author : MCD Application Team;* Version : V3.4.0;* Date : 10/15/2010Stack_Size EQU 0x00000400 //定义1KB大小的栈空间AREA STACK, NOINIT, READWRITE, ALIGN=3 //定义一个段,8(2的3次方)字节对齐 的空间作为栈Stack_. 阅读全文
posted @ 2013-05-30 12:44 cronus象牙塔 阅读(769) 评论(0) 推荐(0) 编辑
摘要: typedef函数指针的用法(C++) 代码简化, 促进跨平台开发的目的. typedef 行为有点像#define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。用法一:typedefint(*MYFUN)(int, int); 这种用法一般用在给函数定义别名的时候 上面的例子定义MYFUN是一个函数指针, 函数类型是带两个int 参数, 返回一个int在分析这种形式的定义的时候可以用下面的方法: 先去掉typedef 和别名,剩下的就是原变量的类型. 去掉typedef和MYFUN以后就剩: int (*)(int, i 阅读全文
posted @ 2013-05-30 12:24 cronus象牙塔 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 原文地址:用宏区分操作系统和编译器 作者:yandaren_1220编码的时候经常要用到条件编译,每次都到网上去查比较浪费时间,今天总结一下以备后用编译器GCC #ifdef __GNUC__#if __GNUC__ >= 3 // GCC3.0以上Visual C++ #ifdef _MSC_VER(非VC编译器很多地方也有定义)#if _MSC_VER >=1000 // VC++4.0以上#if _MSC_VER >=1100 // VC++5.0以上#if _MSC_VER >=1200 // VC++6.0以上#if _MSC_VER >=1300 // 阅读全文
posted @ 2013-05-30 12:13 cronus象牙塔 阅读(309) 评论(0) 推荐(0) 编辑
摘要: 系统时钟 系统时钟节拍 时钟节拍是特定的周期性中断(时钟中断),这个中断可以看作是系统心脏的脉动。操作系统通过时钟中断来确定时间间隔,实现时间的延时及确定任务超时。中断之间的时间间隔取决于不同的应用,一般在10~200 ms之间。时钟的节拍式中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时提供等待超时的依据。时钟节拍频率越快,系统的额外开销就越大。系统定义了32位无符号整数OSTime来记录系统启动后时钟滴答的数目。用户必须在多任务系统启动以后再开启时钟节拍器,也就是在调用 OSStart()之后。μC/OSII中的时钟节拍服务是通过在中断服务子程序中调用OSTime.. 阅读全文
posted @ 2013-05-30 11:42 cronus象牙塔 阅读(438) 评论(0) 推荐(0) 编辑
摘要: 首先在main函数中调用OSTaskCreate的理解。OSTCBPrioTblOSTaskStkInit() 设置堆栈OS_TCBInit()TCB任务控制块初始化OS_Sched()任务调度在OS_Sched中,OS_SchedNew()函数负责找到新的最高优先级的任务,并赋值给OSPrioHighRdy OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];这行语句中的三个全局变量都是实现任务切换的优先级判断的关键。OS_TASK_SW()宏定义,因为C不能操作寄存器,所以对于任务的切换是由这个宏定义,定义的汇编代码实现。这个宏定义展开是汇编代码。这些由u 阅读全文
posted @ 2013-05-30 11:01 cronus象牙塔 阅读(207) 评论(0) 推荐(0) 编辑
摘要: uCos中的时钟节拍可以基于软中断实现或者基于时钟节拍任务(但是这个任务要给予很高的优先级)对于STM32(Cortex-M3)来说这个就是SysTick中断0x0000003C当中断发生时调用OS_CPU_SysTickHandler函数,这样就提供了系统的时钟节拍uCos中扩展的应用都是在HOOK函数中实现的,程序关于Time的调用,首先都是基于OSTime的,其次由于在OSTimeTick函数中预留了OSTimeTickHook()函数这样可以方便我们在OSTimeTickHook()函数中添加我们自己的代码实现在系统中的调用由于OSTimeTickHook()函数在OSTimeTick 阅读全文
posted @ 2013-05-30 11:00 cronus象牙塔 阅读(684) 评论(0) 推荐(1) 编辑
摘要: ean J. Labrosse所著《MicroC / OS-II: The Real Time Kernel (Second Edition)》(一下简称“宝书”)是基于1999年发布的2.00版本,目前uC/OS-II发展到了2.90版(2010年发布),其自身已经发生了很大的变化。当移植新版本uC/OS-II时,会发现很多需要移植的声明、定义、函数等等已经不符合书中介绍的情况和方法了。在这里尝试做一个简单的比较和说明,以便能进一步简化和了解uC/OS-II的移植。本文只阐述涉及移植方面的变化,其它关于新功能、新函数以及各类优化的描述见另文。1.uC/OS-II中断使能状态的保存除了宝书中定 阅读全文
posted @ 2013-05-30 10:56 cronus象牙塔 阅读(502) 评论(0) 推荐(0) 编辑
摘要: uC/OS-II的任务调度机制(在文件OS_CORE.C中) uC/OS-II有两种任务调度器:任务级的调度器和中断级的调度器。任务级的调度器由函数OSSched()来实现;中断级的调度器由函数OSIntExit()来实现。 调度器OSSched()的前半部分叫调度部分,其职责就是寻找优先级别最高的就绪任务作为待运行任务。if ((OSLockNesting | OSIntNesting) == 0)在中断服务程序中不允许进行任务调度,所以每当进入中断服务程序就要把变量OSIntNesting加1,而当中断返回前则要把OSIntNesting减1,这样调度器就不会在中断服务程序中进行调度工作了 阅读全文
posted @ 2013-05-30 08:22 cronus象牙塔 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 一、 什么是C/S和B/S 要想对“C/S”和“B/S”技术发展变化有所了解,首先必须搞清楚三个问题。 第一、什么是C/S结构。C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以... 阅读全文
posted @ 2013-05-30 08:18 cronus象牙塔 阅读(303) 评论(0) 推荐(0) 编辑