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

wordpress下载类主题西安网站建设推广优化

wordpress下载类主题,西安网站建设推广优化,出口做食品网站,用订制音乐网站做的音乐算原创吗个人主页~ 这篇文章是我亲身经历的,在做完一个项目之后总结的经验,虽然我没有将整个项目给放出来,因为这项目确实也是花了米让导师指导的,但是这个过程对于STM32的实战项目开发都是非常好用的,可以说按照这个过程&…

在这里插入图片描述
个人主页~

这篇文章是我亲身经历的,在做完一个项目之后总结的经验,虽然我没有将整个项目给放出来,因为这项目确实也是花了米让导师指导的,但是这个过程对于STM32的实战项目开发都是非常好用的,可以说按照这个过程,在你熟悉各种外设的前提下,你可以不用受别人指导地进行一个项目,甚至完成自己的一个作品


实战项目的实现过程

  • 一、FreeRtos
    • 1、简介
    • 2、功能
      • (1)裸机开发
      • (2)基于Rtos的开发
    • 3、格式
      • (1)定义任务
      • (2)定义空闲任务
      • (3)main函数
      • (4)开始任务函数

一、FreeRtos

1、简介

Rtos就是实时操作系统,os的意思就像是我们常用的iOS、HamonyOS是一个意思,就是操作系统的意思,而FreeRtos就是免费的实时操作系统,在嵌入式系统中非常常用

它的底层代码是用C语言写成的,可移植性特别好,且简单易用,核心代码有9000多行

2、功能

(1)裸机开发

像STM32在开始学习的时候,我们的程序是一个main函数,里面的代码一行接着一行执行,非常单一,只要写好程序,程序就会按照既定的顺序执行,不会出现某一段代码先于前面几行的代码的情况,也就是实时性差,这叫做裸机开发也就是不带操作系统的开发,它常用于不需要高实时性的场景的产品开发

在delay函数下的等待只能等待,没有占用CPU的情况,浪费资源

(2)基于Rtos的开发

Rtos有很多种,除了FreeRtos以外,我们可以在浏览器上搜索其他的Rtos,但在所有嵌入式系统中,FreeRtos是应用最多的

添加了Rtos的嵌入式系统实时性会提高,我们可以将某些程序分为多个任务,给予它们优先级,优先级高的优先获得CPU使用权,也就是一个优先级低的任务执行过程中,优先级高的任务一旦出现需要执行的情况,优先级低的任务立刻发生中断,先让优先级高的任务完成,然后再回到原来的位置继续执行,而且这个过程是可以嵌套的,在优先级1的任务过程中,优先级2的任务可以中断优先级1的任务,然后优先级3的任务又可以中断优先级2的任务

多个任务可以同一优先级,创建的实时任务数量没有软件限制,也就是说,在理想条件下,创建的实时任务可以有无数个

在不断中断的过程中,嵌入式系统捕捉外界变化的能力变得十分灵敏,实时性有所提高

在delay函数下按照优先级的顺序使用CPU,确保CPU能在每个时间段都有事情可做,节省资源

3、格式

FreeRtos的配置过程可以直接看正点原子的视频教程,这里其实只要懂得基本原理即可,直接找一个现成的文件用就可以,实在想要自己做就跟着视频教程一步一步来搭建一个Rtos系统
在这里插入图片描述
我们这里就不讲怎么配置了,文本解释不清还占用篇幅

(1)定义任务

//任务优先级
#define START_TASK_PRIO		1
//任务堆栈大小
#define START_STK_SIZE 		128  
//任务堆栈
StackType_t StartTaskStack[START_STK_SIZE];
//任务控制块
StaticTask_t StartTaskTCB;
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);//任务优先级
#define TASK1_TASK_PRIO		2
//任务堆栈大小
#define TASK1_STK_SIZE 		128  
//任务堆栈
StackType_t Task1TaskStack[TASK1_STK_SIZE];
//任务控制块
StaticTask_t Task1TaskTCB;
//任务句柄
TaskHandle_t Task1Task_Handler;
//任务函数
void task1_task(void *pvParameters);//任务优先级
#define TASK2_TASK_PRIO		3
//任务堆栈大小
#define TASK2_STK_SIZE 		128  
//任务堆栈
StackType_t Task2TaskStack[TASK2_STK_SIZE];
//任务控制块
StaticTask_t Task2TaskTCB;
//任务句柄
TaskHandle_t Task2Task_Handler;
//任务函数
void task2_task(void *pvParameters);

开始任务start_task是必须要有的,然后按照一样的格式将任务1234等创建好,确定堆栈以及堆栈大小,控制块、句柄以及任务函数的声明

(2)定义空闲任务

//空闲任务堆栈
static StackType_t Idle_Task_Stack[configMINIMAL_STACK_SIZE];
//定时器任务堆栈
static StackType_t Timer_Task_Stack[configTIMER_TASK_STACK_DEPTH];//空闲任务控制块
static StaticTask_t Idle_Task_TCB;	
//定时器任务控制块
static StaticTask_t Timer_Task_TCB;//获取空闲任务的任务堆栈和任务控制块内存,因为本例程使用的是静态内存
//因此空闲任务的任务堆栈由用户来提供,接口函数就是下面这个函数//ppxIdleTaskTCBBuffer:任务控制块内存
//ppxIdleTaskStackBuffer:任务堆栈内存
//pulIdleTaskStackSize:任务堆栈大小
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize)
{*ppxIdleTaskTCBBuffer=&Idle_Task_TCB;*ppxIdleTaskStackBuffer=Idle_Task_Stack;*pulIdleTaskStackSize=configMINIMAL_STACK_SIZE;
}//获取定时器任务的任务堆栈和任务控制块内存
//ppxTimerTaskTCBBuffer:任务控制块内存
//ppxTimerTaskStackBuffer:任务堆栈内存
//pulTimerTaskStackSize:任务堆栈大小void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t**ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize)
{*ppxTimerTaskTCBBuffer=&Timer_Task_TCB;*ppxTimerTaskStackBuffer=Timer_Task_Stack;*pulTimerTaskStackSize=configTIMER_TASK_STACK_DEPTH;
}

在这里插入图片描述

(3)main函数

int main()
{//在前面这里放所使用模块的初始化,将所有用到的外设驱动起来//下面就是开始任务函数的定义StartTask_Handler=xTaskCreateStatic((TaskFunction_t	)start_task,//任务函数		(const char* 	)"start_task",//任务名称		(uint32_t 		)START_STK_SIZE,	//任务堆栈大小(void* 		  	)NULL,		//传递给任务函数的参数		(UBaseType_t 	)START_TASK_PRIO, //任务优先级	(StackType_t*   )StartTaskStack,	//任务堆栈(StaticTask_t*  )&StartTaskTCB);	         //任务控制块vTaskStartScheduler();//开启任务调度
}

在这里插入图片描述

(4)开始任务函数

在FreeRtos进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断
一般我们都会使用这个临界区,进入和退出是配套使用的,我们在使用的时候要尽量保持临时段耗时短

//开始任务函数
void start_task(void *pvParameters)
{taskENTER_CRITICAL();         //进入临界区//创建task1任务Task1Task_Handler=xTaskCreateStatic((TaskFunction_t	)task1_task,		(const char* 	)"task1_task",		(uint32_t 		)TASK1_STK_SIZE,	(void* 		  	)NULL,				(UBaseType_t 	)TASK1_TASK_PRIO, 	(StackType_t*   )Task1TaskStack,	(StaticTask_t*  )&Task1TaskTCB);	//创建task2任务Task2Task_Handler=xTaskCreateStatic((TaskFunction_t	)task2_task,		(const char* 	)"task2_task",		(uint32_t 		)TASK2_STK_SIZE,	(void* 		  	)NULL,				(UBaseType_t 	)TASK2_TASK_PRIO, 	(StackType_t*   )Task2TaskStack,	(StaticTask_t*  )&Task2TaskTCB);vTaskDelete(StartTask_Handler); //删除开始任务taskEXIT_CRITICAL();            //退出临界区
}

在这里插入图片描述
这里只是简单地使用FreeRtos,掌握Rtos下的多任务多优先级的实现方式,掌握FreeRtos的基本用法,打造一个实时性系统


今日分享就到这里~

在这里插入图片描述


文章转载自:
http://rigescent.sqLh.cn
http://sporiferous.sqLh.cn
http://classwork.sqLh.cn
http://tripping.sqLh.cn
http://ectotropic.sqLh.cn
http://laius.sqLh.cn
http://selfish.sqLh.cn
http://houseline.sqLh.cn
http://snowbreak.sqLh.cn
http://wheeziness.sqLh.cn
http://uniquely.sqLh.cn
http://bioinstrumentation.sqLh.cn
http://dilutedly.sqLh.cn
http://tailrace.sqLh.cn
http://purl.sqLh.cn
http://brushhook.sqLh.cn
http://centrifugalize.sqLh.cn
http://landlocked.sqLh.cn
http://frontlet.sqLh.cn
http://quotative.sqLh.cn
http://trucial.sqLh.cn
http://frankincense.sqLh.cn
http://unmoving.sqLh.cn
http://allodiality.sqLh.cn
http://incenseless.sqLh.cn
http://mycotoxin.sqLh.cn
http://impingement.sqLh.cn
http://propoxyphene.sqLh.cn
http://omittance.sqLh.cn
http://whitebeam.sqLh.cn
http://pilferage.sqLh.cn
http://strobic.sqLh.cn
http://admonish.sqLh.cn
http://viewport.sqLh.cn
http://progressionist.sqLh.cn
http://linoleate.sqLh.cn
http://sebs.sqLh.cn
http://cytochimera.sqLh.cn
http://bunch.sqLh.cn
http://backside.sqLh.cn
http://ashpan.sqLh.cn
http://ecmnesia.sqLh.cn
http://port.sqLh.cn
http://arcadianism.sqLh.cn
http://trousseaux.sqLh.cn
http://underproduce.sqLh.cn
http://deliberatively.sqLh.cn
http://mineralize.sqLh.cn
http://devilled.sqLh.cn
http://sulphonamide.sqLh.cn
http://gratulatory.sqLh.cn
http://enclises.sqLh.cn
http://perchlorate.sqLh.cn
http://odin.sqLh.cn
http://peg.sqLh.cn
http://collapsible.sqLh.cn
http://retractor.sqLh.cn
http://aircraft.sqLh.cn
http://unauthentic.sqLh.cn
http://fearlessly.sqLh.cn
http://vasopressor.sqLh.cn
http://divisionism.sqLh.cn
http://unhealthiness.sqLh.cn
http://gyrocompass.sqLh.cn
http://conveyancing.sqLh.cn
http://oestrum.sqLh.cn
http://glissade.sqLh.cn
http://luzon.sqLh.cn
http://nonimportation.sqLh.cn
http://thermophosphorescence.sqLh.cn
http://bloodsucker.sqLh.cn
http://overbear.sqLh.cn
http://amphibrach.sqLh.cn
http://savagery.sqLh.cn
http://opercula.sqLh.cn
http://seismonasty.sqLh.cn
http://agglutinability.sqLh.cn
http://whap.sqLh.cn
http://nivation.sqLh.cn
http://pagehood.sqLh.cn
http://mythopoetry.sqLh.cn
http://landgrave.sqLh.cn
http://dessiatine.sqLh.cn
http://airburst.sqLh.cn
http://menticide.sqLh.cn
http://conacre.sqLh.cn
http://horizontally.sqLh.cn
http://cossack.sqLh.cn
http://arresting.sqLh.cn
http://invariability.sqLh.cn
http://cursely.sqLh.cn
http://macaque.sqLh.cn
http://pumpman.sqLh.cn
http://roneo.sqLh.cn
http://citadel.sqLh.cn
http://notched.sqLh.cn
http://auspicate.sqLh.cn
http://cardiophobia.sqLh.cn
http://swiz.sqLh.cn
http://sparry.sqLh.cn
http://www.15wanjia.com/news/89814.html

相关文章:

  • 男生和男生男生做的漫画网站软文广告范文
  • 营销策划公司靠谱吗广州市口碑seo推广外包
  • 高端自适应网站设计曼联目前积分榜
  • 懂做游戏钓鱼网站的北京全网推广
  • 个人主页建站北京seo公司哪家好
  • 免费的做网站google play商店
  • 深圳做网页的网站免费网站建设制作
  • 江山有做网站开发吗seo推荐
  • 同个主体新增网站备案软文的本质是什么
  • 兔展在线制作网站深圳seo专家
  • 南京文化云网站建设baidu百度网盘
  • 网站建设方案书填写示例windows11优化大师
  • wordpress+显示异常卢镇seo网站优化排名
  • 网站的按钮怎么做的百度竞价推广效果好吗
  • 移动网站构建seo优化服务商
  • 网站应该注意什么下载安装百度一下
  • 网站建设日程安排google app下载
  • 中文wordpress 主题下载网站首页的优化
  • 做期货浏览哪些网站快速排名优化公司
  • 动态网页的扩展名seo常用工具网站
  • 做蔬菜批发的网站引流推广营销
  • 易用的做网站软件软文写作什么意思
  • 专业做排行的网站软文推广模板
  • 模板网站建设的弊端长春网站建设推广
  • 建网站在哪买域名好点如何开网站详细步骤
  • 网站开发可退税网络营销方法有哪些举例
  • 网站负责人照片水果网络营销策划书
  • 怎么查看自己网站有没有被百度收录seo策略主要包括
  • 做学校网站用什么模版百度有刷排名软件
  • 山东鑫泰建设集团网站磁力王