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

【2】STM32·FreeRTOS·任务创建和删除

目录

一、任务创建和删除的API函数

1.1、动态创建任务函数

1.2、静态创建任务函数

1.3、任务删除函数

二、任务创建和删除(动态方法)

三、任务创建和删除(静态方法)


一、任务创建和删除的API函数

任务的创建和删除本质就是调用 FreeRTOS 的 API 函数

API函数描述

xTaskCreate()

动态方式创建任务
xTaskCreateStatic()静态方式创建任务
xTaskDelete()删除任务

动态创建任务:任务的任务控制块以及任务的栈空间所需的内存,均由 FreeRTOS 从 FreeRTOS 管理的堆中分配

静态创建任务:任务的任务控制块以及任务的栈空间所需的内存,需用户分配提供

1.1、动态创建任务函数

BaseType_t xTaskCreate
(TaskFunction_t                  pxTaskCode,      /* 指向任务函数的指针 */const char * const              pcName,          /* 任务名字,最大长度configMAX_TASK_NAME_LEN */const configSTACK_DEPTH_TYPE    usStackDepth,    /* 任务堆栈大小,注意字为单位 */void * const                    pvParameters,    /* 传递给任务函数的参数 */UBaseType_t                     uxPriority,      /* 任务优先级,范围:0 ~ configMAX_PRIORITIES - 1 */TaskHandle_t * const            pxCreatedTask    /* 任务句柄,就是任务的任务控制块 */
)
返回值描述
pdPASS任务创建成功

errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY

任务创建失败

实现动态创建任务流程

1、将宏 configSUPPORT_DYNAMIC_ALLOCATION 配置为 1

2、定义函数入口参数

3、编写任务函数

此函数创建的任务会立刻进入就绪态,由任务调度器调度运行

动态创建任务函数内部实现

1、申请堆栈内存&任务控制块内存

2、TCB结构体成员赋值

3、添加新任务到就绪列表中

任务控制块结构体成员介绍

typedef struct tskTaskControlBlock
{volatile StackType_t      *pxTopOfStack;                           /* 任务栈栈顶,必须为TCB的第一个成员 */ListItem_t                xStateListItem;                          /* 任务状态列表项 */ListItem_t                xEventListItem;                          /* 任务事件列表项 */UBaseType_t               uxPriority;                              /* 任务优先级,数值越大,优先级越大 */StackType_t               *pxStack;                                /* 任务栈起始地址 */char                      pcTaskName[configMAX_TASK_NAME_LEN];     /* 任务名字 */...
} tskTCB;

任务栈栈顶,在任务切换时的任务上下文保存、任务恢复息息相关

每个任务都有属于自己的任务控制块,类似身份证

1.2、静态创建任务函数

TaskHandle_t xTaskCreateStatic
(TaskFunction_t          pxTaskCode,        /* 指向任务函数的指针 */const char * const      pcName,            /* 任务函数名 */const uint32_t          ulStackDepth,      /* 任务堆栈大小,注意字为单位 */void * const            pvParameters,      /* 传递给任务函数的参数 */UBaseType_t             uxPriority,        /* 任务优先级 */StackType_t * const     puxStackBuffer,    /* 任务堆栈,一般为数组,由用户分配 */StaticTask_t * const    pxTaskBuffer       /* 任务控制块指针,由用户分配 */
)
返回值描述
NULL用户没有提供相应的内存,任务创建失败

其他值

任务句柄,任务创建成功

静态创建任务使用流程

1、将宏 configSUPPORT_STATIC_ALLOCATION 配置为 1

2、定义空闲任务&定时器任务的任务堆栈及TCB

3、实现两个接口函数:vApplicationGetIdleTaskMemory()、vApplicationGetTimerTaskMemory()

4、定义函数入口参数

5、编写任务函数

此函数创建的任务会立刻进入就绪态,由任务调度器调度运行

静态创建任务函数内部实现

1、TCB结构体成员赋值

2、添加新任务到就绪列表中

1.3、任务删除函数

void vTaskDelete(TaskHandle_t xTaskToDelete);
形参描述
xTaskToDelete待删除任务的任务句柄

用于删除已被创建的任务,被删除的任务将从就绪态任务列表阻塞态任务列表挂起态任务列表事件列表中移除

1、当传入的参数为NULL,则代表删除任务自身(当前正在运行的任务)

2、当要删除任务自身时,空闲任务会负责释放被删除任务中由系统分配的内存(动态创建任务),但是由用户在任务删除前申请的内存(静态创建任务),则需要由用户在任务被删除前提前释放,否则将导致内存泄漏

删除任务流程

1、使用删除任务函数,需将宏 INCLUDE_vTaskDelete 配置为 1

2、入口参数输入需要删除的任务句柄(NULL代表删除本身)

删除任务函数内部实现

1、获取所要删除任务的控制块:通过传入的任务句柄,判断所需要删除哪个任务,NULL代表删除自身

2、将被删除任务,移除所在列表:将该任务在所在列表中移除,包括:就绪、阻塞、挂起、事件等列表

3、判断所需要删除的任务:删除任务自身,需先添加到等待删除列表,内存释放将在空闲任务执行。删除其他任务,释放内存,任务数量

4、更新下个任务的阻塞时间:更新下一个任务的阻塞超时时间,以防被删除的任务就是下一个阻塞超时的任务

二、任务创建和删除(动态方法)

将设计四个任务:start_task、task1、task2、task3

四个任务的功能如下

start_task:用来创建其他三个任务

task1:实现 LED0 每 500ms 闪烁一次

task2:实现 LED0 每 500ms 闪烁一次

task3:判断按键 KEY0 是否按下,按下则删掉 task1

main.c

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/LCD/lcd.h"
#include "./BSP/KEY/key.h"
#include "freertos_demo.h"int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */delay_init(168);                    /* 延时初始化 */usart_init(115200);                 /* 串口初始化为115200 */led_init();                         /* 初始化LED */lcd_init();                         /* 初始化LCD */key_init();                         /* 初始化按键 */freertos_demo();
}

freertos_demo.c

#include "freertos_demo.h"/******************************************************************************************************/
/*FreeRTOS配置*//* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define START_TASK_PRIO 1            /* 任务优先级 */
#define START_STK_SIZE 128           /* 任务堆栈大小 */
TaskHandle_t StartTask_Handler;      /* 任务句柄 */
void start_task(void *pvParameters); /* 任务函数 *//* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK1_PRIO 2            /* 任务优先级 */
#define TASK1_STK_SIZE 128      /* 任务堆栈大小 */
TaskHandle_t Task1Task_Handler; /* 任务句柄 */
void task1(void *pvParameters); /* 任务函数 *//* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO 3            /* 任务优先级 */
#define TASK2_STK_SIZE 128      /* 任务堆栈大小 */
TaskHandle_t Task2Task_Handler; /* 任务句柄 */
void task2(void *pvParameters); /* 任务函数 *//* TASK3 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK3_PRIO 4            /* 任务优先级 */
#define TASK3_STK_SIZE 128      /* 任务堆栈大小 */
TaskHandle_t Task3Task_Handler; /* 任务句柄 */
void task3(void *pvParameters); /* 任务函数 *//******************************************************************************************************//* LCD刷屏时使用的颜色 */
uint16_t lcd_discolor[11] = {WHITE, BLACK, BLUE, RED,MAGENTA, GREEN, CYAN, YELLOW,BROWN, BRRED, GRAY};/* FreeRTOS例程入口函数 */
void freertos_demo(void)
{lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);lcd_show_string(10, 47, 220, 24, 24, "Task Create & Del", RED);lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);lcd_draw_rectangle(5, 110, 115, 314, BLACK);lcd_draw_rectangle(125, 110, 234, 314, BLACK);lcd_draw_line(5, 130, 115, 130, BLACK);lcd_draw_line(125, 130, 234, 130, BLACK);lcd_show_string(15, 111, 110, 16, 16, "Task1: 000", BLUE);lcd_show_string(135, 111, 110, 16, 16, "Task2: 000", BLUE);xTaskCreate((TaskFunction_t)start_task,          /* 任务函数 */(const char *)"start_task",          /* 任务名称 */(uint16_t)START_STK_SIZE,            /* 任务堆栈大小 */(void *)NULL,                        /* 传入给任务函数的参数 */(UBaseType_t)START_TASK_PRIO,        /* 任务优先级 */(TaskHandle_t *)&StartTask_Handler); /* 任务句柄 */vTaskStartScheduler();
}/* start_task */
void start_task(void *pvParameters)
{taskENTER_CRITICAL(); /* 进入临界区 *//* 创建任务1 */xTaskCreate((TaskFunction_t)task1,               /* 任务函数 */(const char *)"task1",               /* 任务名称 */(uint16_t)TASK1_STK_SIZE,            /* 任务堆栈大小 */(void *)NULL,                        /* 传入给任务函数的参数 */(UBaseType_t)TASK1_PRIO,             /* 任务优先级 */(TaskHandle_t *)&Task1Task_Handler); /* 任务句柄 *//* 创建任务2 */xTaskCreate((TaskFunction_t)task2,               /* 任务函数 */(const char *)"task2",               /* 任务名称 */(uint16_t)TASK2_STK_SIZE,            /* 任务堆栈大小 */(void *)NULL,                        /* 传入给任务函数的参数 */(UBaseType_t)TASK2_PRIO,             /* 任务优先级 */(TaskHandle_t *)&Task2Task_Handler); /* 任务句柄 *//* 创建任务3 */xTaskCreate((TaskFunction_t)task3,               /* 任务函数 */(const char *)"task3",               /* 任务名称 */(uint16_t)TASK3_STK_SIZE,            /* 任务堆栈大小 */(void *)NULL,                        /* 传入给任务函数的参数 */(UBaseType_t)TASK3_PRIO,             /* 任务优先级 */(TaskHandle_t *)&Task3Task_Handler); /* 任务句柄 */vTaskDelete(StartTask_Handler);                  /* 删除开始任务 */taskEXIT_CRITICAL();                             /* 退出临界区 */
}/* task1 */
void task1(void *pvParameters)
{uint32_t task1_num = 0;while (1){lcd_fill(6, 131, 114, 313, lcd_discolor[++task1_num % 11]);lcd_show_xnum(71, 111, task1_num, 3, 16, 0x80, BLUE);LED0_TOGGLE();vTaskDelay(500);}
}/* task2 */
void task2(void *pvParameters)
{uint32_t task2_num = 0;while (1){lcd_fill(126, 131, 233, 313, lcd_discolor[11 - (++task2_num % 11)]);lcd_show_xnum(191, 111, task2_num, 3, 16, 0x80, BLUE);LED1_TOGGLE();vTaskDelay(500);}
}/* task3 */
void task3(void *pvParameters)
{uint8_t key = 0;while (1){key = key_scan(0);switch (key){case KEY0_PRES: /* 删除任务1 */{if (Task1Task_Handler != NULL){vTaskDelete(Task1Task_Handler);Task1Task_Handler = NULL;}break;}case KEY1_PRES: /* 删除任务2 */{if (Task2Task_Handler != NULL){vTaskDelete(Task2Task_Handler);Task2Task_Handler = NULL;}break;}default:{break;}}vTaskDelay(10);}
}

freertos_demo.h

#ifndef __FREERTOS_DEMO_H
#define __FREERTOS_DEMO_H#include "./SYSTEM/usart/usart.h"
#include "./BSP/LED/led.h"
#include "./BSP/KEY/key.h"
#include "./BSP/LCD/lcd.h"
#include "FreeRTOS.h"
#include "task.h"void freertos_demo(void);#endif

三、任务创建和删除(静态方法)

将设计四个任务:start_task、task1、task2、task3

四个任务的功能如下

start_task:用来创建其他三个任务

task1:实现 LED0 每 500ms 闪烁一次

task2:实现 LED0 每 500ms 闪烁一次

task3:判断按键 KEY0 是否按下,按下则删掉 task1

main.c、freertos_demo.h 和动态创建一样

freertos_demo.c

#include "freertos_demo.h"/******************************************************************************************************/
/*FreeRTOS配置*/static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];      /* 空闲任务任务堆栈 */
static StaticTask_t IdleTaskTCB;                                 /* 空闲任务控制块 */
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH]; /* 定时器服务任务堆栈 */
static StaticTask_t TimerTaskTCB;                                /* 定时器服务任务控制块 *//*** @brief       获取空闲任务地任务堆栈和任务控制块内存,因为本例程使用的静态内存,因此空闲任务的任务堆栈和任务控制块的内存就应该有用户来提供,FreeRTOS提供了接口函数vApplicationGetIdleTaskMemory()实现此函数即可。* @param       ppxIdleTaskTCBBuffer:任务控制块内存ppxIdleTaskStackBuffer:任务堆栈内存pulIdleTaskStackSize:任务堆栈大小* @retval      无*/
void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,StackType_t **ppxIdleTaskStackBuffer,uint32_t *pulIdleTaskStackSize)
{*ppxIdleTaskTCBBuffer = &IdleTaskTCB;*ppxIdleTaskStackBuffer = IdleTaskStack;*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}/*** @brief       获取定时器服务任务的任务堆栈和任务控制块内存* @param       ppxTimerTaskTCBBuffer:任务控制块内存ppxTimerTaskStackBuffer:任务堆栈内存pulTimerTaskStackSize:任务堆栈大小* @retval      无*/
void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,StackType_t **ppxTimerTaskStackBuffer,uint32_t *pulTimerTaskStackSize)
{*ppxTimerTaskTCBBuffer = &TimerTaskTCB;*ppxTimerTaskStackBuffer = TimerTaskStack;*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}/* START_TASK 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define START_TASK_PRIO 1                   /* 任务优先级 */
#define START_STK_SIZE 128                  /* 任务堆栈大小 */
StackType_t StartTaskStack[START_STK_SIZE]; /* 任务堆栈 */
StaticTask_t StartTaskTCB;                  /* 任务控制块 */
TaskHandle_t StartTask_Handler;             /* 任务句柄 */
void start_task(void *pvParameters);        /* 任务函数 *//* TASK1 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK1_PRIO 2                        /* 任务优先级 */
#define TASK1_STK_SIZE 128                  /* 任务堆栈大小 */
StackType_t Task1TaskStack[TASK1_STK_SIZE]; /* 任务堆栈 */
StaticTask_t Task1TaskTCB;                  /* 任务控制块 */
TaskHandle_t Task1Task_Handler;             /* 任务句柄 */
void task1(void *pvParameters);             /* 任务函数 *//* TASK2 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK2_PRIO 3                        /* 任务优先级 */
#define TASK2_STK_SIZE 128                  /* 任务堆栈大小 */
StackType_t Task2TaskStack[TASK2_STK_SIZE]; /* 任务堆栈 */
StaticTask_t Task2TaskTCB;                  /* 任务控制块 */
TaskHandle_t Task2Task_Handler;             /* 任务句柄 */
void task2(void *pvParameters);             /* 任务函数 *//* TASK3 任务 配置* 包括: 任务句柄 任务优先级 堆栈大小 创建任务*/
#define TASK3_PRIO 4                        /* 任务优先级 */
#define TASK3_STK_SIZE 128                  /* 任务堆栈大小 */
StackType_t Task3TaskStack[TASK3_STK_SIZE]; /* 任务堆栈 */
StaticTask_t Task3TaskTCB;                  /* 任务控制块 */
TaskHandle_t Task3Task_Handler;             /* 任务句柄 */
void task3(void *pvParameters);             /* 任务函数 *//******************************************************************************************************//* LCD刷屏时使用的颜色 */
uint16_t lcd_discolor[11] = {WHITE, BLACK, BLUE, RED,MAGENTA, GREEN, CYAN, YELLOW,BROWN, BRRED, GRAY};/* FreeRTOS例程入口函数 */
void freertos_demo(void)
{lcd_show_string(10, 10, 220, 32, 32, "STM32", RED);lcd_show_string(10, 47, 220, 24, 24, "Task Create & Del", RED);lcd_show_string(10, 76, 220, 16, 16, "ATOM@ALIENTEK", RED);lcd_draw_rectangle(5, 110, 115, 314, BLACK);lcd_draw_rectangle(125, 110, 234, 314, BLACK);lcd_draw_line(5, 130, 115, 130, BLACK);lcd_draw_line(125, 130, 234, 130, BLACK);lcd_show_string(15, 111, 110, 16, 16, "Task1: 000", BLUE);lcd_show_string(135, 111, 110, 16, 16, "Task2: 000", BLUE);StartTask_Handler = xTaskCreateStatic((TaskFunction_t)start_task,     /* 任务函数 */(const char *)"start_task",     /* 任务名称 */(uint32_t)START_STK_SIZE,       /* 任务堆栈大小 */(void *)NULL,                   /* 传递给任务函数的参数 */(UBaseType_t)START_TASK_PRIO,   /* 任务优先级 */(StackType_t *)StartTaskStack,  /* 任务堆栈 */(StaticTask_t *)&StartTaskTCB); /* 任务控制块 */vTaskStartScheduler();
}/* start_task */
void start_task(void *pvParameters)
{taskENTER_CRITICAL(); /* 进入临界区 *//* 创建任务1 */Task1Task_Handler = xTaskCreateStatic((TaskFunction_t)task1,          /* 任务函数 */(const char *)"task1",          /* 任务名称 */(uint32_t)TASK1_STK_SIZE,       /* 任务堆栈大小 */(void *)NULL,                   /* 传递给任务函数的参数 */(UBaseType_t)TASK1_PRIO,        /* 任务优先级 */(StackType_t *)Task1TaskStack,  /* 任务堆栈 */(StaticTask_t *)&Task1TaskTCB); /* 任务控制块 *//* 创建任务2 */Task2Task_Handler = xTaskCreateStatic((TaskFunction_t)task2,          /* 任务函数 */(const char *)"task2",          /* 任务名称 */(uint32_t)TASK2_STK_SIZE,       /* 任务堆栈大小 */(void *)NULL,                   /* 传递给任务函数的参数 */(UBaseType_t)TASK2_PRIO,        /* 任务优先级 */(StackType_t *)Task2TaskStack,  /* 任务堆栈 */(StaticTask_t *)&Task2TaskTCB); /* 任务控制块 *//* 创建任务3 */Task3Task_Handler = xTaskCreateStatic((TaskFunction_t)task3,          /* 任务函数 */(const char *)"task3",          /* 任务名称 */(uint32_t)TASK3_STK_SIZE,       /* 任务堆栈大小 */(void *)NULL,                   /* 传递给任务函数的参数 */(UBaseType_t)TASK3_PRIO,        /* 任务优先级 */(StackType_t *)Task3TaskStack,  /* 任务堆栈 */(StaticTask_t *)&Task3TaskTCB); /* 任务控制块 */vTaskDelete(StartTask_Handler);                                       /* 删除开始任务 */taskEXIT_CRITICAL();                                                  /* 退出临界区 */
}/* task1 */
void task1(void *pvParameters)
{uint32_t task1_num = 0;while (1){lcd_fill(6, 131, 114, 313, lcd_discolor[++task1_num % 11]);lcd_show_xnum(71, 111, task1_num, 3, 16, 0x80, BLUE);LED0_TOGGLE();vTaskDelay(500);}
}/* task2 */
void task2(void *pvParameters)
{uint32_t task2_num = 0;while (1){lcd_fill(126, 131, 233, 313, lcd_discolor[11 - (++task2_num % 11)]);lcd_show_xnum(191, 111, task2_num, 3, 16, 0x80, BLUE);LED1_TOGGLE();vTaskDelay(500);}
}/* task3 */
void task3(void *pvParameters)
{uint8_t key = 0;while (1){key = key_scan(0);switch (key){case KEY0_PRES: /* 删除任务1 */{if (Task1Task_Handler != NULL){vTaskDelete(Task1Task_Handler);Task1Task_Handler = NULL;}break;}case KEY1_PRES: /* 删除任务2 */{if (Task2Task_Handler != NULL){vTaskDelete(Task2Task_Handler);Task2Task_Handler = NULL;}break;}default:{break;}}vTaskDelay(10);}
}

相关文章:

【2】STM32·FreeRTOS·任务创建和删除

目录 一、任务创建和删除的API函数 1.1、动态创建任务函数 1.2、静态创建任务函数 1.3、任务删除函数 二、任务创建和删除(动态方法) 三、任务创建和删除(静态方法) 一、任务创建和删除的API函数 任务的创建和删除本质就是…...

日志审计系统在提高网络安全方面具有哪些重要的作用

随着信息技术的飞速发展,我们正处于一个高度互联、数据驱动的网络时代。在这个时代,日志审计系统作为网络安全和信息管理的重要工具,发挥着至关重要的作用。下面德迅云安全就详细介绍下关于日志审计系统在当今网络时代的重要性。 一、什么是日…...

二维泊松方程(Neumann+Direchliet边界条件)有限元Matlab编程求解|程序源码+说明文本

专栏导读 作者简介:工学博士,高级工程师,专注于工业软件算法研究本文已收录于专栏:《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现,并提供所有案例完整源码;2.单元…...

13_Scala面向对象编程_伴生对象

文章目录 1.伴生对象1.1 scala的一个性质,scala文件中的类都是公共的;1.2 scala使用object关键字也可以声明对象; 3.关于伴生对象和类4.权限修饰符,scala仅有private;5.伴生对象可以访问伴生类中的私有属性;6.案例7.伴…...

RS485空调系统到BACnet江森楼宇系统的高效整合攻略

智慧城市的每一栋建筑都在追求更高的能效与更佳的居住体验,而这一切的实现离不开强大且灵活的楼宇自动化系统。其中,协议转换网关作为连接不同设备的纽带,扮演着至关重要的角色。本文将以一个典型的商业综合体为例,揭秘BACnet协议…...

Springboot集成Redis操作缓存-06

Redis简介 Redis(Remote Dictionary Server),即远程字典服务,是一个开源的、使用ANSI C语言编写的、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 功能特点 数据结构丰富&#…...

【WPF】聊聊WPF中INotifyPropertyChanged [TOC]

聊聊WPF中INotifyPropertyChanged 文章目录 聊聊WPF中INotifyPropertyChanged一、INotifyPropertyChanged接口二、DataContext2.1/DataContext作用2.2/DataContext特性2.3/DataContext实例 三、INotifyPropertyChanged接口的几种实现方式3.1/简单INotifyPropertyChanged绑定3.2…...

SpringBoot Actuator未授权访问漏洞的解决方法

1. 介绍 Spring Boot Actuator 是一个用于监控和管理 Spring Boot 应用程序的功能模块。它提供了一系列生产就绪的功能,帮助你了解应用程序的运行状况,以及在运行时对应用程序进行调整。Actuator 使用了 Spring MVC 来暴露各种 HTTP 或 JMX 端点&#x…...

AI大模型探索之路-训练篇18:大语言模型预训练-微调技术之Prompt Tuning

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…...

Ollamallama

Olllama 直接下载ollama程序,安装后可在cmd里直接运行大模型; llama 3 meta 开源的最新llama大模型; 下载运行 1 ollama ollama run llama3 2 github 下载仓库,需要linux环境,windows可使用wsl; 接…...

苹果Mac用户下载VS Code(Universal、Intel Chip、Apple Silicon)哪个版本?

苹果macOS用户既可以下载通用版(Universal),软件将自动检测用户的处理器并进行适配。 也可以根据型号下载对应CPU的版本: 使用Intel CPU的Mac电脑可下载Intel Chip版本; 使用苹果自研M系列CPU的Mac电脑下载Apple Si…...

Linux(Ubuntu)安装CGAL(非root)

一、安装boost 下载地址:Boost C Libraries - Browse /boost at SourceForge.net 我安装的是1.77.0的版本 ./bootstrap.sh --prefix/usr/local/boost ./b2 ./b2 install 配置环境变量 vim ~/.bashrcexport BOOST_INCLUDE/usr/local/boost/include export BO…...

hadoop学习---基于Hive的教育平台数据仓库分析案例(三)

衔接第一部分,第一部分请点击:基于Hive的教育平台数据仓库分析案例(一) 衔接第二部分,第二部分请点击:基于Hive的教育平台数据仓库分析案例(二) 学生出勤模块(全量分析)&#xff1a…...

RAFT:引领 Llama 在 RAG 中发展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

上海亚商投顾:沪指缩量调整 合成生物概念股持续爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日缩量震荡调整,深成指、创业板指均跌超1%。细胞免疫治疗概念股大涨,冠昊生物、…...

Maven+Junit5 + Allure +Jenkins 搭建 UI 自动化测试实战

文章目录 效果展示Junit 5Junit 5 介绍Junit 5 与 Junit 4 对比PageFactory 模式编写自动化代码公共方法提取测试用例参数化Jenkins 搭建及配置参数化执行生成 Allure 报告Maven 常用命令介绍POM 文件效果展示 本 chat 介绍 UI 自动化测试框架的搭建: 运用 page factory 模式…...

docker学习笔记(三)搭建NFS服务实验

目录 什么是NFS 简单架构​编辑 一.搭建nfs服务器 二.新建共享目录和网页文件 三.设置共享目录 四:创建使用nfs共享目录的卷 五:创建容器使用nfs-web-1卷 六:测试访问 七:是否同步测试 什么是NFS NFS 服务器:ne…...

super关键字

super关键字 在Java中,super是一个关键字,它用于引用当前对象的父类。在继承的关系中,子类可以通过super关键字来调用父类的构造方法、成员方法和成员变量。 super关键字的主要用途 调用父类的构造方法: 在子类的构造方法中&…...

【经典算法】LeetCode 200. 岛屿数量(Java/C/Python3/Go实现含注释说明,中等)

目录 题目描述思路及实现方式一:深度优先搜索(DFS)思路代码实现Java版本C语言版本Python3版本Golang版本 复杂度分析 方式二: 使用广度优先搜索(BFS)思路代码实现Java实现C实现Python3实现Go实现 总结相似题…...

Hive SQL-DQL-Select查询语句用法详解

HQL Select用法详解 1.基础语法 (1)select_exp (2)ALL、DISTINCT (3)WHERE (4)分区查询、分区裁剪 (5)GROUP BY (6)HAVING &#xff0…...

沙盘Sandboxie v5.56.4

菜鸟高手裸奔工具沙盘Sandboxie是一款国外著名的系统安全工具,它可以让选定程序在安全的隔离环境下运行, 只要在此环境中运行的软件,浏览器或注册表信息等都可以完整的进行清空,不留一点痕迹。同时可以防御些 带有木马或者病毒的…...

Arcpy开发记录

一.GDB数据库相关 1.单独的shape更新时,不会有限制,数据会自动截取 2.在GDB下,使用UpdateCursor更新字段时,填入的数据长度必须与字段长度要求一致,否则报错: 二.Cursor相关 嵌套使用cursor时&#xff0c…...

Android使用itextpdf操作PDF文档

1、导入jar包: itext-asian.jaritextpdf-5.5.8.jar Paragraph 和 Phrase 的区别: 在 iTextPDF 库中,Paragraph 和 Phrase 是用于创建和组织文本内容的两个不同的类。 Paragraph(段落): Paragraph 是一个…...

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 已开源:https://github.com/stay-leave/enhance_llm 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。…...

什么是限流?常见的限流算法

目录 1. 什么是限流 2. 常见限流算法 3. 固定窗口算法 4. 滑动窗口算法 5. 漏桶算法 6. 令牌桶算法 7. 限流算法选择 1. 什么是限流 限流(Rate Limiting)是一种应用程序或系统资源管理的策略,用于控制对某个服务、接口或功能的访问速…...

ZL-0895小动物活动记录仪可同时检测8只动物的活动量

简单介绍: 小动物活动记录仪是一种多用途、宽范围的小动物活动记录仪器,可用于小鼠、大鼠、豚鼠和兔的实验,小动物活动记录仪​具有不需对动物使用特别盛具的特点,可在不改变动物原生活环境的情况下,进行实时监测&…...

注册测绘师的前世今生

本文梳理了 注册测绘师 的前世今生,具体情况如下表: 历史线时间事件诞生2007年1月原人事部、国家测绘局联合印发《注册测绘师制度暂行规定》,注册测绘师制度建立。同时同步发布《注册测绘师资格考试实施办法》、《注册测绘师资格考核认定办法…...

Python中的异常处理:深入探索try-except-finally结构

Python中的异常处理:深入探索try-except-finally结构 一、引言 在Python编程中,异常处理是一个非常重要的部分。当程序遇到错误时,比如尝试除以零、文件读取失败等,Python会抛出一个异常。如果我们不捕获这些异常,程…...

【R语言】边缘概率密度图

边缘概率密度图是一种在多变量数据分析中常用的图形工具,用于显示每个单独变量的概率密度估计。它通常用于散点图的边缘,以便更好地理解单个变量的分布情况,同时保留了散点图的相关性信息。 在边缘概率密度图中,每个变量的概率密度…...

中国结(科普)

中国结是一种手工编织工艺品,它身上所显示的情致与智慧正是汉族古老文明中的一个侧面。 [1]它原本是由旧石器时代的缝衣打结,后推展至汉朝的仪礼记事,再演变成今日的装饰手艺。周朝人随身的佩戴玉常以中国结为装饰,而战国时代的铜…...

学校网站免费建设/经典广告

在一些批处理或者系统技巧操作教程文章中,我们常常会看到一些形如 %windir% 或者 %systemdrive% 的变量。这些变量都代表着什么含义呢?下面小技巧之家为大家整理了在Windows XP下系统变量方式表达相对应的路径,大家可以看得更加清楚明白了&am…...

政府网站建设经验/百度打广告怎么收费

目录 前言 Docker的简介 1,什么是补充? 2,普遍从哪里来的? 监督管理命令 1,搜索平均值 2,下载总计 3,查看概况 4,为补充添加标签 5,删除总计 6,存…...

网站通栏是什么/网站开发北京公司

主要分为三个步骤 应用程序处理(简而言之就shader编码中可以处理的一切信息都属与应用程序处理阶段)>几何顶点处理(主要工作坐标的顶点变换)>光栅化处理(与像素处理相关操作) 关于渲染管线 原文链接 http://game.ceeger.com/forum/read.php?tid10970&fid2 正文所谓…...

中企动力科技股份有限公司常州分公司/前端优化网站

一段将某一特定用户产品里的分类代码以及名字取出的sql语句:selectP.ProductTypeCode2,T.TypeName from(selectdistinctProductTypeCode2 fromInfo_ProductInfo whereUserId1427) asP,Sys_ProductType asT whereP.ProductTypeCode2 T.Id 可以在页面中只显示该用户发…...

建设标准 免费下载网站/灰色词优化培训

在 2003 系统 IIS6 下,经常出现 w3wp.exe 的内存占用不能及时释放和 CPU 占用居高不下的问题,从而导致服务器响应速度很慢。怎样才能找出是哪一个站点出问题呢? 首先给每个站点都建一个应用程序池,这样便于找出问题出在哪一个站点…...

集团网站建设服务公司/成都seo公司

package work1;import java.util.Scanner;public class Test {//切记,类名一定要大写,这里我出现了一个错误,就是car类名小写,/*** param args*/public static void main(String[] args) {// TODO Auto-generated method stubcar …...