FreeRTOS 移植,问题总结

2023-05-16

一直没亲手移植过FreeRTOS,心血来潮移植了下最新版的FreeRTOSv202104.00

过程不赘述,可以参考 https://www.cnblogs.com/iot-dev/p/11681067.html,写的还是非常详细的。

task还是常见的LED1 LED2 闪烁加UART的打印,期间遇到了几个问题,如下

1.程序跑过了 vTaskStartScheduler();  //开启调度,继续往校跑

2.进入HardFault_Handler(这个应该是为#define configTOTAL_HEAP_SIZE  设置的太小)

3.程序卡到 while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )

总结还是应从下面几点入手:

1、三个重要的中断函数SysTick、PendSV_Handler()与SVC_Handler()

这三个函数数在stm32f10x_it.c文件中和FreeRTOS 的port.c文件中都实现了。

一般stm32f10x_it.c文件里的都是空函数当然是不能用的,可以直接使用FreeRTOS 的port.c文件中的这三个函数。

首先是PendSV_Handler()与SVC_Handler()。在stm32f10x_it.c中注释掉PendSV_Handler()与SVC_Handler()这两个函数的函数体,声明不要注释,并在FreeRTOSConfig.h加上下面两句

/****************************************************************
            FreeRTOS与中断服务函数有关的配置选项                         
****************************************************************/
#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

接着是SysTick,在stm32f10x_it.c文件中增加extern void xPortSysTickHandler(void),原来的函数体内增加代码如下

extern void xPortSysTickHandler(void);

//systick中断服务函数
void SysTick_Handler(void)
{	
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
      {
    #endif  /* INCLUDE_xTaskGetSchedulerState */  
        xPortSysTickHandler();
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
      }
    #endif  /* INCLUDE_xTaskGetSchedulerState */
}

注:有些网上的文章写增加#define xPortSysTickHandler SysTick_Handler,直接加到FreeRTOSConfig.h肯定会报错,因为stm32f10x_it.c文件中和FreeRTOS 的port.c的SysTick_Handler冲突了,如果注释掉stm32f10x_it.c中的SysTick_Handler虽然不报错了,但也是FreeRTOS也是跑不起来的。原因如下图,在startup_stm32f10x_md.s中同样会用到这个函数,这是一个很重要的函数,我们需要在stm32f10x_it.c文件中实现STM32平台上的SysTick_Handler()函数

2.#define configTOTAL_HEAP_SIZE 不能设置的太小,任务栈的大小设置不合理

本人尝试下面这个,设置的大小倒影响不大,只要大于0就可以,但他关系到configTOTAL_HEAP_SIZE 设置的大小

#define configMINIMAL_STACK_SIZE   

本人创建了三个任务如下

static void AppTaskCreate(void);/* 用于创建任务 */

static void LED1_Task(void* pvParameters);/* LED1_Task任务实现 */
static void LED2_Task(void* pvParameters);/* LED2_Task任务实现 */

开始时AppTaskCreate、LED1_Task、LED2_Task的堆栈和configMINIMAL_STACK_SIZE   分别设置为1024,实测发现configTOTAL_HEAP_SIZE 要设置到24*1024才能正常运行。

接着尝试最小配置(只取2^n),configMINIMAL_STACK_SIZE   可以配置为1,没发现什么问题,0就不可以了。AppTaskCreate、LED1_Task、LED2_Task的堆栈可以设置到64,设置到32会有灯不闪烁,这里应该和打印为字符数有关系。这时configTOTAL_HEAP_SIZE 基本可以设置到

2*1024,设置为1*1024会有一个灯不闪烁。

最小配置main.c和FreeRTOSConfig.h如下。

就这样移植任务圆满结束,希望对大家有所帮助吧。

main.c


//头文件
#include "stm32f10x.h"
#include "usart.h"
#include "led.h"
#include "RTC_Time.h" 
#include <stdio.h>
#include "FreeRTOS.h"
#include "task.h"
#include "GPIOLIKE51.h"

 /* 创建任务句柄 */
static TaskHandle_t AppTaskCreate_Handle = NULL;
/* LED1任务句柄 */
static TaskHandle_t LED1_Task_Handle = NULL;
/* LED2任务句柄 */
static TaskHandle_t LED2_Task_Handle = NULL;

/*
*************************************************************************
*                             函数声明
*************************************************************************
*/
static void AppTaskCreate(void);/* 用于创建任务 */
static void LED1_Task(void* pvParameters);/* LED1_Task任务实现 */
static void LED2_Task(void* pvParameters);/* LED2_Task任务实现 */

//=============================================================================
//函数名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//=============================================================================
int main(void)
{
		 BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */

	LED_GPIO_Config();//初始化LED
	NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
    USART1_Config();
 printf("FreeRTOS temp\r\n");
   /* 创建AppTaskCreate任务 */
	
	xReturn=0;
  xReturn = xTaskCreate((TaskFunction_t )AppTaskCreate,  /* 任务入口函数 */
                        (const char*    )"AppTaskCreate",/* 任务名字 */
                        (uint16_t       )64,  /* 任务栈大小 */
                        (void*          )NULL,/* 任务入口函数参数 */
                        (UBaseType_t    )3, /* 任务的优先级 */
                        (TaskHandle_t*  )&AppTaskCreate_Handle);/* 任务控制块指针 */ 
	
  /* 启动任务调度 */           
  if(pdPASS == xReturn)
	{
		printf("xRet P \r\n");
    vTaskStartScheduler();   /* 启动任务,开启调度 */
		printf("StarSche \r\n");
	}
  else
	{
    return -1;  
		printf("StarSche Fail\r\n");
	}

 //   while (1);
	printf("error\r\n");
}


/***********************************************************************
  * @ 函数名  : AppTaskCreate
  * @ 功能说明: 为了方便管理,所有的任务创建函数都放在这个函数里面
  * @ 参数    : 无  
  * @ 返回值  : 无
  **********************************************************************/
static void AppTaskCreate(void)
	
{

  BaseType_t xReturn = pdPASS;/* 定义一个创建信息返回值,默认为pdPASS */
  
  taskENTER_CRITICAL();           //进入临界区
  
  /* 创建LED_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )LED1_Task, /* 任务入口函数 */
                        (const char*    )"LED1",/* 任务名字 */
                        (uint16_t       )64,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )4,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&LED1_Task_Handle);/* 任务控制块指针 */
  if(pdPASS	 == xReturn)
    printf("task LED1\r\n");
  
	/* 创建LED_Task任务 */
  xReturn = xTaskCreate((TaskFunction_t )LED2_Task, /* 任务入口函数 */
                        (const char*    )"LED2",/* 任务名字 */
                        (uint16_t       )64,   /* 任务栈大小 */
                        (void*          )NULL,	/* 任务入口函数参数 */
                        (UBaseType_t    )5,	    /* 任务的优先级 */
                        (TaskHandle_t*  )&LED2_Task_Handle);/* 任务控制块指针 */
  if(pdPASS == xReturn)
    printf("task LED2\r\n");
  
  vTaskDelete(AppTaskCreate_Handle); //删除AppTaskCreate任务
  
  taskEXIT_CRITICAL();            //退出临界区
}



/**********************************************************************
  * @ 函数名  : LED_Task
  * @ 功能说明: LED_Task任务主体
  * @ 参数    :   
  * @ 返回值  : 无
  ********************************************************************/
static void LED1_Task(void* parameter)
{	
    while (1)
    {
    	PAout(8)=1;  //   LED1_ON;
        vTaskDelay(500);   /* 延时500个tick */
        printf("LED1_ON\r\n");
       PAout(8)=0; //     LED1_OFF;     
        vTaskDelay(500);   /* 延时500个tick */				
        printf("LED1_OFF\r\n");		
    }
}

/**********************************************************************
  * @ 函数名  : LED_Task
  * @ 功能说明: LED_Task任务主体
  * @ 参数    :   
  * @ 返回值  : 无
  ********************************************************************/
static void LED2_Task(void* parameter)
{	
    while (1)
    {
		PDout(2)=1;//     LED2_ON; 
        vTaskDelay(500);   /* 延时500个tick */
        printf("LED2_ON\r\n");
        PDout(2)=0;   //     LED2_OFF;     
        vTaskDelay(500);   /* 延时500个tick */			
        printf("LED2_OFF\r\n");
    }
}

/*********************************************************************************************************
      END FILE
*********************************************************************************************************/

FreeRTOSConfig.h

/*
 * FreeRTOS V202104.00
 * Copyright (C) 2020 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * http://www.FreeRTOS.org
 * http://aws.amazon.com/freertos
 *
 * 1 tab == 4 spaces!
 */

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 *
 * These definitions should be adjusted for your particular hardware and
 * application requirements.
 *
 * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
 * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
 *
 * See http://www.freertos.org/a00110.html
 *----------------------------------------------------------*/

#define configUSE_PREEMPTION		1
#define configUSE_IDLE_HOOK			0
#define configUSE_TICK_HOOK			0
#define configCPU_CLOCK_HZ			( ( unsigned long ) 72000000 )	
#define configTICK_RATE_HZ			( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES		( 10 )
#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 1 )
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 2 * 1024 ) )
#define configMAX_TASK_NAME_LEN		( 16 )
#define configUSE_TRACE_FACILITY	0
#define configUSE_16_BIT_TICKS		0
#define configIDLE_SHOULD_YIELD		1
//支持动态内存申请
#define configSUPPORT_DYNAMIC_ALLOCATION        1    
		
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 		0
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */

#define INCLUDE_vTaskPrioritySet		1
#define INCLUDE_uxTaskPriorityGet		1
#define INCLUDE_vTaskDelete				1
#define INCLUDE_vTaskCleanUpResources	0
#define INCLUDE_vTaskSuspend			1
#define INCLUDE_vTaskDelayUntil			1
#define INCLUDE_vTaskDelay				1

///* This is the raw value as per the Cortex-M3 NVIC.  Values can be 255
//(lowest) to 0 (1?) (highest). */
//#define configKERNEL_INTERRUPT_PRIORITY 		255
///* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
//See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
//#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	191 /* equivalent to 0xb0, or priority 11. */

/******************************************************************
            FreeRTOS与中断有关的配置选项                                                 
******************************************************************/
#ifdef __NVIC_PRIO_BITS
	#define configPRIO_BITS       		__NVIC_PRIO_BITS
#else
	#define configPRIO_BITS       		4                  
#endif
//中断最低优先级
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY			15     

//系统可管理的最高中断优先级
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5 

#define configKERNEL_INTERRUPT_PRIORITY 		( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )	/* 240 */

#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )

/* This is the value being used as per the ST library which permits 16
priority values, 0 to 15.  This must correspond to the
configKERNEL_INTERRUPT_PRIORITY setting.  Here 15 corresponds to the lowest
NVIC value of 255. */
#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY	10

//added by zude 2021.0627
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler


#endif /* FREERTOS_CONFIG_H */


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS 移植,问题总结 的相关文章

  • 【FreeRTOS 信号量】互斥信号量

    互斥信号量与二值信号量类似 但是互斥信号量可以解决二值信号量出现的优先级翻转问题 解决办法就是优先级继承 普通互斥信号量创建及运行 参阅安富莱电子demo 互斥信号量句柄 static SemaphoreHandle t xMutex NU
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • ping 不通百度问题的解决

    ping 不通百度问题的解决 问题 网络能够ping通百度的ip地址 115 239 210 27这个ip地址 但是ping www baidu com长时间等待无反应 解决方式 碰到这个问题两次了 每次都挺无奈的 第一次解决是通过回退快照
  • FreeRTOS系列

    本文主要介绍如何在任务或中断中向队列发送消息或者从队列中接收消息 使用STM32CubeMX将FreeRTOS移植到工程中 创建两个任务以及两个消息队列 并开启两个中断 两个任务 Keyscan Task 读取按键的键值 并将键值发送到队列
  • freertos---软定时器

    一 软件定时器介绍 freeRTOS软件定时器的时基是基于系统时钟节拍实现的 可以创建很多个 在硬件定时器资源不充足的情况下非常有用 软件定时器一般用作周期性地执行函数 在创建软件定时器时指定软件定时器的回调函数 在回调函数中实现相应的功能
  • ZYNQ中FreeRTOS中使用定时器

    使用普通的Timer中断方式时 Timer中断可以正常运行 但是UDP通信进程无法启动 其中TimerIntrHandler是中断服务程序 打印程序运行时间与从BRAM中读取的数据 void SetupInterruptSystem XSc
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • FreeRTOS打印任务对CPU的占有率

    1 配置RTOS 1 打开RTOS Config Parameter 找到Run Time And Task States gathering related definitions 使能GENERATE RUN TIME STATS US
  • freeRTOS手册 第六章 . 中断管理

    如果我对本翻译内容享有所有权 允许任何人复制使用本文章 不会收取任何费用 如有平台向你收取费用与本人无任何关系 第六章 中断管理 章节介绍和范围 事件 嵌入式实时系统必需对环境中的事件做出响应 比如 外部网络设备收到一个发送给TCP IP栈
  • STM32F103移植FreeRTOS必须搞明白的系列知识---2(FreeRTOS任务优先级)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性
  • STM32 Freertos 添加 外部sram heap_5.c

    1 添加外部SRAM 初始化 2 添加heap 5 c 3 初始化heap 5 c 外部堆栈 Define the start address and size of the two RAM regions not used by the
  • 13-FreeRTOS任务创建与删除

    任务创建和删除API函数位于文件task c中 需要包含task h头文件 task h里面包函数任务的类型函数 例如 对xTaskCreate的调用 通过指针方式 返回一个TaskHandle t 变量 然后可将该变量用vTaskDele
  • FreeRTOS多任务调度器基础

    Cortex M4中SysTick调度器核心 Cortex M4中的中断管理 Cortex M4中影子栈指针 Cortex M4中SVC和PendSV异常 1 Cortex M4中SysTick调度器核心 systick每一次中断都会触发内
  • 使用 GCC 编译器的 ARM 内核的堆栈回溯(当存在 MSP 到 PSP 切换时)

    核心 ARM Cortex M4 编译器 GCC 5 3 0 ARM EABI 操作系统 免费 RTOS 我正在使用 gcc 库函数 Unwind Reason Code Unwind Backtrace Unwind Trace Fn v
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https

随机推荐

  • ModemManager

    ModemManager是D Bus激活的守护进程 xff0c 用来控制移动宽带 xff08 2G 3G 4G xff09 设备和连接 xff0c 提供统一的高层API接口 说白了就是可以用来管理上网卡 ModemManager可以管理内置
  • odroidxu4linux,2019年值得期待的5个树莓派替代品

    说到卡片电脑 xff0c 树莓派是当之无愧的热门 这款售价35美元的微型计算机已经在全球范围内吸引了众多爱好者 xff0c 因为它能够以商业设备的一小部分价格执行基于PC的功能 当然 xff0c 它或许不是最强大或最便宜的微型计算机 xff
  • ros 发布信息频率_工具使用-ROS中使用publisher、subscriber发布订阅topic

    Publisher Node 不同于cpp文件一般存在package下的src文件夹 xff0c python文件一般存储在package下的scripts文件夹下 1 2 3 4roscd beginner tutorials scrip
  • 轨迹系列1——一种基于路网图层的GPS轨迹优化方案

    文章版权由作者李晓晖和博客园共有 xff0c 若转载请于明显处标明出处 xff1a http www cnblogs com naaoveGIS 1 背景 GPS数据正常情况下有20M左右的偏移 xff0c 在遇到高楼和桥梁等情况下偏移会更
  • 材料研究方法

    编程是非常有意思的 xff0c 可是作为材料人 xff0c 学好材料才是比较重要的事情 xff0c 下面记录一些知识点 光学透镜的成像原理 光的折射 光在均匀介质中沿直线传播 在不同介质中光的传播速度不同 当光从一种介质传播到另一种介质中去
  • [微信小程序系列] 动画案例之圆点沿着圆圈运动

    作者 xff1a 滴滴公共前端团队 Tawnia 滴滴作为第一批的小程序开发者 xff0c 我们也大量地用到了动画 xff0c 积累了一些经验 xff0c 由于市面上的小程序动画案例很少 xff0c 我们也分享一部分我们做过的案例 xff1
  • Vue Iview Tree插件的无限层

    Iview lt template gt lt Tree data 61 34 baseData 34 show checkbox multiple gt lt Tree gt lt template gt lt script gt exp
  • React Component vs React Element

    React Component vs React Element 有这样的一个问题 xff1a 方法定义 function add x y return x 43 y 方法调用 add 1 2 组件定义 class Icon extends
  • 手把手学STM32(一)

    手把手学STM32 一 构建工程 这篇文章详细的介绍编写第一个固件工程 xff08 F103ZET6版本的 xff09 文档里的操作部分我使用了黄色背景色标出 xff0c 如觉麻烦 xff0c 可直接参考黄色部分 资料下载链接 xff1a
  • Linux下查看在线用户及用户进程

    可采用命令 xff1a w who last users finger 需yum安装 法一 xff1a root 64 test1 who root tty1 2015 08 19 23 15 lxh pts 0 2015 08 20 00
  • 手动制作一个QQ群机器人

    为什么80 的码农都做不了架构师 xff1f gt gt gt 最近在群里面一个朋友在玩机器人 我觉得蛮有意思的所以查了下资料搞了一个机器人 这里只是借助软件实现机器人 后面会自己去手写一个机器人 1 进入图灵的官网 http www tu
  • X-Content-Type-Options: nosniff

    如果服务器发送响应头 34 X Content Type Options nosniff 34 xff0c 则 script 和 styleSheet 元素会拒绝包含错误的 MIME 类型的响应 这是一种安全功能 xff0c 有助于防止基于
  • 过期域名

    tonha sx cn wqk410 sx cn liyongfu2005 sx cn id 3682362 sx cn dtsgfljdsbyxzrgs sx cn id 1184965 sx cn jinlei001 sx cn lin
  • CSS之 background-color: rgba(255,0,0,opacity number)

    一 xff1a backgrounde color xff1a rgba xff08 xff09 设置背景色的时候 xff0c 可以调节背景色的透明度 xff0c 注意是背景哦 xff0c 所以不会存在遮罩问题 见图 test cover
  • PrestaShop 网站后台配置(三)

    转载请注明出处 xff1a http www cnblogs com zhong dev p 4942957 html 网店版本 v1 6 这一篇文章主要介绍 前台显示模块 的调整 1 xff1a top banner xff08 首页横幅
  • 正则表达式

    Date 2019 07 03 Author Sun 本节目的 xff1a xff08 1 xff09 掌握正则表达式和re模块使用 xff08 2 xff09 python操作正则表达式 xff0c 匹配贪婪和非贪婪模式使用 xff08
  • asp.net mvc 部署时出现错误 没有对“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files”的写访问权限...

    在IIS中 发布程序一个ASP NET程序 xff0c 通过IE访问报如下错误 xff1a 当前标识 NT AUTHORITY NETWORK SERVICE 没有对 C WINDOWS Microsoft NET Framework v2
  • 事件的好处~实现对修改的封闭,对扩展的开放

    事件是这样的 xff0c 我觉得用事件来做这事比较好 xff0c 它很好的遵循了 开闭原则 xff0c 当然这并不是最重要的 xff0c 最重要的应该是它更符合程序开发的原则 场合 xff1a 一个订单处理问题 xff0c 一个订单的产生可
  • 中文显示不全?docker+ firefox

    2019独角兽企业重金招聘Python工程师标准 gt gt gt sudo apt get install ttf wqy microhei ttf wqy microhei ttf wqy zenhei kde l10n zhcn xf
  • FreeRTOS 移植,问题总结

    一直没亲手移植过FreeRTOS xff0c 心血来潮移植了下最新版的FreeRTOSv202104 00 过程不赘述 xff0c 可以参考 https www cnblogs com iot dev p 11681067 html xff