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

专业做室内设计的网站有哪些内容建设网站女装名字大全

专业做室内设计的网站有哪些内容,建设网站女装名字大全,建标库官网,网站内部优化建设CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可…

CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可用资源的数量。

特性

计数信号量:Semaphore 可以作为计数信号量使用,管理多个相同类型的资源。例如,如果有多个 DMA 通道,可以使用 Semaphore 来限制同时访问这些通道的数量。

生产者/消费者信号量:Semaphore 也可以用于实现生产者和消费者之间的同步,确保在消费者准备好之前,生产者不会覆盖数据。

Semaphore在并发编程中确实可以作为一种锁来使用,用于控制多个线程对共享资源的访问。首先,你需要确定在任意时刻能够同时访问共享资源的最大线程数,并将这个数作为初始值来创建一个Semaphore对象。这个初始值通常表示许可的数量,每个许可允许一个线程访问共享资源。当线程想要访问共享资源时,它应该首先调用Semaphore对象的osSemaphoreAcquire()方法。这个方法会尝试从Semaphore中获取一个许可。如果Semaphore中有可用的许可(即计数器的值大于0),那么线程会立即获取一个许可并继续执行。如果没有可用的许可(即计数器的值为0),那么线程将被阻塞,直到有可用的许可。一旦线程成功获取到许可,它就可以安全地访问共享资源了。在访问期间,线程可以执行任何需要的操作。当线程完成对共享资源的访问后,它应该调用Semaphore对象的osSemaphoreRelease()方法来释放之前获取的许可。这个方法会将Semaphore的计数器加1,表示有一个新的许可可用。其他等待的线程(如果有的话)现在可能会获取到这个许可并继续执行。

Semaphore API

API名称

说明

osSemaphoreNew

创建并初始化一个信号量

osSemaphoreGetName

获取一个信号量的名字

osSemaphoreAcquire

获取一个信号量的令牌,若获取不到,则会超时返回

osSemaphoreRelease

释放一个信号量的令牌,但是令牌的数量不超过初始定义的的令牌数

osSemaphoreGetCount

获取当前的信号量令牌数

osSemaphoreDelete

删除一个信号量

代码编写

修改D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\BUILD.gn文件

# Copyright (c) 2023 Beijing HuaQing YuanJian Education Technology Co., Ltd
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. import("//build/lite/config/component/lite_component.gni")lite_component("demo") {features = [#"base_00_helloworld:base_helloworld_example",#"base_01_led:base_led_example",#"base_02_loopkey:base_loopkey_example",#"base_03_irqkey:base_irqkey_example",#"base_04_adc:base_adc_example",#"base_05_pwm:base_pwm_example",#"base_06_ssd1306:base_ssd1306_example",#"kernel_01_task:kernel_task_example",#"kernel_02_timer:kernel_timer_example",#"kernel_03_event:kernel_event_example",#"kernel_04_mutex:kernel_mutex_example","kernel_05_semaphore_as_mutex:kernel_semaphore_as_mutex_example",]
}

创建D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\kernel_05_semaphore_as_mutex文件夹

文件夹中创建D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\kernel_05_semaphore_as_mutex\kernel_semaphore_as_mutex_example.c文件D:\DevEcoProjects\test\src\vendor\rtplay\rt_hi3861\demo\kernel_05_semaphore_as_mutex\BUILD.gn文件

# Copyright (c) 2023 Beijing HuaQing YuanJian Education Technology Co., Ltd
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. static_library("kernel_semaphore_as_mutex_example") {sources = ["kernel_semaphore_as_mutex_example.c"]include_dirs = ["//utils/native/lite/include","//kernel/liteos_m/kal/cmsis",]
}
/** Copyright (c) 2023 Beijing HuaQing YuanJian Education Technology Co., Ltd* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**    http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/#include <stdio.h>
#include <unistd.h>#include "ohos_init.h"
#include "cmsis_os2.h"osThreadId_t Task1_ID;        //  任务1 ID
osThreadId_t Task2_ID;        //  任务2 ID
osSemaphoreId_t Semaphore_ID; // 信号量ID
uint8_t buff[20] = {0};       // 定义一个共享资源
#define TASK_STACK_SIZE 1024
#define TASK_DELAY_TIME 1 // s/*** @description: 任务1* @param {*}* @return {*}*/
void Task1(void)
{int i = 0;while (1) {printf("[info] enter Task 1.......\n");osSemaphoreAcquire(Semaphore_ID, osWaitForever); // 请求信号量 -1// 操作共享数据 写数据printf("[info] write Buff Data: \n");for (i = 0; i < sizeof(buff); i++) {buff[i] = i;}printf("\n");osSemaphoreRelease(Semaphore_ID); // 释放信号量 +1sleep(TASK_DELAY_TIME);}
}
/*** @description: 任务2* @param {*}* @return {*}*/
void Task2(void)
{int i = 0;while (1) {printf("enter Task 2.......\n");osSemaphoreAcquire(Semaphore_ID, osWaitForever); // 请求信号量 -1// 操作共享数据 读数据printf("[info] read Buff Data: \n");for (i = 0; i < sizeof(buff); i++) {printf("%d \n", buff[i]);}printf("\n");osSemaphoreRelease(Semaphore_ID); // 释放信号量 +1sleep(TASK_DELAY_TIME);}
}
/*** @description: 初始化并创建任务* @param {*}* @return {*}*/
static void kernel_mutex_semaphore_example(void)
{printf("Enter kernel_mutex_semaphore_example()!\n");// 创建信号量Semaphore_ID = osSemaphoreNew(1, 1, NULL); // 参数: 最大计数值,初始计数值,参数配置if (Semaphore_ID != NULL) {printf("ID = %d, Create Semaphore_ID is OK!\n", Semaphore_ID);}osThreadAttr_t taskOptions;taskOptions.name = "Task1";              // 任务的名字taskOptions.attr_bits = 0;               // 属性位taskOptions.cb_mem = NULL;               // 堆空间地址taskOptions.cb_size = 0;                 // 堆空间大小taskOptions.stack_mem = NULL;            // 栈空间地址taskOptions.stack_size = TASK_STACK_SIZE;           // 栈空间大小 单位:字节taskOptions.priority = osPriorityNormal; // 任务的优先级Task1_ID = osThreadNew((osThreadFunc_t)Task1, NULL, &taskOptions); // 创建任务1if (Task1_ID != NULL) {printf("ID = %d, Create Task1_ID is OK!\n", Task1_ID);}taskOptions.name = "Task2";                                        // 任务的名字taskOptions.priority = osPriorityNormal;                           // 任务的优先级Task2_ID = osThreadNew((osThreadFunc_t)Task2, NULL, &taskOptions); // 创建任务2if (Task2_ID != NULL) {printf("ID = %d, Create Task2_ID is OK!\n", Task2_ID);}
}
SYS_RUN(kernel_mutex_semaphore_example);

使用build,编译成功后,使用upload进行烧录。

http://www.yayakq.cn/news/813177/

相关文章:

  • 网站网络投票建设步骤合肥网站建合肥网站建设找蓝领商务
  • 河南官网网站建设wordpress cart
  • 怎样学做企业网站Wordpress用户名是哪个
  • 做私人小网站赚钱吗iis网站伪静态网站
  • 网站建设代理公司wordpress换网址插件
  • 宿迁市建设局网站互联网+创新创业大赛
  • 专业网站建设案例手机app下载平台哪个好
  • 青岛网站建设公司报价自己想做个网站需要多少钱
  • 公司网站怎么登录做轮播海报的网站
  • 做网站找哪家公司比较好产品营销方案策划书
  • 免费个人网站源码下载学广告设计需要什么学历
  • 网站icp备案号怎么查网站建设哪些网站可以
  • access 数据库做网站dede古典网站模板
  • 温州手机建站模板建设内网网站流程
  • 网站屏蔽国内ipc2c的区别
  • 怎么在手机上做一个网站太原本地网站搭建公司
  • 邹平做网站的联系方式公司广告推广
  • 徐州免费网站建设模板创新的盐城网站建设
  • 哪个网站做网站方便学做网站论坛熊掌
  • 百度怎么推广自己的网站php网站怎么做后台管理
  • 广州企业网站推广网站有什么作用
  • 小网站的制作区块链系统app开发
  • 自学网站有哪些自学网通道一通道二通道三免费
  • dede网站模板 医疗网站项目报价
  • 免费发布租房信息网站白山建设局网站
  • 免费网络空间搜索引擎手机优化对手机有影响吗
  • 七里河微信网站建设管理咨询公司取名
  • 购物类网站模板wordpress内容加密
  • 开发网站用什么软件网站源码下载平台源码
  • 怎么做一元购物网站做网站网页尺寸是多少钱