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

html5网站设计欣赏赣州英文网站建设

html5网站设计欣赏,赣州英文网站建设,学校网站建设,网站建设价格受哪些影响参考B站up主【架构分析】嵌入式祼机事件驱动框架 感谢大佬分享 任务ID #xff1a; TASK_XXX TASK_XXX 在系统中每个任务的ID是唯一的#xff0c;范围是 0 to 0xFFFE#xff0c;0xFFFF保留为SYS_TSK_INIT。 同时任务ID的大小也充当任务调度的优先级#xff0c;ID越大#… 参考B站up主【架构分析】嵌入式祼机事件驱动框架 感谢大佬分享 任务ID TASK_XXX TASK_XXX 在系统中每个任务的ID是唯一的范围是 0 to 0xFFFE0xFFFF保留为SYS_TSK_INIT。 同时任务ID的大小也充当任务调度的优先级ID越大优先级越高越排在任务链表的最前面 事件ID EVE_XXX EVE_XXX和任务绑定对于一个任务来说一个任务的事件集有16位最高位115 保留为系统消息事件SYS_EVE_MSG剩下的10 到 114由用户定义 对于不同的任务EVE_XXX可以相同但是对于某一个任务EVE_XXX应是唯一的 消息事件ID EVE_MSG_XXX EVE_MSG_XXX被消息的bdy所携带当将消息发送给任务时会触发任务的系统消息事件SYS_EVE_MSG然后在任务的事件处理函数handler中取出消息事件EVE_MSG_XXX和数据data根据EVE_MSG_XXX做不同的处理。 EVE_MSG_XXX与EVE_XXX是不同的EVE_MSG_XXX是消息事件中的消息所携带的事件EVE_XXX是某个任务事件集中的某个事件。 EVE_MSG_XXX的范围是 0 到 0xFFFF尽可能使用不同的EVE_MSG_XXX 注此架构图来自B站up主的视频【架构分析】嵌入式祼机事件驱动框架 创建任务初始化包括硬件方面软件逻辑方面等 也可以在初始化中创建软件定时器软件定时器超时后会把对应任务的事件置位即触发事件。 系统调度后在osal_system_start中会循环检查有没有触发事件的任务有则通过task_handler处理 消息通过osal_send_msg发送消息到消息队列因为消息其实是和任务task_id绑定起来的消息发送到消息队列后会把对应的任务中的 SYS_MSG_EVE置位即触发消息事件。然后在task_handler中通过osal_recv_msg读取 消息把消息提取出来然后释放消息内存 也可以直接通过调用osal_task_seteve触发指定任务的事件 核心就是任务task应用层中 通过 task_id和event_id实现事件驱动的调度 中断中如何往OSAL中去集成 通过直接触发相应的事件osal_task_seteve通过消息队列 如果数据比较少可以直接通过消息队列发送。 或者使用数据缓冲层在任务处理task_handler中取数据 在app.h中声明所有的任务id事件id以及处理接口ops 调度函数 osal_system_start 在主程序中调用osal_system_start 寻找触发事件的任务执行任务事件处理函数将执行完的事件在事件集中剔除掉 通过osal_task_active获取有效任务即有事件触发的任务将其事件集提取出来赋值给events变量。 将task_active-events给清理掉最开始是一个多线程的考虑在逻辑轮询中 调用任务的事件处理函数task_active-ops-handler这个函数由用户提供参数是任务id和事件集在此函数中需要剔除掉对应的事件然后将剔除事件 过后 的事件集 返回然后将返回值 或上任务的事件集 注此架构图来自B站up主的视频【架构分析】嵌入式祼机事件驱动框架 /********************************************************************* * fn osal_system_start * * brief * * This function is the main loop function of the task system. It * will look through all task events and call the task_event_processor() * function for the task with the event. If there are no events (for * all tasks), this function puts the processor into Sleep. * This Function doesnt return. * * param void * * return none *//*可以考虑不加临界区直接用原子操作减少开销*/ void osal_system_start(void) { event_asb_t events,ret_events; osal_task_t *task_active; while(1) { task_active osal_task_active(); if ( task_active ! NULL ) { OSAL_ENTER_CRITICAL(); events task_active-events; task_active-events SYS_EVE_NONE; OSAL_EXIT_CRITICAL(); if(events ! SYS_EVE_NONE) { if(task_active-ops-handler ! NULL) { ret_events task_active-ops-handler(task_active-task_id,events); OSAL_ENTER_CRITICAL(); task_active-events | ret_events; OSAL_EXIT_CRITICAL(); } } } } }osal.h #ifndef OSAL_H #define OSAL_H //#include heap.h #include stm32h7xx_hal.h #define OSAL_ERROR 0 #define OSAL_SUCCESS 1 #define INVALID_TASK 2 #define INVALID_MSG_POINTER 3 #define INVALID_EVENT_ID 4 #define INVALID_TIMER 5 //芯片硬件字长 typedef unsigned int halDataAlign_t; // Unsigned numbers typedef unsigned char osal_bool_t; typedef unsigned char osal_byte_t; typedef unsigned char osal_uint8_t; typedef unsigned short osal_uint16_t; typedef unsigned int osal_uint32_t; // Signed numbers typedef signed char osal_int8_t; typedef signed short osal_int16_t; typedef signed int osal_int32_t; #define osal_container_of(ptr, type, member) ((type *)((char *)(ptr) - (unsigned long)(((type *)0)-member))) /**进入临界区和退出临界区**/ //#define CLI() __set_PRIMASK(1) // Disable Interrupts //#define SEI() __set_PRIMASK(0) // Enable Interrupts #define CLI() __disable_irq() // Disable Interrupts #define SEI() __enable_irq() // Enable Interrupts #define OSAL_ENABLE_INTERRUPTS() SEI() // Enable Interrupts #define OSAL_DISABLE_INTERRUPTS() CLI() // Disable Interrupts #define OSAL_ENTER_CRITICAL() CLI() #define OSAL_EXIT_CRITICAL() SEI() /**内存管理**/ //#define osal_mem_alloc pvHeapMalloc //#define osal_mem_free vHeapFree #define osal_delay(ms) HAL_Delay(ms) osal_uint8_t osal_init_system(void); void osal_system_start(void); int osal_strlen( char *pString ); void *osal_memcpy( void *dst, const void *src, unsigned int len ); void *osal_revmemcpy( void *dst, const void *src, unsigned int len ); void *osal_memdup( const void *src, unsigned int len ); osal_uint8_t osal_memcmp( const void *src1, const void *src2, unsigned int len ); void *osal_memset( void *dest, osal_uint8_t value, int len ); #endifosal.c /********************************************************************* * fn osal_init_system * * brief * * This function initializes the task system by creating the * tasks defined in the task table (OSAL_Tasks.h). * * param void * * return ZSUCCESS */osal_uint8_t osal_init_system( void ) { // Initialize the Memory Allocation System #if OSALMEM_METRICS osal_mem_init(); #endif return ( OSAL_SUCCESS ); } /********************************************************************* * fn osal_system_start * * brief * * This function is the main loop function of the task system. It * will look through all task events and call the task_event_processor() * function for the task with the event. If there are no events (for * all tasks), this function puts the processor into Sleep. * This Function doesnt return. * * param void * * return none *//*可以考虑不加临界区直接用原子操作减少开销*/ void osal_system_start(void) { event_asb_t events,ret_events; osal_task_t *task_active; while(1) { task_active osal_task_active(); if ( task_active ! NULL ) { OSAL_ENTER_CRITICAL(); events task_active-events; task_active-events SYS_EVE_NONE; OSAL_EXIT_CRITICAL(); if(events ! SYS_EVE_NONE) { if(task_active-ops-handler ! NULL) { ret_events task_active-ops-handler(task_active-task_id,events); OSAL_ENTER_CRITICAL(); task_active-events | ret_events; OSAL_EXIT_CRITICAL(); } } } } }
http://www.dnsts.com.cn/news/227202.html

相关文章:

  • 网站建设喀什新手建网站需要怎么做呢
  • 重庆网站建设红旗河沟肇庆市住房和城乡建设部网站
  • 网上订餐网站模板电商网络运营
  • 网站策划书的要点网站怎么创建论坛
  • 民宿网站开发dfd图wordpress 安卓教程
  • 做网站公司起什么名字外贸企业网站建设
  • 如何建立一个网站及appseo需要会网站建设吗
  • 国内比较好用的建筑案例网站品牌搜索引擎服务优化
  • 网站开发公司长春怎么免费制作一个企业网站
  • 怎样在网站做推广怎么学习建设网站
  • 禅城技术支持骏域网站建设网站项目建设所需成本
  • pyton怎么做网站的代码手机微信网页版登录入口
  • 中国人做跨电商有什么网站做评测系统网站首先要干嘛
  • 邢台地区网站建设口碑好企业网站报价模板
  • 做窗帘网站图片自助建站 知乎
  • 男生做污污的网站佛山网站建设拓客科技
  • 网站搭建制作公司jsp网站建设模板
  • 番禺网站制作价格河北网页设计
  • 网页设计做一个介绍自己的的网站新专业建设的重点任务
  • 专门做正品的网站有哪些微信网页版入口
  • 五屏网站建设品牌好五种人适合做运营
  • 个人建设网站流程php网站开发总结
  • 网站中英文版怎么做如何创办视频网站
  • 私募基金网站怎么做seo做网站用哪个版本的eclipse
  • 推荐一个国外好的网站模板广西网红排名
  • 泉州公司建站模板.net 手机网站开发
  • 网站建设中数据字典软件开发项目经理招聘
  • 建网站什么语言如何制作自己想要的图片
  • 建设网站制作wordpress支付宝当面付插件
  • 福州做网站fjfzwl工程建设流程