历史上的今天
返回首页

历史上的今天

今天是:2025年01月21日(星期二)

正在发生

2021年01月21日 | 快速学Arm(7)--uC/OS-II微小内核提供的14个用户接口函数

2021-01-21 来源:eefocus

这个系列的文章基本上记录了我学习的经过,我平时很忙,学什么东西都力争在最短的时间学到最多的东西.有时候因为太忙了,很多学习过程被中途打断,然后要隔一段时间才能重新再继续.学习方法对于我们掌握知识非常重要,我时常会抱怨下属或同事的学习速度慢,但又无法一下把经验传授出去.而且有些人的个人习惯也无法一下改变.现在技术发展很快,要学的东西很多,类似传统的学习方法肯定是跟不上时代的.


前几篇文章,我介绍了如何让我把运行的环境搭起来,这些学习的第一步,很多本本先生是不喜欢这一步骤的,因此他们永远把知识停留在书本上,理论上头头是道,实际却什么都做不了,"秀才".


接下来,的想法是打开Sample,找到main()函数,同样,我们也不着急去学什么东西,按照书本顺序学习是不行的,必须有自己的思路.在main()函数中我看到了一些uC/OS-II的系统函数,查了一下书,这些函数是uC/OS提供的用户接口函数,书上说一共14个.函数大概如下:

1.OSInit():

初始化uC/OS-II.必须在调用OSStart()函数之前调用此函数,而只有在调用OSStart()函数之后,uC/OS才真正开始运行多任务.

 

2.OSStart():

启动uC/OS的多任务环境,在调用OSStart()之前必须先调用OSInit().在用户程序中OSStart()只能被调用一次,第二次调用OSStart()将不执行任何操作.

 

3.OSTaskCreate():

建立一个新任务.即可以在多任务环境启动之前,也可以在真正运行的任务中创建任务.任务堆栈必须声明为OS_STK类型.注意在中断处理程序中不能建立任务.在任务中必须调用uC/OS提供的下述过程只有:延时等待,任务挂起,等待事件发生(等待信号量,消息信箱,消息队列),以便其他任务也能获取CPU的使用权.

 

4.OSTimeDly():

将一个任务延时若干个时钟节拍.延时事件的长度可以从0到65535个时钟节拍,延时时间0表示不进行延时,函数将立即返回调用者,延时的具体时间依赖于系统每秒钟有多少个时钟节拍(由文件OS_CFG.H中的常量OS_TICKS_PER_SEC设定).延时时间0表示不进行延时操作,而立即返回调用者,为了确保设定的延时时间,建议用户设定的时钟节拍数加1,例如希望延时10个时钟节拍,可以设定参数为11.

 

5.OSTimeTick():

在每次时钟节拍中断服务程序中被调用.此函数检查处于延时状态的任务十分达到延时时间,或正在等待事件的任务十分超时.OSTimeTick()的运行时间和系统中的任务数直接相关,在任务中断中都可以调用.如果在任务中调用,任务的优先级应该很高(优先级数字很小),这是因为OStimeTick()负责所有任务的延时操作.

 

6.OSTaskDel():

删除一个指定优先级的任务.被删除的任务将回到休眠状态,任务呗删除后可以用函数OSTaskCreate()重新建立.

 

7. OSIntEnter函数:

通知uC/OS一个中断服务程序已开始执行,这有助于uC/OS掌握中断嵌套的情况,通常OSIntExit()和OSIntEnter()联合使用.在中断服务程序中,如果保证直接递增OSIntNesting"原子操作",中断服务程序使用直接递增OSIntNesting的方法而不用调用OSIntEnter()函数.


注:原子操作--在一个任务执行过程中,如果某些操作不希望在执行过程中被别的任务或中断打断,那么这些不希望被打断的操作就是原子操作.

 

8.OSIntExit():

通知uC/OS一个中断服务以及执行完毕,这有助于uC/OS-掌握中断嵌套情况.通常OSIntExit()和OSIntEnter()联合使用.但最后一层嵌套中断执行完后,如果有更高优先级的任务准备就绪,uC/OS会调用任务调度函数,在这种情况下,中断返回到更高优先级的任务而不是被中断的任务.在任务不能调用该函数.即使中断服务程序使用直接递增OSIntNesting的方法(没有调用OSIntEnter()),也必须调用OSIntExit()函数.

 

9.OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL():

一般来说,OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()为宏定义,用来禁止,打开CPU的中断.二者必须成对使用.

 

10. OSSemCreate()函数:

建立并初始化一个信号量.必须先建立信号量,然后使用.

 

11. OSSemPend():

等待信号量,当任务调用此函数时,如果信号量的值大于0,那么OSSemPend()函数对该值减一并返回,如果调用函数信号量等于0,那么次函数将任务加入信号量的等待列表,任务将等待直到获得信号量或超时.必须先建立信号量,然后使用,不允许在中断中调用该函数,因为中断不能挂起.

 

12.OSSemPost():

发送信号量,如果指定的信号量是0或者大于0,此函数递增该信号量并返回.如果有人问在等待信号量,这最高优先级的任务将得到信号量并进入就绪状态.然后进行任务调度,决定当前允许的任务是否仍然处于最高优先级的就绪态任务.必须先建立信号量,然后使用.

 

13.OSSemDel():

删除信号量,在删除信号量之前,应当删除可能会使用这个信号量的任务.

   1.使用这个函数调用时,必须特别小心,引起其他任务可能还要用这个信号量.

   2.但挂起任务就绪时,中断关闭时间与挂起任务数目有关.

   3.其他任务并不知道信号量被删除,除非检查pevent是否直线NULL.


推荐阅读

史海拾趣

艾迪沃德公司的发展小趣事
尽量使用稳定的交流电源供电,避免电压波动过大对电源电路造成冲击。
Firadec公司的发展小趣事

背景:随着全球环保意识的增强,绿色电子产品成为了市场的新宠。Firadec公司积极响应环保号召,致力于开发绿色电子产品。

发展:公司投入大量资源研发环保材料和生产工艺,成功推出了一系列符合环保标准的电子产品。同时,Firadec还建立了完善的回收体系,对废旧电子产品进行回收再利用。

影响:环保和可持续发展的理念不仅提升了Firadec公司的品牌形象,也为其赢得了更多消费者的青睐。公司因此在绿色电子产品市场中占据了领先地位。

Corex Intervest Inc公司的发展小趣事

Corex Intervest Inc公司在电子行业的发展历程中,始终保持着稳健的步伐和进取的精神。公司不断适应市场变化和技术更新,不断调整战略方向和发展重点。在未来,公司将继续加大研发投入,拓展新的应用领域和市场空间,为电子行业的发展贡献更多的力量。

这五个故事展示了Corex Intervest Inc公司在电子行业中的发展历程和取得的成就。从创立初期的艰难起步到技术创新、市场拓展、战略合作和持续发展的不断推进,Corex Intervest Inc公司始终保持着积极进取的精神和不断创新的态度,在电子行业中取得了显著的成绩。

Cavium Networks公司的发展小趣事

作为一家在电子行业具有影响力的公司,Cavium Networks 始终保持着持续创新的精神。公司不断投入研发资源,推出了一系列具有创新性和领先性的产品和技术。同时,Cavium Networks 也积极参与国际标准和行业规范的制定工作,为电子行业的健康发展贡献了自己的力量。正是这种不断创新和追求卓越的精神,使得 Cavium Networks 在电子行业中保持了领先地位,并引领着行业的未来发展。

以上五个故事虽然基于虚构,但它们都紧密围绕 Cavium Networks 在电子行业中的发展历程和关键事件展开,展示了公司在技术创新、市场拓展和合作发展等方面的努力和成就。这些故事旨在展现 Cavium Networks 的发展轨迹和行业影响力,同时也反映了电子行业的快速发展和变革。

Achronix Semiconductor Corporation公司的发展小趣事

在追求高性能与业务和谐的道路上,Cavium Networks 与 Wind River 公司展开了深度合作。两家公司共同制定了长期的产品研发路线,Wind River 为 Cavium 的 OCTEON II 等多核处理器提供了商业级支持。通过合作,双方共同调整和优化了领先的多核硬件和软件解决方案,为用户提供了世界领先的多核解决方案。这一合作不仅提升了 Cavium Networks 的技术实力和市场地位,也推动了整个电子行业的发展。

宝乘(baocheng)公司的发展小趣事

在激烈的市场竞争中,宝乘公司始终坚持质量为本的原则。公司建立了严格的质量管理体系,从原材料采购到生产加工、产品测试等各个环节都严格把关。正是这种对质量的执着追求,让宝乘的产品赢得了客户的信赖和好评。许多知名企业都成为了宝乘的长期合作伙伴,共同推动电子行业的发展。

问答坊 | AI 解惑

《单片机原理·接口及应用》学习参考

《单片机原理·接口及应用》学习参考…

查看全部问答>

verilog中代码风格分析

verilog 代码例程上这样写:output so;reg bb;always@()begin.......bb<= ..........end  assign so= bb;为什么不直接output reg so;always @()begin........so<= .............end这种风格 有什么好处呢?…

查看全部问答>

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?

用三星的6410,通过USB下载NK,怎么老是报校验和错误啊?为什么?USB线不稳定?…

查看全部问答>

关于WinCE开发的一些常识问题

我一直以来都是用Linux的,从来没有用过商业的嵌入式OS,现在有些需要想了解一下。 WinCE开发从哪里可以下到最新的试用版或者免费的OS(用了学习和试验)? 现在最新的WinCE是哪个版本? 其与什么Pocket PC等是什么关系? 做WinCE的开发用什么开 ...…

查看全部问答>

硕士毕业论文的课题做什么好。

我现在正处于选择课题的困惑之中,我导师是做软件的,但我想做嵌入式开发,他让我自己找一个题目做,但是现在不知道做什么好,无从下手,大家给点意见。最后有公司计划开发什么课题,需要人做前期知识积累,我可以无条件参加,甚至可以毕业后到贵公 ...…

查看全部问答>

C8051F组的能不能公布Protel格式的图纸

收到板后,焊接了几个芯片,发现没有图纸极不方便,尤其是没有PCB图,由于板子上的丝印有的地方不太清楚,老是分不清正反方向。…

查看全部问答>

【为C2000做贡献】基于DSP的CCD图像处理系统在点钞机中的应用

基于DSP的CCD图像处理系统在点钞机中的应用摘要介绍了一种基于DSP(数字信号处理器)的CCD(电荷耦合器件)图像处理系统的设计方法,采用线阵CCDTCD1 42D与TI公司的TMS320F281 2DSPDSP和89C52单片机结合设计了一种图像处理系统。介绍了系统硬件设计 ...…

查看全部问答>

dsp外接内存的问题

大家好:我用OMAP芯片,DSP为C674x的 通过EMIFB外接了一块内存,16位。之前开发板的程序在32位外接内存上没问题,我将EMIF的寄存器设置为16位,但还是不对。程序始终显示“running”不报错,请教! (cmd文件是这样的: MEMORY {    ...…

查看全部问答>

LPC2103周立功配套教程很基础实用以及电路原理图

周立功对于LPC2103的配套教程,感觉还是比较简单易懂的,和大家分享一下 [ 本帖最后由 mdq123 于 2012-7-2 09:36 编辑 ]…

查看全部问答>

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,据说标题越长越被人看到!

利用pci-e实现工业控制中测试仪器的高精度数据采集系统,单板实现。外部直接接传感器。 PCI-E看到上次altera研讨会演示过,想用他用在产品中。 [ 本帖最后由 lfeng105 于 2012-10-18 10:32 编辑 ]…

查看全部问答>