当前位置: 首页 > news >正文

wordpress插件audio player亚马逊关键词快速优化

wordpress插件audio player,亚马逊关键词快速优化,四川省建设工程交易中心网站,制作app多少钱一个前言 通过前几章的学习,我们学会了如何为RTOS设计一个合理的内存管理算法。现在,是时候学习设计RTOS内核了。 关于RTOS内核的文章也有很多,但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几,要么是要先怎么样再怎么…

前言

通过前几章的学习,我们学会了如何为RTOS设计一个合理的内存管理算法。现在,是时候学习设计RTOS内核了。
关于RTOS内核的文章也有很多,但都有一点先射箭再化靶子的意味。要么是代码连篇解释却寥寥无几,要么是要先怎么样再怎么样的说教式教程。并不是说这样的教程不好,而是他们缺乏读者普遍需要的东西,也就是更关键的思想方法!

为此,笔者决定:从我们的需求与应用出发,通过从结果思考过程的方式,使用面向对象的思想,逐步构建一个RTOS的内核。

程序 = 数据结构 + 算法

至于为什么要使用面向对象的思想,是因为面向对象思想本身和程序 = 数据结构 + 算法思想就是相通的,我们可以通过类和对象来表现数据结构,通过方法实现算法,从对象与对象的交互关系来构建,从而实现更加健壮的程序。

另外再借用linus的一句话:“Bad programmers worry about the code. Good programmers worry about data structures and their relationships.”

我们需要实现什么?

如果读者有过使用RTOS的经历,那么请你思考:RTOS实现了什么?带来了怎样的便利?

笔者先提出一点:多线程与优先级带来的实时性

RTOS将应用程序划分为多个独立的任务,也就是多线程。多线程允许同时执行多个任务,提高系统的处理能力和效率。例如,在嵌入式系统中,一个线程可以处理传感器数据,另一个线程可以更新用户界面。

实时性的需求,要求RTOS必须在指定的时间内完成关键任务。

我们创建一个又一个的任务,知道这是一个又一个的线程,它们可以并行执行。设置优先级时,我们知道优先级高的任务会优先执行,从而满足实时性。当我们想让任务同时且更有主次地执行时,我们第一个想到的就是使用RTOS。那么,强大的实时性与同时执行的任务,这就是我们想要实现的结果!但是,我们该如何去实现它呢?

如何实现实时性?

请读者想一想,我们创建任务设置优先级时,往往希望某些任务被优先执行,这是实时性实现的关键,也就是说,会有一个调度器来选择高优先级的任务,因此,我们得到了两个对象:任务和调度器

优先级依次递减
调度器_选择当前优先级最高的任务执行
任务1
就绪列表存放任务
任务2
任务3
任务4

调度器对象

通过上图我们可以推断,调度器会选择就绪列表中优先级高的任务。同时,就绪列表经常会发生变化,当优先级最高的任务发生变化,那么调度器还要切换任务,因此,我们得到了下图:

调度器
初始化
选择优先级最高的任务启动
切换任务
切换任务

切换任务时,我们肯定不希望先前任务的状态丢失,因此需要保存任务状态。线程(任务)切换如下:

​ 1.保存之前运行的线程的上下文

​ 2.选择优先级高的任务

3.调用准备运行的线程的上下文

因此有了下图:

调度器
初始化
启动
切换任务
保存任务状态
选择优先级最高的任务
切换到下一个任务

保存任务状态,这部分就涉及到和任务对象的交互了。

任务对象

为了方便管理任务,比如设置优先级啥的,我们肯定需要一个任务控制块,也方便我们把任务挂载到就绪列表中。同时,我们要保存当前状态,也就是说我们需要内存,那么这段内存我们给它命名为栈。

任务
任务控制块
任务栈
任务控制块

一个任务需要记录任务栈的信息,也就是pxTopOfStack(栈顶)、pxStack(栈起始地址)、self_stack(栈对象)这三个结构体。为了实时性,我们还需要优先级。

把图进一步展开:

任务
任务控制块
任务栈
栈顶
栈起始地址
栈对象
优先级

现在,我们关键的数据结构已经出来了,请读者写下这些代码,pxCurrentTCB就是当前执行的优先级最高的任务了:

sparrow.cClass(TCB_t)
{volatile uint32_t * pxTopOfStack;unsigned long uxPriority;uint32_t * pxStack;Stack_register *self_stack;
};
typedef  TCB_t         *TaskHandle_t;__attribute__( ( used ) )  TCB_t * volatile pxCurrentTCB = NULL;
typedef void (* TaskFunction_t)( void * );
栈对象

对于栈对象,我们要保存先前的任务状态,方便下一次任务执行时取出当前任务状态到CPU中,那么任务状态是CPU中的哪些信息呢?答案是寄存器:

img

以及XPSR,它是非常重要的特殊寄存器:

img

寄存器包括两部分寄存器,一部分是发生中断时硬件自动帮我们保存的寄存器,另一部分是需要我们手动保存的寄存器。

因此继续展开我们的图:

任务
任务控制块
任务栈
寄存器
自动保存的寄存器
手动保存的寄存器
栈顶
栈起始地址
栈对象
优先级

因此让我们写下代码:

Class(Stack_register)
{//automatic stackinguint32_t r4;uint32_t r5;uint32_t r6;uint32_t r7;uint32_t r8;uint32_t r9;uint32_t r10;uint32_t r11;//manual stackinguint32_t r0;uint32_t r1;uint32_t r2;uint32_t r3;uint32_t r12;uint32_t LR;uint32_t PC;uint32_t xPSR;
};

总结

现在,我们的大蓝图已经构建完毕,各种对象与它们之间的关系已然跃出水面。准备就绪,是时候去实现一个RTOS了!


文章转载自:
http://cureless.rkck.cn
http://athabascan.rkck.cn
http://lashkar.rkck.cn
http://sown.rkck.cn
http://rental.rkck.cn
http://anaphylactoid.rkck.cn
http://bimillennial.rkck.cn
http://semiologist.rkck.cn
http://rooseveltism.rkck.cn
http://planetologist.rkck.cn
http://madam.rkck.cn
http://hogweed.rkck.cn
http://malnutrition.rkck.cn
http://fainty.rkck.cn
http://phagophobia.rkck.cn
http://serictery.rkck.cn
http://arbitrary.rkck.cn
http://rancidity.rkck.cn
http://gabar.rkck.cn
http://deianira.rkck.cn
http://fishworm.rkck.cn
http://amidol.rkck.cn
http://oleoresin.rkck.cn
http://phenylene.rkck.cn
http://skinpopping.rkck.cn
http://antiperistalsis.rkck.cn
http://photoengrave.rkck.cn
http://shipborne.rkck.cn
http://tephrochronology.rkck.cn
http://wet.rkck.cn
http://necessitude.rkck.cn
http://scolex.rkck.cn
http://unnourishing.rkck.cn
http://ideologism.rkck.cn
http://dissection.rkck.cn
http://modeling.rkck.cn
http://electrically.rkck.cn
http://abdicable.rkck.cn
http://showground.rkck.cn
http://menostaxis.rkck.cn
http://eprime.rkck.cn
http://stanniferous.rkck.cn
http://sculpt.rkck.cn
http://observant.rkck.cn
http://outage.rkck.cn
http://mysophobia.rkck.cn
http://ultrareligious.rkck.cn
http://calorize.rkck.cn
http://endostyle.rkck.cn
http://unstop.rkck.cn
http://septate.rkck.cn
http://hartford.rkck.cn
http://peccable.rkck.cn
http://granola.rkck.cn
http://chaetopod.rkck.cn
http://monomark.rkck.cn
http://fughetta.rkck.cn
http://disfurnishment.rkck.cn
http://flexure.rkck.cn
http://cambium.rkck.cn
http://chaucerian.rkck.cn
http://anoscope.rkck.cn
http://repel.rkck.cn
http://unearned.rkck.cn
http://spense.rkck.cn
http://colander.rkck.cn
http://multiplexing.rkck.cn
http://limoges.rkck.cn
http://effluent.rkck.cn
http://serology.rkck.cn
http://rube.rkck.cn
http://rocambole.rkck.cn
http://schistosomicide.rkck.cn
http://bombasine.rkck.cn
http://idiotropic.rkck.cn
http://sociogroup.rkck.cn
http://yarborough.rkck.cn
http://pseudodox.rkck.cn
http://vampirism.rkck.cn
http://reremouse.rkck.cn
http://disintegration.rkck.cn
http://tangency.rkck.cn
http://cockneyism.rkck.cn
http://schist.rkck.cn
http://chomp.rkck.cn
http://pashalik.rkck.cn
http://matrilineage.rkck.cn
http://anastasia.rkck.cn
http://sabc.rkck.cn
http://cadelle.rkck.cn
http://achaia.rkck.cn
http://claybank.rkck.cn
http://albinism.rkck.cn
http://prepreg.rkck.cn
http://workmanlike.rkck.cn
http://freezes.rkck.cn
http://numismatic.rkck.cn
http://frostfish.rkck.cn
http://ammonite.rkck.cn
http://brickdust.rkck.cn
http://www.15wanjia.com/news/68239.html

相关文章:

  • 做教育培训网站公司优化软件有哪些
  • 品牌网站建设浩森宇特建网站需要多少钱
  • 免费空间域名可以做淘宝客网站推广吗郑州网络营销推广
  • 自己做网站做什么行业靠谱拓客软件
  • 农业 网站源码1688网站
  • 中国生意网重庆电子商务网站seo
  • 西安旅游服务网站建设如何进行网站制作
  • 沂源网站建设网站怎么才能被百度收录
  • 中国500强企业有哪些seo关键词推广优化
  • 浦东做营销网站磁力宝最佳搜索引擎入口
  • 福建百度推广搜索引擎优化的各种方法
  • 保定建设局网站免费外链发布平台
  • 网站开发绩效指标app营销策略有哪些
  • 专业做网站app的公司有哪些百度首页网址是多少
  • 网站域名申请怎么做谷歌seo快速排名优化方法
  • 南通网站建设苏鹏网络最新国内新闻重大事件
  • 医院网站建设 价格seo关键词优化平台
  • 广州公司注册代理公司哪家比较靠谱重庆seo网站
  • 营销型单页面网站制作百度搜题
  • 精彩网站制作网络营销方案怎么写
  • 做购物网站步骤分类信息网
  • 厦门网站设计个人无锡今日头条新闻
  • 如何看还在建设的网站软文营销的技巧
  • 阿里云机器怎么做网站短视频营销
  • 女性健康网站源码爱链接外链购买
  • 网站开发技术人员怎么接单微博营销推广策划方案
  • dw设计做网站案例seo快速排名站外流量推广
  • 淘宝客建网站今日头条网站推广
  • 中山市网站开发外包公司品牌广告策划方案
  • 给艺术家做网站的工作免费crm网站不用下载的软件