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

初中做语文综合题的网站谷歌play商店

初中做语文综合题的网站,谷歌play商店,上海中建建筑设计院有限公司,单位网站建设要多少钱声明:该系列笔记是参考韦东山老师的视频,链接放在最后!!! rtos:这种系统只实现了内核功能,比较简单,在嵌入式开发中,某些情况下我们只需要多任务,而不需要文件…

        声明:该系列笔记是参考韦东山老师的视频,链接放在最后!!!

        rtos:这种系统只实现了内核功能,比较简单,在嵌入式开发中,某些情况下我们只需要多任务,而不需要文件功能,相反带上了文件工能反而对内存有限的单片机反而是一种负担。

        裸机开发程序执行流程:如果没有操作系统的的使用称为裸机开发,如果在while()循环里面有两个调度函数需要执行,程序执行顺序是在执行完A函数之后,才会去执行B函数。

int main()
{while(1)
{Mother_Freed();//A函数Mother_Message();//B函数
}
return 0;
}

 

        这就造成了一个问题,那就是,在执行A函数的期间B函数是得不到相应的,只能等待A函数,执行结束,A函数是喂孩子,B函数是回复消息,如果B函数执行时间过长,不执行A函数孩子是不是就饿死了。为了解决这个问题可以加入操作系统,也就是freertos。

        rtos开发程序执行流程:rtos操作系统会将执行函数,封装为任务,每个任务分配时间达到时间切换任务,由于分配时间较短,在外界看来就是同时执行多任务,使用操作系统就可以解决上面的难题。

             

            

void Mother_Freed(void);//声明函数
void Mother_Message(void);//声明函数int main()
{
create_task(喂饭);//创建任务 
create_task(发消息);//创建任务
start_scheduler();//执行任务调度器
while(1)
{
sleep();
}}
void Mother_Freed(void)//封装
{
while(1)
{
Mother_free();//调用函数喂饭
}
}
void Mother_Message(void)//封装
{
while(1)
{
Mother_message();//调用函数发消息
}
}

        rtos互斥操作:在操作系统中,同时执行多个任务的时候,如果多任务访问同一资源,就会发生互斥,这个时候会出现数据混乱,有可能出现死锁,可以通过软件加入变量,互斥使用系统资源。

int g_canuse = 1;
03
04 void uart_print(char *str)
05 {
06     if (g_canuse)
07 {
08     g_canuse = 0;
09     printf(str);
10     g_canuse = 1;
11 }
12 }
13
14 task_A()
15 {
16     while (1)
17 {
18     uart_print("0123456789\n");
19 }
20 }
21
22 task_B()
23 {
24     while (1)
25 { uart_print("abcdefghij");
27 }
28 }
29
30 void main()
31 {
32 // 创建 2 个任务
33     create_task(task_A);
34     create_task(task_B);
35 // 启动调度器
36     start_scheduler();
37 }

       当 g_canuse = 0;这个变量等于0的时候,就可以,对大多数访问同一资源的情况出现互斥,但是只是大部分,因为rtos这个操作系统,在执行任务转换的时候,A执行进入if函数转换,B函数执行printf();执行一般转换,在执行A就会发现打印出来的数字还是乱码的情况,但是可以避免大部分情况。

        出现上面的原因是因为,先变量判断在赋值,如果我们将赋值提前可以避免,出现失误嘛,如果,我们将usart_printf();这个函数重新定义为一下格式,会不会完全避免这种情况。

01 void uart_print(char *str)
02 {
03 g_canuse--; ① 减一
04 if( g_canuse == 0 ) ② 判断
05 {
06 printf(str); ③ 打印
07 }
08 g_canuse++; ④ 加一
09 }

        这里即使将变量赋值提前,但是还是会出现打印出错的情况,语句1的执行可以分为3个步奏,1从内存读取变量的值放入寄存器2修改寄存器的值让变量减1 3把寄存器的值写到内存变量上面如果执行12切换到B任务,此时变量还是1,B任务执行进行printf打印一半进行切换,A任务会从打断地方执行,也能进入if函数,这个时候打印出来也会是混乱的值。

        当我们使用rtos,写多任务程序的时候一定要注意,函数资源互斥问题,任何一种操作系统都会提供相应的函数。

         rtos互斥操作:如果任务之间有依赖关系,比如任务 A 执行了某个操作之后,需要任务 B 进行后续的处理。如果代码如下编写的话,任务 B 大部分时间做的都是无用功。

// RTOS 程序
02 int flag = 0;
03
04 void task_A()
05 {
06 while (1)
07 {
08 // 做某些复杂的事情
09 // 完成后把 flag 设置为 1
10 flag = 1;
11 }
12 }
13
14 void task_B()
15 {
16 while (1)
17 {
18 if (flag)
19 {
20 // 做后续的操作
21 }
22 }
23 }
24
25 void main()
26 {
27 // 创建 2 个任务
28 create_task(task_A);
29 create_task(task_B);
30 // 启动调度器
31 start_scheduler();
32 }
上述代码中,在任务 A 没有设置 flag 为 1 之前,任务 B 的代码都只是去判断 flag。而
任务 A、B 的函数是依次轮流运行的,假设系统运行了 100 秒,其中任务 A 总共运行了 50
秒,任务 B 总共运行了 50 秒,任务 A 在努力处理复杂的运算,任务 B 仅仅是浪费 CPU 资源。
如果可以让任务 B 阻塞,即让任务 B 不参与调度,那么任务 A 就可以独占 CPU 资源加快
处理复杂的事情。当任务 A 处理完事情后,再唤醒任务 B。示例代码如下:
// RTOS 程序
02 void task_A()
03 {
04 while (1)
05 {
06 // 做某些复杂的事情
07 // 释放信号量,会唤醒任务 B;
08 }
09 }
10
11 void task_B()
12 {
13 while (1)
14 {
百问网
13
15 // 等待信号量, 会让任务 B 阻塞
16 // 做后续的操作
17 }
18 }
19
20 void main()
21 {
22 // 创建 2 个任务
23 create_task(task_A);
24 create_task(task_B);
25 // 启动调度器
26 start_scheduler();
27 }

http://www.jinmujx.cn/news/116976.html

相关文章:

  • 网站备案 换域名seo优化器
  • 网站开发有年龄限制吗广州线上教学
  • 樟木头镇网站建设互联网营销平台
  • 在哪做网站建设做网络营销推广的公司
  • 临沂专业网站建设设计公司当日网站收录查询统计
  • 柳州城乡建设管理局网站聊城网站推广公司
  • 北京网站制作公司招聘信息鼓楼网站seo搜索引擎优化
  • 成都建设网站标化最新表格企业员工培训总结
  • 商城网站建设服务器免费发布信息网网站
  • 化妆品网站模板免费下载长春网站建设制作
  • 2016网站设计欣赏网站托管服务商
  • owasp+网站开发百度应用下载
  • 网站网站开发奶茶推广软文200字
  • 百度申诉网站企业推广文案范文
  • 承德公司做网站百度指数峰值查询
  • 有哪些免费建站的网站app网络推广公司
  • 网站后台发邮件四川专业网络推广
  • wordpress 教育seo广告投放是什么意思
  • 如何做高端网站免费人脉推广软件
  • 装饰公司手机网站建设手机打开国外网站app
  • php源代码做网站如何做市场推广方案
  • 领创科技网站开发郑州seo博客
  • 怎么给汽车网站做推广百度首页纯净版
  • 做网站需要看啥书搜索引擎优化心得体会
  • 怎么查网址是不是诈骗网站2022拉新推广平台
  • 外贸论坛网站有哪些全球网站访问量排名
  • 网站开发到上线 多久seo检查工具
  • 江门网站建设方案爱站网关键词查询系统
  • wordpress给页面html后缀抖音seo培训
  • 网站首页置顶是怎么做外链推广论坛