UCOS 杂项 笔记
1. 建立任务和建立数据队列 哪个先建立?
经过试验得知,数据队列和任务的建立先后没有顺序,都可以正常运行.
2.关于主函数的面试问题。
主函数写法有: int main() 和void main()
int main() 表示该函数必须有返回值,即程序实现中一定要有return xx;字样
void main() 表示函数不需要返回值,一定不能有return xx字样
否则程序编译都会出错
如果括号里面还有个 “void” 意思就是空 ,即 函数没有参数。
3.任务建立函数注意要点
调试函数花费一上午时间,问题泽恩也找不到,原来是格式不对。
OSTaskCreate(MyTask,(void*)0,&MyTaskStk(TASK_STK_SIZE-1),3);
上面这个任务建立函数出问题了 ,怎么也找不到原因???????????
仔细看是格式不对了,“【】”写成了“()”
下面这个建立任务是正确的:
OSTaskCreate(StartTask, (void *)0, &StartTaskStk[TASK_STK_SIZE-1], 0);
4.void OSStatInit (void)
#if OS_TASK_STAT_EN > 0
void OSStatInit (void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OSTimeDly(2);
OS_ENTER_CRITICAL();
OSIdleCtr = 0L;
OS_EXIT_CRITICAL();
OSTimeDly(OS_TICKS_PER_SEC / 10);
OS_ENTER_CRITICAL();
OSIdleCtrMax = OSIdleCtr;
OSStatRdy = TRUE;
OS_EXIT_CRITICAL();
}
#endif
在OSStatInit一开始延迟时间为2时钟节拍里:
第一,在就绪表中删除掉当前任务的就绪标志,这个当前任务也就是调用OSStatInt( )的用户编写的TaskStart()任务,这是用户创建的优先级最高的任务;
第二,令OSTCBDly = ticks也就是这个任务要延迟ticks所代表的时间;
第三,调用 OS_Sched( ),进行一次任务调度,在任务调度里找出优先级最高的任务,并进行任务切换,切换到现在的具有最高优先级的任务,使其运行。此时在任务调度的时候,TaskStart()任务又重新处于就绪状态,此时程序从OSTimeDly(2)中返回,接着执行下面下面的程序。执行完OSIdleCtr= 0L; 后,又进入一个延时程序OSTimeDly(OS_TICKS_PER_SEC / 10); ,本程序是又延迟了100毫秒,在这100毫秒中,TaskStart()任务处于等待状态,因此在这100毫秒中执行的是Idle任务。Idle任务会不断给OSIdelCtr计数,从而100毫秒后OSIdelCtr记录的就是100毫秒内被增加的最大次数(在这一秒中没有其它任务高于Idle任务,所以结果是最大的)。100毫秒延迟结束后。TaskStart()任务重新就绪,获得cpu使用权,就执行OSIdleCtrMax = OSIdleCtr; OSStatRdy = TRUE;此后程序结束。
OSStatInit一开始延迟时间为2时钟节拍,用于保持与系统时钟的同步,因为延迟之后调用的第一个语句为“OSIdelCtr=0”,基本不用花费系统时间,然后就进入第二个语句OSTimeDly(OS_TICKS_PER_SEC); 相当于再次延迟1s;在这延迟的一秒中,Idle任务会不断给OSIdelCtr计数,从而1s后OSIdelCtr记录的就是1s内被增加的最大次数(在这一秒中没有其它任务高于Idle任务,所以结果是最大的)。
在建立其他任务之前,必须调用OSStatInit()来确定用户的PC有多快。在一开始,OSStatInit()就将自身延时了两个时钟节拍,这样它就可以与时钟节拍中断同步。因此,OSStatInit()必须在时钟节拍启动之后调用;否则,用户的应用程序就会崩溃。当µC/OS-II调用OSStatInit()时,一个32位的计数器OSIdleCtr被清为0 ,并产生另一个延时,这个延时使OSStatInit()挂起。此时,uCOS-II没有别的任务可以执行,它只能执行空闲任务(µC/OS-II的内部任务)。空闲任务是一个无线的循环,它不断的递增OSIdleCtr。1秒以后,uCOS-II重新开始OSStatInit(),并且将OSIdleCtr保存在OSIdleMax中。所以OSIdleMax是OSIdleCtr所能达到的最大值。而当用户再增加其他应用代码时,空闲任务就不会占用那样多的CPU时间。OSIdleCtr不可能达到那样多的记数,如果用户程序每秒抚慰一次OSIdleCtr()。CPU利用率的计算由µC/OS-II 中的OSStatTask()函数来完成,这个任务每秒执行一次。而当OSStatRdy置为TRUE表示µC/OS-II将统计CPU的利用率。
OSStatInit()将返回到TaskStart()。所有任务可以都由TaskStart()中建立,由于TaskStart()的优先级为0(最高),新任务建立后不进行任务调度。当所有任务都建立完成后,TaskStart()将进入无限循环之中。
做嵌入式应用时,用户必须在第一个任务中打开时钟节拍中断。
void ARMStartTimer(void)
{
//autoreload and start m
rTCON = 0x9;
}
转载于:https://www.cnblogs.com/locean/p/5455771.html
UCOS 杂项 笔记相关推荐
- 实时操作系统UCOS学习笔记1----UCOSII简介
前面我们所有的实验都是跑的裸机程序(裸奔),从本章开始,我们开始介绍UCOSII(实时多任务操作系统内核). UCOSII简介 UCOSII的前身是UCOS,最早出自于1992年美国嵌入式系统专家Je ...
- 实时操作系统UCOS学习笔记5----UCOSIII移植
在2009年Micrium公司推出了UCOSIII,相对于UCOSII性能有了进一步的提升,支持时间片轮转调度,极短的关中断事件等.本章讲解如何在STM32F103开发板上移植UCOSIII操作系统. ...
- (杂项笔记)关于电脑网卡冲突的问题
java.net.SocketTimeoutException: connect timed out 的解决办法 最近在办公时换了一台电脑,发生了一个问题.当电脑连接了外网的WiFi后就无法访问内网的 ...
- python接口测试声音,python接口测试-登录
终于调同登录接口了 import requests import json import unittest import HTMLTestRunner ur1='http://118.178.247. ...
- UCOS学习(一)——前后台系统、RTOS系统
⏩ 大家好哇!我是小光,嵌入式爱好者,一个想要成为系统架构师的大二学生. ⏩最近开始学习UCOS操作系统,后面会更新一些关于UCOS学习笔记. ⏩今天了解了UCOS操作系统,总结一下知识点. ⏩感谢你 ...
- IAR中移植UCOS II系统以及sourceInsight 使用
ucos 学习笔记 1 sourceInsight 使用 CSDN参考链接 新建工程 第一步:project中new project 第二步:在高亮部分输入工程的地址,工程文件夹与IAR工程文件夹放在 ...
- [C/C++后端开发学习] 7 tcp服务器的epoll实现以及Reactor模型
tcp服务器的epoll实现以及Reactor模型 1 IO多路复用 select poll epoll 2 epoll详解 2.1 基本使用方法 2.2 LT水平触发和ET边沿触发 2.3 实现服务 ...
- 有个疑问--RTOS系统中,低优先级任务什么时候得到cpu去运行
在操作系统中,低优先级任务想要得到cpu使用权,是建立在高优先级任务遇到阻塞语句的前提下,比如等待事件标志.等待消息.等待信号量.遇见延迟函数等 而在低优先级任务执行过程中,高优先级任务在干什么,或者 ...
- 开发高可移植性J2ME的软件测试篇
[IT168 技术文档]随着MTK的流行,使现在的J2ME虚拟机市场上品牌众多,除了索爱,Nokia S40,Moto,三星,LG等国际大品牌的虚拟机,更是有MTK,展讯内置的一些不知名的虚拟机,因此 ...
最新文章
- 第十六课.Pytorch-geometric入门(一)
- 【错误记录】C 语言中通过指针操作字符串常量出错记录 ( 只有 栈内存 或 堆内存 中的数据才能通过指针修改 | 不要通过指针修改常量区的字符串 )
- Jboss4集群配置之四:启动Jboss集群
- python中的魔法参数:*args和**kwargs
- mysql数据恢复时显示多线程恢复_MySQL多线程备份恢复工具mydumper,myloder
- 一款JS+CSS实现的无缝平滑图片滚动代码
- html5画布页面,HTML5 界面元素 Canvas 参考手册
- 比Excel还简单,跳槽数据分析岗必会的工具
- 2017-2018-1 20179209《Linux内核原理与分析》第六周作业
- html中灰色怎么写,css如何实现置灰不可点
- keepalived track script introduce
- 【脑经急转弯】—— 灯亮还是灭?
- JavaScript 深入理解作用域
- URL地址编码和解码
- Tushare的安装及使用介绍
- C语言程序设计实验报告——实验六
- JMeter性能测试实战
- 硬件设计28之RS422、RS485
- echarts报表javascript插件简介
- Lua:协程,coroutine.create,coroutine.resume, coroutine.yield