是一个可以基于ROM运行的、可裁减的、抢占式、实时、多任务OS内核;

可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。

一个任务,也称作一个线程,是一个简单的程序,该程序可以认为 CPU 完全只属该程序自己。

OS包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全可以由用户自己根据需要分别实现。

当任务执行完毕后(时间片到),他把自己的CPU寄存器所有内容保存到自己的堆栈中,同时把CPU让给别的任务,那么得到CPU使用权的任务把自己的CPU寄存器从自己的堆栈中放到真正的CPU寄存器中开始运行,就这样周而复始。

任务管理:建立任务时的优先级、堆栈

时间管理:通过定时中断来实现的

内存管理:给一个首地址、块大小、块数目。将连续地址数组链表化。

获取:指定一个内存控制块, 返回链表首部内存块地址,链表指针移到下一个空闲内存块;

释放:指定一个内存控制块以及要释放的内存块首地址。该内存块存放链表首个空闲内存块地址,并将自己赋值为首个空闲内存块。

邮箱:各个任务把自己的数据封装后以邮箱的形式发送给其它的任务使用,从而达到任务间通信的目的。一个指针型的变量,通常该指针指向一个包含了“消息”的特定数据结构。


1、µC/OS-II 是多任务,而且为每个任务开辟一个堆栈

2、µC/OS-II要用户在使用任何服务之前先调用 OSInit() [L1.5(2)]。它会建立两个任务:

空闲任务和统计任务,前者在没有其它任务处于就绪态时运行;后者计算 CPU 的利用率。

3、在 启动多任务OSStart() 之前用户至少要先建立一个任务

4、要使用堆栈检查操作必须用 OSTaskCreateExt()建立任务

5、OSMemCreate()函数建立并初始化一块内存区。内存区可以使用静态数组或在初始化时使用 malloc()函数建立。

msg = OSMemGet(CommMem, &err);
if (msg != (INT8U *)0) {
./* 内存块已经分配 */
}

6、

typedef struct {                       /* MEMORY CONTROL BLOCK                                         */
void *OSMemAddr; /* Pointer to beginning of memory partition */
void *OSMemFreeList; /* Pointer to list of free memory blocks */
INT32U OSMemBlkSize; /* Size (in bytes) of each block of memory */
INT32U OSMemNBlks; /* Total number of blocks in this partition */
INT32U OSMemNFree; /* Number of memory blocks remaining in this partition */
} OS_MEM;
#define  OS_EVENT_TYPE_UNUSED      0
#define OS_EVENT_TYPE_MBOX 1
#define OS_EVENT_TYPE_Q 2
#define OS_EVENT_TYPE_SEM 3
#define OS_EVENT_TYPE_MUTEX 4
#define OS_EVENT_TYPE_FLAG 5 typedef struct {
INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_???) */
INT8U OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
INT16U OSEventCnt; /* Semaphore Count (not used if other EVENT type) */
void *OSEventPtr; /* Pointer to message or queue structure */
INT8U OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
} OS_EVENT;

7、调用 OSSchedLock()函数的任务独占 CPU,不管有没有其他高优先级的就绪任务。在这种情况下,中断仍然可以被接受和执行(中断必须允许)。OSSchedLock()函数和 OSSchedUnlock()函数必须配对使用。

任务调用了 OSSchedLock()函数后,决不能再调用可能导致当前任务挂起的系统函数:OSTimeDly(),OSTimeDlyHMSM(),OSSemPend(),OSMboxPend(),OSQPend()。因为任务调度已经被禁止,其他任务不能运行,这会导致系统死锁。

8、OSSemCreate()函数建立并初始化一个信号量。信号量的作用如下:

允许一个任务和其他任务或者中断同步

取得设备的使用权

标志事件的发生

OS_EVENT *DispSem;
void main(void)
{
.
OSInit(); /* 初始化μC/OS-Ⅱ */
.
DispSem = OSSemCreate(1); /* 建立显示设备的信号量 */
.
OSStart(); /* 启动多任务内核 */
}

定义全局变量--初始化--post--pend--flush

CAN2_GLOBAL	  OS_EVENT	  *CAN2Receive;  

CAN2Receive 			= OSQCreate(pCAN2RevBuf,USE_CAN2_RX_BUF_SIZE);       //CAN2接收消息队列  

stcRxBUF msg;
msg = RxBUF(j);
CAN2Rx_OSQPost(CAN2Receive,&msg); mg=OSQPend(CAN2Receive,0,&err);
curRxBuf = *(stcRxBUF *) mg; OSQFlush(CAN2Receive);

9、CPU使用率

void FirstAndOnlyTask (void *pdata)
{
.
OSStatInit(); /* 计算CPU使用率 */
.
OSTaskCreate(ノ ); /* 建立其他任务 */
OSTaskCreate(ノ );
.
for (;;) {
}
}

10、

INT8U OSTaskChangePrio (INT8U oldprio, INT8U newprio);

11、OSTaskCreate()建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务必须为无限循环结构,且不能有返回点。

12、无论用户程序中是否产生中断,在初始化任务堆栈时,堆栈的结构必须与 CPU 中断后寄存器入栈的顺序结构相同。

13、

在任务中必须调用μC/OS 提供的下述过程之一:延时等待、任务挂起、等待事件发生(等待信号量,消息邮箱、消息队列),以使其他任务得到 CPU。

最新文章

  1. Laravel 5.3 登录注册底层实现详解
  2. nginx.conf
  3. 解决webstorm卡顿问题
  4. Fragment提交transaction导致state loss异常
  5. Android 隐式意图和显示意图的使用场景
  6. [No000056]你无法真正占有一个人,包括你的爱人,先生或太太、小孩,以及你自己....
  7. oracle过程中动态语句实现
  8. Django1.8教程——安装Django
  9. jmeter断言
  10. HDU 3642 Get The Treasury (线段树扫描线,求体积并)
  11. 网上关于sort结构体排序都不完整,我来写一个完整版的 2014-08-09 16:50 60人阅读 评论(0) 收藏
  12. 暂时告别Solr了
  13. Web的鼠标拖动效果
  14. mysql bit类型数据库中无法显示
  15. 依赖layui form模块 复选框tree插件(拓展可根据属性单选还是多选,数据反选)
  16. JSP——文件上传
  17. dskinlite(uieasy mfc界面库)使用记录4:listbox测试
  18. 【二分图带权匹配】Anagram @山东省第九届省赛 A
  19. webpack学习总结(一)
  20. 【Android】Android动态加载Jar、APK的实现

热门文章

  1. pycharm关闭pytest
  2. netstat 竟然还能这么玩儿?
  3. Linux实现MySQL数据库凌晨自动备份
  4. Solution -「LOCAL」逃生
  5. Azure AD(六)添加自定义域名
  6. MySQL windows下cmd安装操作
  7. 深入MySQL(二):MySQL的数据类型
  8. 使用MyBatis拦截器后,摸鱼时间又长了。🐟
  9. 『无为则无心』Python面向对象 — 47、Python中的self详解
  10. 在使用Vant中Uploader过程中遇到的坑:图片状态更改等