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

商标logo西藏自治区seo 标题 关键词优化

商标logo,西藏自治区seo 标题 关键词优化,山东青岛平度疫情最新消息,代驾系统定制开发5.1原因 线程延时是浪费CPU资源,受否可以考虑延时的时候放弃CPU使用权,这样就充分利用了CPU的资源。 如果线程进入阻塞状态,没有其他线程运行,是否可以运行一个空闲线程来做一些内存的清理等系统工作呢:5.2 实现 5.2…

5.1原因

线程延时是浪费CPU资源,受否可以考虑延时的时候放弃CPU使用权,这样就充分利用了CPU的资源。
如果线程进入阻塞状态,没有其他线程运行,是否可以运行一个空闲线程来做一些内存的清理等系统工作呢:

5.2 实现

5.2.1 定义空闲线程的栈

src中定义idle.c

#include <rtthread.h>
#include <rthw.h>extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];#define IDLE_THREAD_STACK_SIZE			512ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t rt_thread_stack[IDLE_THREAD_STACK_SIZE];

5.2.2 定义空闲线程的线程控制块

struct rt_thread idle;

5.2.3 定义空闲线程函数


rt_ubase_t rt_idletask_ctr = 0;
void rt_thread_idle_entry(void *parameter)
{parameter = parameter;while(1){rt_idletask_ctr++;}
}

5.2.4 空闲线程初始化

oid rt_thread_idle_init(void)
{rt_thread_init(&idle,"idle",rt_thread_idle_entry,RT_NULL,&rt_thread_stack[0],sizeof(rt_thread_stack),RT_THREAD_PRIORITY_MAX - 1);rt_list_insert_before(&(rt_thread_priority_table[RT_THREAD_PRIORITY_MAX-1]),&(idle.tlist));}

5.3 实现阻塞延时

5.3.1 thread.c中

void rt_thread_delay(rt_tick_t tick)
{struct rt_thread *thread;thread = rt_current_thread;thread->remaining_tick = tick;rt_schedule();
}

5.3.2 struct thread中

添加	rt_ubase_t remaining_tick;成员

5.3.3 schedule.c

/* 系统调度 */
void rt_schedule(void)
{struct rt_thread *to_thread;struct rt_thread *from_thread;if(rt_current_thread == &idle){if(rt_flag1_thread.remaining_tick == 0){from_thread = rt_current_thread;to_thread = &rt_flag1_thread;rt_current_thread = to_thread;}else if(rt_flag2_thread.remaining_tick == 0){from_thread = rt_current_thread;to_thread = &rt_flag2_thread;rt_current_thread = to_thread;}else{return ;}}else{if(rt_current_thread == &rt_flag1_thread){if(rt_flag2_thread.remaining_tick == 0){from_thread = rt_current_thread;to_thread = &rt_flag2_thread;rt_current_thread = to_thread;}else if(rt_current_thread->remaining_tick == 0){from_thread = rt_current_thread;to_thread = &idle;rt_current_thread = to_thread;}else{return;}}else if(rt_current_thread == &rt_flag2_thread){if(rt_flag1_thread.remaining_tick == 0){from_thread = rt_current_thread;to_thread = &rt_flag1_thread;rt_current_thread = to_thread;}else if(rt_current_thread->remaining_tick == 0){from_thread = rt_current_thread;to_thread = &idle;rt_current_thread = to_thread;}else{return;}}}rt_hw_context_switch((rt_uint32_t)&from_thread->sp,(rt_uint32_t)&to_thread->sp);/* 产生上下文切换 */}

5.3.4 main.c中添加systick

void __attribute__((interrupt)) _SysTick_exception (void)
{rt_interrupt_enter();rt_tick_increase();rt_interrupt_leave();
}void SysTick_Config(uint32_t Reload)
{SYSTICK_Cmd (FALSE);SYSTICK_Reload_Config(Reload);SYSTICK_Counter_Updata();                           //向ST_CV寄存器写任意值,以清零当前值寄存器SYSTICK_Clock_Config(SYSTICK_SYS_CLOCK_DIV_1);      //系统节拍定时器时钟源选择,SCLK作为时钟源SYSTICK_Systick_INT_Enable(TRUE);SYSTICK_Cmd(TRUE);INT_Interrupt_Enable(INT_SysTick,TRUE);				//使能SYSTICK中断INT_All_Enable (TRUE);
}

5.3.5 系统时基更新函数

clock.c

#include <rtthread.h>
#include <rthw.h>
#include "debug.h"static rt_tick_t rt_tick = 0;
extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];void rt_tick_increase(void)
{rt_ubase_t i;struct rt_thread *thread;rt_tick++;for(i = 0;i < RT_THREAD_PRIORITY_MAX;i++){thread = rt_list_entry(rt_thread_priority_table[i].next,struct rt_thread,tlist);if(thread->remaining_tick > 0){thread->remaining_tick--;}rt_schedule();}}

5.3.6 中断函数

irq.c

#include <rthw.h>
#include <rtthread.h>volatile rt_uint8_t rt_interrupt_nest;
void rt_interrupt_enter(void)
{rt_base_t level;// RT_DEBUG_LOG(RT_DEBUG_IRQ, ("irq coming..., irq nest:%d\n",//   rt_interrupt_nest));level = rt_hw_interrupt_disable();rt_interrupt_nest ++;//RT_OBJECT_HOOK_CALL(rt_interrupt_enter_hook,());rt_hw_interrupt_enable(level);
}/*** This function will be invoked by BSP, when leave interrupt service routine** @note please don't invoke this routine in application** @see rt_interrupt_enter*/
void rt_interrupt_leave(void)
{rt_base_t level;// RT_DEBUG_LOG(RT_DEBUG_IRQ, ("irq leave, irq nest:%d\n",//  rt_interrupt_nest));level = rt_hw_interrupt_disable();rt_interrupt_nest --;//  RT_OBJECT_HOOK_CALL(rt_interrupt_leave_hook,());rt_hw_interrupt_enable(level);
}

5.4 案例

main.c

rt_hw_interrupt_disable();
SysTick_Config(SystemCoreClock/RT_TICK_PER_SECOND);
void flag1_thread_entry( void *p_arg )
{for( ;; ){P_DBG("flag1 thread\n");flag2 = 1;P_DBG("flag1 thread will dela1\n");rt_thread_delay(10);flag2 = 0;P_DBG("flag1 thread will dela2\n");rt_thread_delay(10);}
}/* 线程2 */
void flag2_thread_entry( void *p_arg )
{for( ;; ){P_DBG("flag2 thread\n");flag2 = 1;rt_thread_delay(2);flag2 = 0;P_DBG("flag2 thread will dela1\n");rt_thread_delay(2);}
}		
http://www.shuangfujiaoyu.com/news/36093.html

相关文章:

  • 做网站分为哪几个岗位百度收录查询网址
  • 智联招聘网站怎么做两份简历百度推广的价格表
  • 画册设计公司推荐seo网站推广服务
  • 两学一做党员夜校播放网站宁波网络营销有哪些
  • 微信开放文档网站排名seo软件
  • 班级网站源代码品牌营销网站建设
  • wordpress微信收款搜索引擎关键词快速优化
  • 洛阳建站推广公司郑州做网站
  • 网站开发流程人物百度平台推广联系方式
  • 运用asp做购物网站的心得网站seo的方法
  • wordpress 多重分类南京谷歌优化
  • 服装公司网站背景图网站快照优化公司
  • 网站小图标 免费seo网站关键词排名软件
  • 网站更改备案朋友圈推广怎么收费
  • 汕头个人网站推广建设seoul是韩国哪个城市
  • 大型网站建设设备免费建立个人网站官网
  • 本网站只做信息展示网站推广技术
  • 重点实验室网站建设的意义网站seo网络优化
  • 镇江网站制作费用防止恶意点击软件管用吗
  • 百度知道山东网站建设专门制作小程序的公司
  • 专业的大良网站设计举一个网络营销的例子
  • 外贸网站推广工作外贸网站建设优化推广
  • 长沙做网站好的公司电工培训技术学校
  • 网站制作的公司哪个好营销方式有哪几种
  • 广州黄埔做网站公司哪家好信息流优化师是干什么的
  • 政府网站外语版建设下载安装
  • 工信部网站备案进度查询app推广项目
  • 深圳附近做个商城网站多少钱网络营销服务平台
  • 网站开发图片压缩上传报酬网络推广公司简介模板
  • 开发人员选项怎么打开站长工具seo诊断