怎样用javaweb做网站/安卓优化大师官方下载
目录
- 一、基于STM32CubeMX建立工程
- 二、获取uC/OS-III源码
- 三、代码移植
- 1.复制uC/OS-III文件到工程文件夹
- 2.工程组件和头文件路径的添加
- 打开工程,添加一下六个组
- 添加文件到分组
- 添加头文件路径
- 3.文件内容的修改
- 启动文件
- app_cfg.h
- includes.h
- bsp.c和bsp.h
- lib_cfg.h
- app.c
- main.c
- 总结
实验内容:学习嵌入式实时操作系统(RTOS),以uc/OS为例,将其移植到stm32F103上,构建至少3个任务(task):其中两个task分别以1s和3s周期对LED等进行点亮-熄灭的控制;另外一个task以2s周期通过串口发送“hello uc/OS! 欢迎来到RTOS多任务环境!”
一、基于STM32CubeMX建立工程
配置RCC
配置SYS
配置PA6和PB10为
GPIO_Output`
配置USART1
生成代码
二、获取uC/OS-III源码
官网下载地址:https://www.silabs.com/developers/micrium
或者
链接:https://pan.baidu.com/s/1PnPjS9vrpwOgGgeXGtoZhw
提取码:9962
–来自百度网盘超级会员V1的分享
三、代码移植
1.复制uC/OS-III文件到工程文件夹
在项目中创建一个UCOSIII
文件夹:
将下载的源文件下的uC-CPU
、uC-LIB
、uCOS-III
复制到该文件夹:
在Src文件夹下新建一个OS文件夹
将下载的源码中\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-III下的文件app.c 、 app_cfg.h 、 cpu_cfg.h 、 includes.h 、 lib_cfg.h 、 os_app_hooks.c 、os_app_hook.h、os_cfg.h、os_cfg_app.h复制到该OS文件夹中:
新建三个空白文件: bsp.c、bsp.h、app.h
:
2.工程组件和头文件路径的添加
打开工程,添加一下六个组
添加文件到分组
将Src/OS
中的bsp.c
和 bsp.h
文件添加至 bsp
组中,将 app.c
添加进 Application/User/Core
组中:
将UCOSIII/uC-CPU
中的cpu_core.c
、cpu_core.h
、cpu_def.h
添加进uCOSIII_CPU
组中,同时将UCOSIII/uC-CPU/ARM-Cortex-M3/RealView
中的三个文件添加到该组:
将UCOSIII/uC-LIB
中的9个文件添加到uCOSIII-LIB
组中,同时将UCOSIII/uC-LIB/Ports/ARM-Cortex-M3/Realview
中的lib_mem_a.asm
添加到该组中:
将UCOSIII/UcosIII/Ports/ARM-Cortex-M3/Generic/RealView
中的3个文件添加的uCOSIII_Ports
组中:
将UCOSIII/UcosIII/Source
中的20个文件添加到uCOSIII_Source
组中:
将Core/Src/OS
中的以下图中的8个文件添加到OS_cfg
组中
添加头文件路径
如图所示,添加头文件路径:
3.文件内容的修改
启动文件
将启动文件下图中的PendSV_Handler
和Systick_Handler
改为OS_CPU_PendSVHandler
和OS_CPU_SysTickHandler
:
修改前:
修改后:
app_cfg.h
修改前:
修改后:
includes.h
添加3个头文件:
#include "gpio.h"
#include "app_cfg.h"
#include "app.h"
修改前:
修改后:
#include "stm32f1xx_hal.h"
bsp.c和bsp.h
bsp.c
全部改为:
// bsp.c
#include "includes.h"#define DWT_CR *(CPU_REG32 *)0xE0001000
#define DWT_CYCCNT *(CPU_REG32 *)0xE0001004
#define DEM_CR *(CPU_REG32 *)0xE000EDFC
#define DBGMCU_CR *(CPU_REG32 *)0xE0042004#define DEM_CR_TRCENA (1 << 24)
#define DWT_CR_CYCCNTENA (1 << 0)CPU_INT32U BSP_CPU_ClkFreq (void)
{return HAL_RCC_GetHCLKFreq();
}void BSP_Tick_Init(void)
{CPU_INT32U cpu_clk_freq;CPU_INT32U cnts;cpu_clk_freq = BSP_CPU_ClkFreq();#if(OS_VERSION>=3000u)cnts = cpu_clk_freq/(CPU_INT32U)OSCfg_TickRate_Hz;#elsecnts = cpu_clk_freq/(CPU_INT32U)OS_TICKS_PER_SEC;#endifOS_CPU_SysTickInit(cnts);
}void BSP_Init(void)
{BSP_Tick_Init();MX_GPIO_Init();
}#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
void CPU_TS_TmrInit (void)
{CPU_INT32U cpu_clk_freq_hz;DEM_CR |= (CPU_INT32U)DEM_CR_TRCENA; /* Enable Cortex-M3's DWT CYCCNT reg. */DWT_CYCCNT = (CPU_INT32U)0u;DWT_CR |= (CPU_INT32U)DWT_CR_CYCCNTENA;cpu_clk_freq_hz = BSP_CPU_ClkFreq();CPU_TS_TmrFreqSet(cpu_clk_freq_hz);
}
#endif#if (CPU_CFG_TS_TMR_EN == DEF_ENABLED)
CPU_TS_TMR CPU_TS_TmrRd (void)
{return ((CPU_TS_TMR)DWT_CYCCNT);
}
#endif#if (CPU_CFG_TS_32_EN == DEF_ENABLED)
CPU_INT64U CPU_TS32_to_uSec (CPU_TS32 ts_cnts)
{CPU_INT64U ts_us;CPU_INT64U fclk_freq;fclk_freq = BSP_CPU_ClkFreq();ts_us = ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us);
}
#endif#if (CPU_CFG_TS_64_EN == DEF_ENABLED)
CPU_INT64U CPU_TS64_to_uSec (CPU_TS64 ts_cnts)
{CPU_INT64U ts_us;CPU_INT64U fclk_freq;fclk_freq = BSP_CPU_ClkFreq();ts_us = ts_cnts / (fclk_freq / DEF_TIME_NBR_uS_PER_SEC);return (ts_us);
}
#endif
bsp.h
:
// bsp.h
#ifndef __BSP_H__
#define __BSP_H__#include "stm32f1xx_hal.h"void BSP_Init(void);#endif
由于我们使用了printf函数,需要在usart.c
文件中添加以下代码完成printf重定向
//添加头文件#include "stdio.h"
/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *f){HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff);return ch;
}
/* USER CODE END 1 */
lib_cfg.h
加入宏定义:
#define LIB_MEM_CFG_HEAP_SIZE 10u * 1024u
app.c
#include "includes.h"
main.c
构建三个任务:
- 本实验采用PA6口进行1s周期亮灭,PB10口3s周期亮灭,通过串口每两秒发送“hello uc/OS! 欢迎来到RTOS多任务环境!”
#include "main.h"
#include "usart.h"
#include "gpio.h"
#include <includes.h>/* 任务优先级 */
#define START_TASK_PRIO 2
#define LED0_TASK_PRIO 3
#define LED1_TASK_PRIO 3
#define MSG_TASK_PRIO 4/* 任务堆栈大小 */
#define START_STK_SIZE 96
#define LED0_STK_SIZE 64
#define LED1_STK_SIZE 64
#define MSG_STK_SIZE 64/*定义任务控制块*/
static OS_TCB StartTaskTCB;
static OS_TCB Led0TaskTCB;
static OS_TCB Led1TaskTCB;
static OS_TCB MsgTaskTCB;/*定义任务堆栈*/
static CPU_STK START_TASK_STK[START_STK_SIZE];
static CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
static CPU_STK LED1_TASK_STK[LED1_STK_SIZE];
static CPU_STK MSG_TASK_STK[MSG_STK_SIZE];
void SystemClock_Config(void);/*声明用户任务*/
void start_task(void *p_arg);
static void led_PA6(void *p_arg);
static void send_msg(void *p_arg);
static void led_PB10(void *p_arg);/*主函数*/int main(void)
{OS_ERR err;OSInit(&err);HAL_Init();SystemClock_Config();//MX_GPIO_Init(); 这个在BSP的初始化里也会初始化MX_USART1_UART_Init(); /* 创建任务 */OSTaskCreate((OS_TCB *)&StartTaskTCB, /* Create the start task */(CPU_CHAR *)"start task",(OS_TASK_PTR ) start_task,(void *) 0,(OS_PRIO ) START_TASK_PRIO,(CPU_STK *)&START_TASK_STK[0],(CPU_STK_SIZE) START_STK_SIZE/10,(CPU_STK_SIZE) START_STK_SIZE,(OS_MSG_QTY ) 0,(OS_TICK ) 0,(void *) 0,(OS_OPT )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),(OS_ERR *)&err);/* 启动多任务系统,控制权交给uC/OS-III */OSStart(&err); /* Start multitasking (i.e. give control to uC/OS-III). */
}
void start_task(void *p_arg)
{OS_ERR err;CPU_SR_ALLOC();p_arg = p_arg;/* YangJie add 2021.05.20*/BSP_Init(); /* Initialize BSP functions *///CPU_Init();//Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err); //统计任务
#endif#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间CPU_IntDisMeasMaxCurReset();
#endif#if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候//使能时间片轮转调度功能,时间片长度为1个系统时钟节拍,既1*5=5msOSSchedRoundRobinCfg(DEF_ENABLED,1,&err);
#endif OS_CRITICAL_ENTER(); //进入临界区/* 创建LED0任务 */OSTaskCreate((OS_TCB * )&Led0TaskTCB, (CPU_CHAR * )"led_PA6", (OS_TASK_PTR )led_PA6, (void * )0, (OS_PRIO )LED0_TASK_PRIO, (CPU_STK * )&LED0_TASK_STK[0], (CPU_STK_SIZE)LED0_STK_SIZE/10, (CPU_STK_SIZE)LED0_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR * )&err); /* 创建LED1任务 */OSTaskCreate((OS_TCB * )&Led1TaskTCB, (CPU_CHAR * )"led_PB10", (OS_TASK_PTR )led_PB10, (void * )0, (OS_PRIO )LED1_TASK_PRIO, (CPU_STK * )&LED1_TASK_STK[0], (CPU_STK_SIZE)LED1_STK_SIZE/10, (CPU_STK_SIZE)LED1_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,(OS_ERR * )&err); /* 创建MSG任务 */OSTaskCreate((OS_TCB * )&MsgTaskTCB, (CPU_CHAR * )"send_msg", (OS_TASK_PTR )send_msg, (void * )0, (OS_PRIO )MSG_TASK_PRIO, (CPU_STK * )&MSG_TASK_STK[0], (CPU_STK_SIZE)MSG_STK_SIZE/10, (CPU_STK_SIZE)MSG_STK_SIZE, (OS_MSG_QTY )0, (OS_TICK )0, (void * )0, (OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, (OS_ERR * )&err);OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err); //挂起开始任务 OS_CRITICAL_EXIT(); //进入临界区
}static void led_PA6 (void *p_arg)
{OS_ERR err;(void)p_arg;BSP_Init(); /* Initialize BSP functions */CPU_Init();Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */
#endifCPU_IntDisMeasMaxCurReset();/* Create Application Objects */while (DEF_TRUE){HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 1, 0,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOA,GPIO_PIN_6,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 1, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}
static void led_PB10 (void *p_arg)
{OS_ERR err;(void)p_arg;BSP_Init(); /* Initialize BSP functions */CPU_Init();Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */
#endifCPU_IntDisMeasMaxCurReset();while (DEF_TRUE){HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_RESET);OSTimeDlyHMSM(0, 0, 3, 0,OS_OPT_TIME_HMSM_STRICT,&err);HAL_GPIO_WritePin(GPIOB,GPIO_PIN_10,GPIO_PIN_SET);OSTimeDlyHMSM(0, 0, 3, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}static void send_msg (void *p_arg)
{OS_ERR err;(void)p_arg;BSP_Init(); /* Initialize BSP functions */CPU_Init();Mem_Init(); /* Initialize Memory Management Module */#if OS_CFG_STAT_TASK_EN > 0uOSStatTaskCPUUsageInit(&err); /* Compute CPU capacity with no task running */
#endifCPU_IntDisMeasMaxCurReset();/* Create Application Objects */while (DEF_TRUE){printf("hello uc/OS! 欢迎来到RTOS多任务环境! \r\n");OSTimeDlyHMSM(0, 0, 2, 0,OS_OPT_TIME_HMSM_STRICT,&err);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL2;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){Error_Handler();}
}void Error_Handler(void)
{__disable_irq();while (1){}}#ifdef USE_FULL_ASSERTvoid assert_failed(uint8_t *file, uint32_t line)
{}
#endif
效果如下:
总结
本次实验主要学习了stm32f103c8t6移植uC/OS-III操作系统的具体流程,并完成了多任务创建实现的实验要求。
参考资料:
STM32F103基于HAL库移植uC/OS-III_ucos iii + hal移植到正点原子-CSDN博客
【STM32】Keil5在编译过程中出现.cannot open source input file “xxx.h“: No such file or directory的问题_keil no such file or directory-CSDN博客
相关文章:

uc/OS-III多任务程序
目录 一、基于STM32CubeMX建立工程二、获取uC/OS-III源码三、代码移植1.复制uC/OS-III文件到工程文件夹2.工程组件和头文件路径的添加打开工程,添加一下六个组添加文件到分组添加头文件路径 3.文件内容的修改启动文件app_cfg.hincludes.hbsp.c和bsp.hlib_cfg.happ.c…...

6月13日在线研讨会 | 多产品多流程多团队的ALM选择方案
随着汽车产业步入“软件定义汽车”时代,传统汽车产业的硬件中心模式逐渐被软件与服务的核心地位所取代,这是一场对汽车设计、制造及运营的全方位重塑。在这一转型过程中,如何高效管理汽车的整个生命周期成为了一项全新挑战。在此背景下&#…...

Maven使用${revision}实现多模块版本统一管理及注意事项
在 Maven 中,确实可以利用 ${revision} 来实现多模块项目的版本统一管理,尤其是在使用一些高级特性如 Maven Release Plugin 或者是在 CI/CD 流程中动态设置版本时。${revision} 是一个特殊的变量,它允许你在构建时动态地使用或设定项目的版本…...

vue2 bug求助!!!(未解决,大概是浏览器缓存的问题或者是路由的问题)
我的vue2项目出现了一个超级恶心的bug 过程: 1 操作流程:页面a点击a标签->到页面b->页面b用户退出刷新页面->点击浏览器的返回按钮返回上一页 2 结果:返回页面后页面没有刷新导致用户名还显示着,页面没有发生任何变化&a…...

C++的“引用”是条寄生虫
在C中,引用(reference)是一个已存在变量的别名(alias)。比如鲁讯原名周树人,前者就是后者的别名。 一、引用的用法 定义引用时需要用到&,用法如下: int ival 9527; int &am…...

人体感应提醒 大声公+微波模块
文章目录 模块简介接线程序示例 模块简介 微波感应开关模块 RCWL-0516是一款采用多普勒雷达技术,专门检测物体移动的微波感应模块。采用 2.7G 微波信号检测,该模块具有灵敏度高,感应距离远,可靠性强,感应角度大&#…...

正确的功能可将热晶体管风速计线性化
处理传感器电路输出信号的电路或计算公式必须生成传感器响应的反函数。例如,如果传感器响应是对数函数,则线性化部分的响应必须是指数的。 这项工作首先获取传感器响应的 46 个离散点(参见参考论文中的图 4)。刚开始时࿰…...

小程序集arcgis地图显示自定义坐标的功能实现记录!(学习笔记)
最近再做一个新能源回收项目,项目中有个根据回收点坐标数据显示区域内回收点位置,点击图标直接导航到该位置,及分布的需求,研究了一下,实现效果如下,实现起来很简单,代码及效果 回收点位置及分…...

谷歌医疗大模型登Nature,Med-PaLM重磅揭秘!AI医生成绩比肩人类
5月I/O大会上,Med-PaLM 2重磅升级,甚至达到了专家水准。 今天,谷歌揭秘微调后的Med-PaLM,同样在医学问题上一骑绝尘。 研究成果已登Nature。 论文地址:https://www.nature.com/articles/s41586-023-06291-2 这项研究…...

java-字符串相关类的底层原理
在 Java 中,字符串处理是编程中的一个常见任务。Java 提供了多种字符串相关的类,如 String, StringBuilder, StringBuffer 和 CharSequence 等,以满足不同的需求。这些类的底层原理基于 Java 内部的数据结构和算法。在本教程中,我…...

C++模板编程—学习C++类库的编程基础
课程总目录 文章目录 一、详解函数模板二、类模板三、类模板实践:实现向量容器vector四、理解容器空间配置器allocator的重要性 一、详解函数模板 模板的意义:对类型也可以进行参数化了 // 也可以用template<class T>,但class容易和类…...

[每周一更]-(第99期):MySQL的索引为什么用B+树?
文章目录 B树与B树的基本概念B树(Balanced Tree)B树(B-Plus Tree)对比 为什么MySQL选择B树1. **磁盘I/O效率**2. **更稳定的查询性能**3. **更高的空间利用率**4. **并发控制** 其他树结构的比较参考 索引是一种 数据结构&#x…...

详解MySQL的MVCC机制
多版本并发控制(MVCC,Multi-Version Concurrency Control)是MySQL InnoDB存储引擎用于实现事务隔离和提高并发性能的一种机制。MVCC通过在同一数据的多个版本之间进行管理,允许读写操作并发进行,从而避免了传统锁机制带…...

docker部署skywalking
skywalking版本下载 1:拉取skywalking的oap镜像(可以选择自己的版本,最好与ui,agent版本一致) docker pull apache/skywalking-oap-server:9.5.02:启动oap docker run -d -p 11800:11800 -p 12800:12800 --name sw_oap apache/…...

Mac 使用Docker安装Elasticsearch、Kibana 、ik分词器、head
安装ElasticSearch 通过docker安装es docker pull elasticsearch:7.8.1 在本地创建elasticsearch.yml文件 mkdir /Users/ky/Documents/learn/es/elasticsearch.yml 编辑yml文件内容 http: host: 0.0.0.0 xpack.security.enabled: false xpack.security.enrollment.enabled: t…...

【Webpack4打包机制原理解析】
webpack是一个打包模块化 JavaScript 的工具,在 webpack里一切文件皆模块,通过 Loader 转换文件,通过 Plugin 注入钩子,最后输出由多个模块组合成的文件。webpack专注于构建模块化项目。 # 简单版打包模型步骤 我们先从简单的入手…...

如何提高接口响应速度
在非大数据(几万以上记录)的情况下,影响接口响应速度的因素中最大的是查询数据库的次数,其次才是数组遍历和简单数据处理(如根据已有字段增加新的属性,或计算值)。 一般一次数据库查询需要50毫秒…...

项目敏感配置信息加固
概述 引入jasypt做密码等敏感配置信息的加固 项目集成依赖 pom.xml引入jasypt-spring-boot-starter依赖 <dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.…...

HCIA-AI课程大纲
该阶段详细介绍各个机器学习范式方法,涵盖有监督、无监督、半监督、强化学习,以及深度学习算法基础,共计 72 课时。 第一节:华为云 ModelArts 云服务开发环境搭建 - (2 课时) - 华为云 ModelArts 云服务简…...

keil program algorithm 出错
前段时间 在 调试下载算法时,遇到一个奇怪的问题 就是 加载下载算法后, 下载算法的RAM空间 大小不能修改为 单片机的最大RAM,只能改到最大4KB的空间大小, 再大就报错 刚开始报错 一直不知道原因,走了很多弯路, 到最…...

SITNE24V2BNQ-3/TR一种瞬态电压抑制器,对标PESD1CAN
SITNE24V2BNQ是一种瞬态电压抑制器,设计用于保护两个汽车控制器区域 网络(CAN)母线不受ESD等瞬变造成的损坏。 SITNE24V2BNQ采用SOT-23封装。标准产品不含铅和卤素。 产品参数 方向:双向通道数:2VRWM(V)(Max):24IPP8/20μS(A)(M…...

Vue3【四】使用Vue2的写法写一个新的组件子组件和根组件
Vue3【四】使用Vue2的写法写一个新的组件 Vue3【四】使用Vue2的写法写一个新的组件 Vue3是向下兼容的,所有可以使用Vue的选项式写法 运行截图 目录结构 文件源码 App.vue <template><div class"app"><h1>你好世界! 我是App根组件<…...

指标体系建设10大坑
在企业经营和运营管理中,指标体系的建设至关重要,它在一定程度上是反映业务的问题状况,影响决策者的决策。但是,在指标体系的建设过程中,常常会存在一些不容忽视的“坑”,今天做个总结,以下为个…...

ubuntu 20.04上docker 使用gpu
要在Docker容器中使用GPU,你需要确保系统上已经安装了正确的NVIDIA驱动程序,并且安装了NVIDIA Container Toolkit。以下是详细的步骤: 1. 安装NVIDIA驱动程序 确保你的系统上已经安装了适当版本的NVIDIA驱动程序。你可以通过运行以下命令来检查驱动程序是否正确安装: nv…...

短剧系统投流版开发,为运营公司投流业务赋能
短剧系统投流版开发是一项复杂的任务,旨在为运营公司的投流业务提供强大的技术支持和赋能。以下是一些关键步骤和考虑因素,以确保短剧系统投流版的成功开发: 一、明确业务需求与目标 首先,需要深入了解运营公司的业务需求、目标…...

入坑必看的几个嵌入式方向热点问题
我们为何要学嵌入式?---需求、薪资、长期发展 嵌入式是成为下一个JAVA吗? 互联网开发和嵌入式开发怎么选? 高薪热门就业方向有哪些? 刚入门,刚毕业,学完没有“工作经验”,能有人要吗&#x…...

电能表如何与智能家居进行有效的融合
随着智能家居技术的不断发展,越来越多的家庭开始使用智能家电、智能照明、智能安防等智能设备,以实现更加便捷、舒适、安全的居住环境。而电能表作为电力系统中不可或缺的一环,不仅承担着计量电能的重要职责,还可以为智能家居系统…...

jmeter多用户登录并退出教程
有时候为了模拟更真实的场景,在项目中需要多用户登录并退出操作,大致参考如下 多用户登录前面已经实现:参考博文 多用户登录并退出jmx文件:百度网盘 提取码:0000 一、多用户退出操作 添加一个setUp线程组࿰…...

阿里云ECS实例镜像本地取证
更新时间:2024年03月21日10:09:37 1. 说明 很多非法案件中,服务器是直接搭建在阿里云上的,比如我们在拿到OSSKey之后(技术方法、其它方法等),可以将涉案服务器镜像导出,在本地进行取证分析。 …...

不要硬来!班组管理有“巧思”
班组管理,听起来似乎是一个充满“硬气”的词汇,让人联想到严肃、刻板的制度和规矩。然而,在实际操作中,我们却需要运用一些“巧思”,以柔克刚,让班组管理既有力度又不失温度。 在班组管理中,我们…...