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

自己会网站开发如何赚钱wordpress如何用

自己会网站开发如何赚钱,wordpress如何用,页面模板功能,好看的wordpress文章模板文章目录 一、任务通知(一#xff09;任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify#xff08;#xff09;发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR#xff08;#xff09;发送通知函数ISR版本3、x… 文章目录 一、任务通知(一任务通知概述1、任务通知可模拟队列和信号量2、任务通知优势和局限性 (二) 任务通知函数1、xTaskNotify发送通知值不返回先前通知值的函数2、xTaskNotifyFromISR发送通知函数ISR版本3、xTaskNotifyAndQuery()发送通知值且返回先前通知值的函数4、xTaskNotifyGive()函数-发送通知值使通知值1的函数5、xTaskNotifyWait()函数-等待任务通知和接收通知值6、ulTaskNotifyTake()函数--二值信号量或计数信号量获取任务通知7、xTaskNotifyStateClear()函数-清除任务通知值 二、任务通知传递数据一任务通知值模拟二值信号量1、目标2、STM32cubemx配置3、代码编写 二任务通知值模拟计数型信号量1、目标2、STM32cubemx设置3、代码编写 一、任务通知 (一任务通知概述 1、任务通知可模拟队列和信号量 任务通知是FreeRTOS另外一种进程间通信技术。不需要创建任何中间对象可以直接从任务向任务或ISR向任务发送通知传递一个通知值任务通知可以模拟二值信号量、计数信号量、或长度为1的消息队列使用任务通知一般效率更高消耗内存更少 任务通知和队列信号量事件组区别如下 队列信号量事件组 使用队列、信号量、事件标志组时都需另外创建一个结构体通过中间的结构体进行间接通信 任务通知 使用任务通知时任务结构体TCB中就包含了内部对象可以直接接收别人发过来的通知 2、任务通知优势和局限性 (1)任务通知值优势 效率更高 使用任务通知向任务发送事件或数据比使用队列、事件标志组或信号量快得多使用内存更少 使用其他方法时都要先创建对应的结构体使用任务通知时无需额外创建结构体 (2)任务通知值局限 无法发送数据给ISR ISR没有任务结构体所以无法给ISR发送数据。但是ISR可以使用任务通知的功能发数据给任务。无法广播给多个任务 任务通知只能是被指定的一个任务接收并处理无法缓存多个数据 任务通知是通过更新任务通知值来发送数据的任务结构体中只有一个任务通知值只能保持一个数据。发送受阻不支持阻塞 发送方无法进入阻塞状态等待 (二) 任务通知函数 1、xTaskNotify发送通知值不返回先前通知值的函数 向一个任务发送通知的函数 参数1任务通知句柄 参数2要发送的通知值此参数的使用取决于参数3 参数3通知值得作用方式可以传入五种不同得枚举值 /* 参数1接收者任务句柄 参数2要发送的通知值此参数的使用取决于参数3 参数3通知值作用方式可以传入五种不同得枚举值eNotifyAction 参数4为NULL表明不会返回通知前的数值 通知值和枚举值共同决定了如何修改接收者通知值 返回值是更新后的通知值 */ #define xTaskNotify( xTaskToNotify, ulValue, eAction ) xTaskGenericNotify( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL ) xTaskNotify()在调用函数xTaskGenericNotify()时没有传递最后一个参数所以不能返回接收者更新之前的通知值。函数xTaskNotify()返回的是更新之后的接收者的通知值。 参数3的枚举值如下所示 typedef enum {eNoAction 0, /* 无操作只发通知不改变接收者的通知值 */eSetBits, /* 更新指定bit: 接收者的通知值与ulValue按位或运算适用于当做事件组使用 */eIncrement, /* t将接收者的通知值加1适用于当做二值信号量或计数信号量使用 */eSetValueWithOverwrite,/* 覆写通知值用ulValue覆盖接收者的通知值即使前一次的通知未被处理 */eSetValueWithoutOverwrite /* 不覆写通知值接收者处于非挂起状态时用ulValue更新其通知值否则不更新*/ } eNotifyAction;参数3枚举值 1传入eSetBits时适用于任务通知做事件组时使用 接收者的通知值与u1value进行按位或运算 2传入eIncrement适用于当作计数型信号量或二值信号量场景 接收者的通知值1运算 3覆写 用u1value覆盖接收者的通知值即使前一次的通知未被处理 4不覆写更新通知值 接收者处于非挂起状态时用u1value更新其通知值否则不更新 宏函数实际调用执行的函数 /* 参数1任务通知句柄 参数2要发送的通知值此参数的使用取决于参数3 参数3通知值得作用方式可以传入五种不同得枚举值eNotifyAction 参数4返回接收者的通知值被改变之前的值NULL表明不会返回通知前的数值 */#if( configUSE_TASK_NOTIFICATIONS 1 )BaseType_t xTaskGenericNotify( TaskHandle_t xTaskToNotify, uint32_t ulValue,eNotifyAction eAction,uint32_t *pulPreviousNotificationValue ){略}#endif /* configUSE_TASK_NOTIFICATIONS */2、xTaskNotifyFromISR发送通知函数ISR版本 ISR版本比任务中的发送函数多一个参数最后一个参数是指是否需要进行上下文切换 #define xTaskNotifyFromISR( xTaskToNotify, ulValue, eAction,pxHigherPriorityTaskWoken ) xTaskGenericNotifyFromISR( ( xTaskToNotify ), ( ulValue ), ( eAction ), NULL, ( HigherPriorityTaskWoken ) )pxHigherPriorityTaskWoken是一个*BaseType_t 类型的指针实际上是一个返回数据表示退出中断ISR函数之后是否需要进行上下文切换 申请进行上下文切换调用函数portYIELD_FROM_ISR() 3、xTaskNotifyAndQuery()发送通知值且返回先前通知值的函数 函数xTaskNotifyAndQuery()与xTaskNotify()的功能相同但是能返回接收者通知值改变之前的值。还有一个ISR版本 参数pulPreviousNotifyValue用于获取接收者之前的通知值是uint32_t *类型的指针变量 示意代码如下 uint32_t previousValue0; uint32_t currentValue0; currentValue xTaskNotifyAndQuery(xTaskToNotify, ulValue, eAction, previousValue);4、xTaskNotifyGive()函数-发送通知值使通知值1的函数 函数 xTaskNotifyGive() 是xTaskNotify()的一种功能简化版本并有一个ISR版本 参数eAction设置为eIncrement所以函数xTaskNotifyGive()的功能就是使接收者的通知值加1这使其适用于 将任务通知当做二值信号量或计数信号量使用的场合。 注意 发送通知API函数可以用于任务和中断服务函数中接收通知API函数只能用在任务中。 5、xTaskNotifyWait()函数-等待任务通知和接收通知值 接收者使用函数xTaskNotifyWait()进入阻塞状态等待任务通知并获取通知值 BaseType_t xTaskNotifyWait( uint32_t ulBitsToClearOnEntry, uint32_t ulBitsToClearOnExit,uint32_t *pulNotificationValue, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;参数1函数进入时需要清零的通知值的位掩码。需要清零的位在掩码中用1表示否则用0表示计算方式是当前值按位取反后再与通知值按位与运算用计算的结果用来更新通知值如果设置为0表示不更新通知值如果设置为0xffffffff表示将所有位清零 参数2函数在退出时需要清零的通知值的位的掩码。0就是不更改通知值0xFFFFFFFF就是将通知值设置为0参数3是一个uint32_t *类型的指针用于返回接收到的通知值。 参数4超时阻塞时间函数在阻塞状态等待的节拍数 返回值是pdTRUE或pdFALSEpdTRUE表示接收到了任务通知包括函数一进入就读取已挂起的任务通知 如果是未挂起的任务也就是没有任务通知任务进入阻塞状态等待任务通知。 如果任务是挂起状态有未处理的任务通知就立刻读取通知值然后返回。 任务接收到通知或者超时则会退出阻塞状态 6、ulTaskNotifyTake()函数–二值信号量或计数信号量获取任务通知 获取任务通知可以设置在退出此函数的时候将任务通知值清零或者减一。 当任务通知用作二值信号量或者计数信号量的时候使用此函数来获取信号量。 uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickType_t xTicksToWait ) PRIVILEGED_FUNCTION;参数1pdTRUE或pdFALSE (1)取值为pdTRUE时函数接收到通知并退出时将通知值清零这种情况下是将通知值当做二值信号量使用 (2)取值为pdFALSE时函数接收到通知并退出时将通知值减1这种情况下是将通知值当做计数信号量使用 参数2超时等待时间进入阻塞状态等待任务通知的节拍数 返回值减1或清零之前的通知值函数ulTaskNotifyTake()一般与函数xTaskNotifyGive()搭配使用将任务通知值当做二值信号量或计数信号量使用。 注意 当任务通知用作于信号量时使用函数获取信号量ulTaskNotifyTake() 当任务通知用作于事件标志组或队列时使用此函数来获取 xTaskNotifyWait() 7、xTaskNotifyStateClear()函数-清除任务通知值 清除接收者的任务通知等待状态使其变为未挂起状态不会将接收者的通知值清零参数是需要操作的任务句柄设置为NULL表示当前的任务 二、任务通知传递数据 一任务通知值模拟二值信号量 1、目标 使用中断方式进行ADC转换通过任务通知将ADC转换结果作为通知值发送给另外一个任务 1ADC1在定时器TIM3的触发下进行周期为500ms的ADC数据采集在ADC的ISR函数里通过函数xTaskNotifyFromISR()将转换结果发送给任务Task_Show 2任务Task_Show总是使用函数xTaskNotifyWait()等待任务通知读取出通知值后在LCD上显示数据 2、STM32cubemx配置 1复制只有LCD的cube文件并重命名 2RCC (3)SYS选择TIM6作为FreeRTOS的基础时钟源 4定时器3选择内部时钟 TIM3挂载到APB1总线84MHZ,如果将其划分为1khz的话分频系数就需要设为84k 但是分频器最大65535达不到8万4, 就设为8400-1获得一个10000h频率即定时0.1ms由于希望获得到周期是500ms的延时所以计数周期可以设置为5000-1并且选择更新事件。 5ADC设置 选择通道5选择定时器3触发事件采样选择15 使能ADC的NVIC (6)启动Freertos选择V2版本并且对默认任务进行修改将栈空间设为256字 7设置NVIC 要在ADC的ISR中调用freertos的函数所以ADC中断优先级不能比5高 生成代码 3、代码编写 1LCD部分 移植BSP文件夹到工程目录中并且添加相关路径到头文件中并调用相关的头文件实现lcd的初始化和数据显示测试。 可以实现LCD的数据显示以后进行下一步 2main.c文件主函数 LCD初始化、LCD测试、启动定时器和ADC /* USER CODE BEGIN 2 */TFTLCD_Init();LCD_ShowString(10, 100*20, tftlcd_data.width, tftlcd_data.height, 12, tasknotify test bin);//以中断方式启动adc1HAL_ADC_Start_IT(hadc1);//启动定时器3HAL_TIM_Base_Start(htim3);/* USER CODE END 2 */main.h添加头文件从main.c调用头文件处复制即可 3Freertos代码编写 ADC1在定时器TIM3的触发下进行周期为500ms的ADC数据采集在ADC的ISR函数里通过函数xTaskNotifyFromISR()将转换结果发送给任务Task_Show /* USER CODE BEGIN Application */void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {//由于定时器3每500ms更新一次事件adc在500ms触发下周期性的进行adc转换转换完就会触发这个回调函数// //先查询是不是adc1的通道5if(hadc-InstanceADC1)//adc1{uint32_t adc_valueHAL_ADC_GetValue(hadc1);//获取ADC的数值并赋值给局部变量//以任务通知的形式将数据发送给任务且以覆写的形式进行//首先保证任务句柄存在才写入数据if(Task_showHandle!NULL){BaseType_t pxHigherPriorityTaskWokenpdFALSE;//默认不进行任务调度//使用ISTR写入数据函数//参数1接收数据的任务句柄参数2:传输数值//参数3覆写参数4是否进行上下文切换xTaskNotifyFromISR(Task_showHandle,adc_value,eSetValueWithOverwrite,pxHigherPriorityTaskWoken);//防止优先级反转需要传入数值来判断推出前是否需要进行一次任务调度申请portYIELD_FROM_ISR(pxHigherPriorityTaskWoken);}} }/* USER CODE END Application */任务Task_Show总是使用函数xTaskNotifyWait()等待任务通知读取出通知值后在LCD上显示数据 /* USER CODE END Header_AppTask_show */ void AppTask_show(void *argument) {/* USER CODE BEGIN AppTask_show */uint32_t pulNotificationValue0;//接收的值/* Infinite loop */for(;;){//参数1函数进入时不更新通知值00xffffffff表示将所有位清零//参数2函数退出时清零所有位0xffffffff,0就是不更改通知值//参数3返回的通知值参数4超时等待时间BaseType_t resultxTaskNotifyWait(0, 0xffffffff, pulNotificationValue, portMAX_DELAY);if(resultpdPASS)//表示接收到了通知{uint32_t adc_valuepulNotificationValue;uint8_t data[20];sprintf(data,adc_value%d ,adc_value);LCD_ShowString(10,102*20,tftlcd_data.width,tftlcd_data.height,12,data);sprintf(data,volatge%d mv ,adc_value*330012);//12就是除以4096LCD_ShowString(10,103*20,tftlcd_data.width,tftlcd_data.height,12,data);}//没有加入vtaskdelay表明一直在等待通知值的到来}/* USER CODE END AppTask_show */ }二任务通知值模拟计数型信号量 使用函数xTaskNotifyGive()发送通知使接收者的通知值加1使用函数ulTaskNotifyTake()读取通知使通知值减1或清零 1、目标 使用任务通知模拟计数信号量表示如图所示的餐厅前排队的人数变化。 1在FreeRTOS中创建一个任务Task_CheckIn其通知值表示当前在排队的人数。 2在任务Task_CheckIn中连续检测key1键当Key1键按下时执行函数ulTaskNotifyTake()使通知值减1表示允许1人进店使排队人数减1。 (3) 设置RTC周期唤醒周期为2秒在周期唤醒中断里执行函数vTaskNotifyGiveFromISR()向任务Task_CheckIn发送通知使其通知值加1表示又来1人加入排队的队伍。 2、STM32cubemx设置 1复制按键和LCD的cebemx文件并重命名 2RCC设置 由于要使用RTC开启外部低速时钟 3SYS设置Freertos基础时钟源 4启用RTC 激活RTC、周期唤醒、二进制数据、2s唤醒一次 使能RTC中断 5启用Freertos并修改默认任务 栈空间设置为256字 6在原来基础之上设置RTC时钟源 3、代码编写 1移植BSP文件夹到工程目录中并且添加头文件路径到工程中以及添加lcd头文件调用实现LCD的初始化和显示测试 2main.c lcd初始化和lcd显示测试 main.h调用头文件 3freeRTOS代码编写 任务函数 void AppTask_CheckIn(void *argument) {/* USER CODE BEGIN AppTask_CheckIn *//* Infinite loop */for(;;){KEYS valuekey_scan(20);if(valueKEY_1)//如果是按?1按下{//参数1pdfalse表示计数信号量pdfalse表示通知值不清零进行-1操作//参数2一直等待//返回值是上一次的通知值uint32_t precountulTaskNotifyTake( pdFALSE, portMAX_DELAY );uint8_t str[20];sprintf(str,people in waiting %d ,precount-1);LCD_ShowString(10, 102*20, tftlcd_data.width, tftlcd_data.height, 12, str);vTaskDelay(300);//消抖延时}elsevTaskDelay(5);}/* USER CODE END AppTask_CheckIn */ }RTC唤醒中断函数 void HAL_RTCEx_WakeUpTimerEventCallback(RTC_HandleTypeDef *hrtc) {LED1_TOGGLE();//2s进入回调函数一次BaseType_t pxHigherPriorityTaskWokenpdFALSE;//不进行上下文切换//参数1写入的任务句柄参数2是否进行上下文切换vTaskNotifyGiveFromISR(Task_CheckInHandle, pxHigherPriorityTaskWoken);portYIELD_FROM_ISR(pxHigherPriorityTaskWoken); } 1LED1闪烁表示RTC的中断ISR函数在执行每2秒钟发送一次任务通知 2按下Key1键时 LCD上显示当前排队人数连续按Key1键时会使排队人数减少直到减少为0任务Task_CheckIn就会进入阻塞等待状态。 3除了函数ulTaskNotifyTake()和xTaskNotifyWait()之外没有其他函数能读取任务的当前通知值 所以程序不能实时显示排队人数只有在按下Key1键执行一次ulTaskNotifyTake()函数后才会显示当前排队人数
文章转载自:
http://www.morning.wsnjn.cn.gov.cn.wsnjn.cn
http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn
http://www.morning.zknxh.cn.gov.cn.zknxh.cn
http://www.morning.tnhqr.cn.gov.cn.tnhqr.cn
http://www.morning.ymmjx.cn.gov.cn.ymmjx.cn
http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn
http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn
http://www.morning.nbgfk.cn.gov.cn.nbgfk.cn
http://www.morning.kzpxc.cn.gov.cn.kzpxc.cn
http://www.morning.knlyl.cn.gov.cn.knlyl.cn
http://www.morning.crrmg.cn.gov.cn.crrmg.cn
http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn
http://www.morning.nsrtvu.com.gov.cn.nsrtvu.com
http://www.morning.fnjrh.cn.gov.cn.fnjrh.cn
http://www.morning.frsbf.cn.gov.cn.frsbf.cn
http://www.morning.rbgqn.cn.gov.cn.rbgqn.cn
http://www.morning.pgfkl.cn.gov.cn.pgfkl.cn
http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn
http://www.morning.ltbwq.cn.gov.cn.ltbwq.cn
http://www.morning.qjngk.cn.gov.cn.qjngk.cn
http://www.morning.bmncq.cn.gov.cn.bmncq.cn
http://www.morning.xppj.cn.gov.cn.xppj.cn
http://www.morning.mxdhy.cn.gov.cn.mxdhy.cn
http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn
http://www.morning.lbgfz.cn.gov.cn.lbgfz.cn
http://www.morning.hpnhl.cn.gov.cn.hpnhl.cn
http://www.morning.rnzjc.cn.gov.cn.rnzjc.cn
http://www.morning.xmrmk.cn.gov.cn.xmrmk.cn
http://www.morning.lpzyq.cn.gov.cn.lpzyq.cn
http://www.morning.nnykz.cn.gov.cn.nnykz.cn
http://www.morning.clfct.cn.gov.cn.clfct.cn
http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn
http://www.morning.sbjbs.cn.gov.cn.sbjbs.cn
http://www.morning.cgbgc.cn.gov.cn.cgbgc.cn
http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn
http://www.morning.wtlyr.cn.gov.cn.wtlyr.cn
http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn
http://www.morning.rczrq.cn.gov.cn.rczrq.cn
http://www.morning.msbmp.cn.gov.cn.msbmp.cn
http://www.morning.hrgxk.cn.gov.cn.hrgxk.cn
http://www.morning.rjrh.cn.gov.cn.rjrh.cn
http://www.morning.smsjx.cn.gov.cn.smsjx.cn
http://www.morning.mwzt.cn.gov.cn.mwzt.cn
http://www.morning.jwwfk.cn.gov.cn.jwwfk.cn
http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn
http://www.morning.rmfw.cn.gov.cn.rmfw.cn
http://www.morning.lzqnj.cn.gov.cn.lzqnj.cn
http://www.morning.bfycr.cn.gov.cn.bfycr.cn
http://www.morning.daidudu.com.gov.cn.daidudu.com
http://www.morning.mlbdr.cn.gov.cn.mlbdr.cn
http://www.morning.gqtxz.cn.gov.cn.gqtxz.cn
http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn
http://www.morning.lzqxb.cn.gov.cn.lzqxb.cn
http://www.morning.dswtz.cn.gov.cn.dswtz.cn
http://www.morning.mfnsn.cn.gov.cn.mfnsn.cn
http://www.morning.hctgn.cn.gov.cn.hctgn.cn
http://www.morning.qstjr.cn.gov.cn.qstjr.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.skwwj.cn.gov.cn.skwwj.cn
http://www.morning.yhjrc.cn.gov.cn.yhjrc.cn
http://www.morning.fblkr.cn.gov.cn.fblkr.cn
http://www.morning.hsjrk.cn.gov.cn.hsjrk.cn
http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn
http://www.morning.ctqbc.cn.gov.cn.ctqbc.cn
http://www.morning.fgtls.cn.gov.cn.fgtls.cn
http://www.morning.rjljb.cn.gov.cn.rjljb.cn
http://www.morning.rjhts.cn.gov.cn.rjhts.cn
http://www.morning.clgbb.cn.gov.cn.clgbb.cn
http://www.morning.ltrz.cn.gov.cn.ltrz.cn
http://www.morning.ldnrf.cn.gov.cn.ldnrf.cn
http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn
http://www.morning.jpkhn.cn.gov.cn.jpkhn.cn
http://www.morning.xsetx.com.gov.cn.xsetx.com
http://www.morning.jpbky.cn.gov.cn.jpbky.cn
http://www.morning.gl-group.cn.gov.cn.gl-group.cn
http://www.morning.rkdhh.cn.gov.cn.rkdhh.cn
http://www.morning.btjyp.cn.gov.cn.btjyp.cn
http://www.morning.qfths.cn.gov.cn.qfths.cn
http://www.morning.qnxkm.cn.gov.cn.qnxkm.cn
http://www.morning.dglszn.com.gov.cn.dglszn.com
http://www.tj-hxxt.cn/news/243718.html

相关文章:

  • 域名注册网站建设网络实名泉州中企网站做的好吗
  • 网站排名制作公司网站目录 index
  • 为歌手做的个人网站免费招标信息网官网
  • 网站建设需要ui吗关键词排名优化网站建设公司哪家好
  • 阜新网站制作新农村建设在哪个网站查
  • 兰州新区建设厅网站交换友情链接的渠道有哪些
  • 学做卤菜网站佛山响应式网站
  • 网站内页301巩义网站优化
  • 甘肃两学一做网站西安便宜做网站
  • 网站跳出率高还是低编程代写有哪些平台
  • 百度推广网络推广微信网站网站维护一般要几天
  • 哈尔滨企业网站中天建设有限公司官方网站
  • 上海网站建设免网络工程师工作好找吗
  • 做ppt一般在什么网站好赣州新闻联播今天回放
  • 有哪些网站做明星周边做家装网站源码
  • 丰台网站建设多少钱城市建设局网站
  • 手机管理网站模板价格低廉的意思
  • 唐山做网站多少钱wordpress淘宝客插件开发
  • 网站管理是什么余姚建设网站的公司
  • 培训网站建设方案说明书阜宁做网站的价格
  • 建设工程类网站贺州网站建设公司
  • 外网常用网站生产管理网站开发
  • 福州网站建设方案网站排名突然掉没了
  • 才艺多网站建设网站域名需要续费吗
  • 自己做视频网站上传视频别墅庭院园林景观设计公司
  • 网站开发 360百科个人ip打造范文
  • 做网站用的字体是什么网页视频怎么下载ios
  • wordpress调整logo大小wordpress4.7.3优化
  • 网站推广员网站建设上机课
  • 哪做网站最好做暧小视频xo网站