Cortex-M0中断控制和系统控制
目录
- 1.NVIC和系统控制块特性
- 2.中断使能和清除使能
- 3.中断挂起和清除挂起
- 4.中断优先级
- 5.中断控制的通用汇编代码
- 使能和禁止中断
- 设置和清除中断挂起状态
- 设置中断优先级
- 6.异常屏蔽寄存器(PRIMASK)
- 7.中断输入和挂起行为
- 8.中断等待
- 9.系统异常的控制寄存器
- 10.系统控制寄存器
1.NVIC和系统控制块特性
嵌套向量中断控制器(NVIC)集成在Cortex-M0处理器里,它与处理器内核紧密相连,并且提供了中断控制功能以及对系统异常的支持。
除了NVIC,系统控制块(SCB)位于系统控制空间(SCS)地址区域。SCB具有的特性可以给操作系统提供支持,例如SysTick异常对应的内部定时器。
NVIC的特性如下:
- 灵活的中断管理:使能/禁止,优先级配置。
- 硬件嵌套中断支持。
- 向量化的异常入口。
- 中断屏蔽。
Cortex-M0处理器中的NVIC支持最多32个外部中断和一个不可屏蔽中断(NMI),中断输入请求可以是电平触发的,也可以是最小一个时钟周期的脉冲信号。每个外部中断都可以独立地使能或禁止,并且其挂起状态也可以手动地设置和清除。
NVIC的寄存器经过了存储器映射,并且用C语言访问也很容易,其寄存器的起始地址为0xE000E100。对于Cortex-M0处理器,对NVIC寄存器的访问必须是每次一个字。
同NVIC 寄存器类似,SCB寄存器也是按照字来访问的,起始地址为0xE000E010。SCB寄存器涉及的特性包括SysTick定时器操作、系统异常管理、优先级控制和休眠模式控制。
2.中断使能和清除使能
中断控制寄存器为可编程的,用于控制中断请求(异常编号16及以上)的使能和禁止。寄存器的宽度根据支持的中断数量而不同,最大为32位,最小为1位。可以通过两个独立的地址编程这个寄存器,使能中断时使用SETENA地址,而禁止中断时则使用CLRENA地址:
将设置和清除操作分为两个不同的地址具有诸多优势。
首先,它减少了使能中断所需要的步骤,因此也就减少了程序代码并且降低了执行时间。
多个应用程序进程同时访问寄存器时,可能会导致已编程的控制信息丢失,而设置和清除的分离则能防止这种情况的发生,这也是这种安排的第二个优势。
3.中断挂起和清除挂起
如果一个中断发生了,却无法立即处理(比如处理器正在处理更高优先级的中断),这个中断请求将会被挂起。挂起状态保存在一个寄存器中,如果处理器的当前优先级还没有降低到可以处理挂起的请求,并且没有手动清除挂起状态,该状态将会一直保持合法。
可以通过操作中断设置挂起(SETPEND)和中断清除挂起(CLRPEND)这两个寄存器来访问或修改中断挂起状态。
同中断使能控制寄存器类似,中断挂起状态寄存器也是在物理上为一个寄存器,而通过两个地址来实现设置和清除相关位。这就使得每一位都可以独立修改,而无须担心在两个应用程序进程竞争访问时出现的数据丢失。
4.中断优先级
每一个外部中断都有一个对应的优先级寄存器,每个优先级都是2位宽,并且使用中断优先级寄存器的最高两位,每个寄存器占1个字节(8位)。
Cortex-M0中的NVIC寄存器只支持字传输,这样每次访问都会同时涉及4个中断优先级寄存器。
未使用的位读出为0,写入这些位的操作会被忽略,而读出时则为0。
由于每次访问优先级寄存器就相当于访问4个中断的优先级,如果只想改变其中的1个,需要将整个字读出,修改1个字节,然后写回整个字。
中断优先级寄存器的编程应该在中断使能之前,其通常是在程序开始时完成的。应该避免在中断使能之后改变中断优先级,因为这种情况的结果在ARMv6-M体系结构上是不可预知的,并且不被Cortex-M0处理器支持。
5.中断控制的通用汇编代码
使能和禁止中断
中断的禁止和使能非常简单,下面的函数“nvic_set_enable”和“nvic_clr_enable”以中断编号作为输入,中断编号在函数调用前保存在R0中:
要使用这些函数,只需要将中断编号放在R0中,然后调用函数即可,例如:
在ARM汇编器中(包括 Keil MDK),FUNCTION和ENDFUNC这两个关键字分别用于指示函数的开始和结束,它们的使用是可选的,ALIGN关键字则保证了函数的开始处于正确的对齐地址上。
设置和清除中断挂起状态
-
设置和清除中断挂起状态的汇编函数同使能和禁止中断的类似,唯一的区别在于标号和NVIC寄存器的地址不同。
-
应该注意的是,清除某中断的挂起状态未必能够完全阻止中断的产生。如果中断源持续产生中断请求(电平输出),即便你试图清除NVIC的寄存器,中断挂起状态仍可能保持为高。
设置中断优先级
-
设置中断优先级的汇编函数稍微复杂一些。首先,它需要两个输入参数:中断编号和新的优先级;其次,由于总共有多达8个的优先级寄存器,还需要计算要修改的中断所在的位置;最后,由于优先级寄存器是按照字来访问的,还需要执行读-修改-写的过程,才能把正确的字节数据写到32位优先级寄存器中。
-
不过,在大多数应用程序中,可以在程序的开始部分,使用更加简单的代码一次设置多个中断的优先级。例如,可以将优先级预定义在一个常数表中,然后使用一个很短的指令序列将这个表复制到NVIC优先级寄存器中。
6.异常屏蔽寄存器(PRIMASK)
- 异常屏蔽寄存器(PRIMASK)可以屏蔽掉除了NMI和硬件错误异常的其他所有的中断和系统异常。
- PRIMASK寄存器只有1位有效,并且在复位后默认为0。该寄存器为0时,所有的中断和异常都处于允许状态;而设为1后,只有NMI和硬件错误异常处于使能。实际上,当PRIMASK 设置为1后,处理器的当前优先级就降到了0(可设置的最高优先级)。
- 对时间敏感的程序完成后,应该清除PRIMASK。要不然即使在中断处理中使用了_disable_irq()函数(或者设置PRIMASK),处理器将停止接受新的中断请求。这点与ARM7TDMI有所不同,ARM7TDMI处理器在中断返回时,由于CPSR的恢复,其I位会被重设(使能中断)。而Cortex-MO处理器的PRIMASK和xPSR是相互独立的,因此异常返回不会影响中断屏蔽状态。
7.中断输入和挂起行为
Cortex-M0处理器允许两种形式的中断请求:电平触发以及脉冲输入,这一特性涉及包括NMI在内的中断输入对应的多个寄存器。每一个中断输入都对应着一个挂起状态寄存器,且每个寄存器只有1位,用于保存中断请求,而不管这个请求有没有得到确认(例如,通过I/O引脚相连的外部硬件产生一个中断脉冲)。当处理器开始处理这个异常时,硬件将会自动清除挂起状态。
NMI的情况也基本上是一样的,只是由于NMI的优先级最高,当它产生后几乎能立即得到响应。除此之外,NMI与IRQ相当类似:NMI的挂起状态也可以由软件产生,如果处理器仍然在处理之前的NMI请求,新的NMI则会保持挂起状态。
一些简单的中断处理如下:
-
大多数ARM处理器的外设都使用电平触发中断输出,当中断事件发生时,由于外设连接到了NVIC上,中断信号会得到确认。在处理器执行中断服务并且清除外设的中断信号以前,该信号会保持高电平。在NVIC内部,当检测到有中断发生时,该中断的挂起状态会被置位,当处理器接受该中断并且开始执行中断服务程序后,挂起状态就会被清除。
-
有些中断源可能会产生脉冲形式的中断请求(至少持续1个时钟周期)。在这种情况下,在中断得到服务之前,挂起状态寄存器将会一直保持该请求。
-
如果中断请求没有立即执行,并且在确认之前被软件清除了,这样处理器会忽略掉本次请求,并且不会执行中断处理。可以通过写NVIC_CLRPEND寄存器来清除中断挂起状态,这种处理在设置外设时非常有用,因为在设置以前,该外设可能已经产生了一个中断请求。
-
如果在软件清除挂起状态时,外设仍然保持着中断请求,挂起状态还会立即生成。
-
如果外设产生的中断请求在异常处理时没有被清除,异常返回后挂起状态就会被又一次激活,这样中断服务程序会再次执行,若外设中还有待处理的数据这种情况就会发生(例如,只要接收FIFO中还有数据,数据接收机就要将中断请求保持高电平)。
-
对于脉冲中断,如果在中断服务开始执行以前,中断请求脉冲产生了多次(例如,处理器可能在处理另外一个中断请求),这种多个中断脉冲会被当做一次中断请求。
-
在中断服务程序执行过程中产生的脉冲中断请求,会被当做新的中断请求,并且在本次中断退出后,还会引起中断服务程序再次执行。
由于和当前执行中断的优先级相同,故第二个中断请求不会立即引发中断。一旦处理器退出了中断处理,当前的优先级就会降低,这样挂起的中断就会得到获取服务的机会。
即使某中断已经被禁止,该中断的挂起状态仍然可以被激活。因此,当外设需要重新编程以及更改中断设置时,在重新使能中断前,你可能需要清除NVIC里的中断挂起状态,这个操作可以通过写入地址为0xE000E280的中断清除寄存器来实现。
8.中断等待
通常情况下,Cortex-M0的中断等待时间为16个周期。这个等待时间从中断确认的处理器时钟周期开始,一直到中断处理开始执行结束。计算中断等待需要具备以下前提:
- 该中断使能并且没有被PRIMASK或是其他正在执行的异常处理所屏蔽。
- 存储器系统没有任何等待状态。
下面几种情况可能会导致不同的中断等待:
- 中断的末尾连锁,如果中断返回时产生了另外一个中断请求,处理器就会跳过出栈和压栈过程,这样就减少了中断等待时间。
- 延迟到达,如果中断发生时,另外一个低优先级的中断正在进行压栈处理,由于延迟到达机制的存在,高优先级的中断会首先执行,这样也会导致高优先级的中断的等待时间减小。
上面这两种情况会使得中断等待减至最小,不过有些嵌入式应用需要零误差的中断响应。Cortex-M0处理器的接口上有一个叫做IRQLATENCY的8位信号,并且它与NVIC相连,可以用作中断等待控制。如果将这个信号连接到0,Cortex-M0处理器就会以最快的速度处理中断请求。
9.系统异常的控制寄存器
对于Cortex-M0处理器,只有3个与OS相关的系统异常才具有可编程的优先级,它们包括SVC、PendSV和SysTick,其他像NMI和硬件错误等系统异常的优先级则是固定的。
未使用的位读出为0,对这些未使用的位的写操作将会被忽略。Cortex-M0处理器只使用系统处理优先级寄存器SHPR2和SHPR3。
如果使用符合CMSIS的设备驱动,可以使用如下图所示的寄存器名来访问SHPR2和SHPR3。
另一个对系统异常处理有用的寄存器为中断控制状态寄存器(ICSR),这个寄存器允许软件挂起NMI异常,并且可以访问PendSV和SysTick的挂起状态。它还提供了对调试器有用的信息,例如当前活跃的异常编号以及当前是否有挂起异常。
如果使用符合CMSIS的设备驱动库,可以使用寄存器名“SCB->ICSR”访问ICSR。
10.系统控制寄存器
NVIC地址区域(从0xE000E000到0xE000EFFF)中也包含了多个系统控制寄存器,因此NVIC的整个存储器区域又被称作系统控制空间(SCS)。
- CPU ID基址寄存器
CPU ID基址寄存器中包含了处理器的ID,并且是只读的,它为应用软件以及调试器提供了处理器内核类型和版本信息。
- 应用中断和复位控制寄存器
应用中断和复位控制寄存器(AIRCR)具有多个功能,它可以用于应用程序请求系统复位、识别系统的大小端以及清除所有的异常活动状态(只能由调试器完成)。如果使用符合CMSIS的设备驱动,可以使用“SCB->AIRCR”访问该寄存器。
VECTKEY域用于防护对该寄存器的意外写操作引起的系统复位或清除异常状态。
SYSRESETREQ位用于请求系统复位,当写入1并且键值合法时,它就会触发处理器上的SYSRESETREQ信号,系统的实际复位时间与这个信号的连接方式有关。根据系统复位设计的不同,从该位写入1到实际复位可能只需要很小的一段延时。在典型的微控制器设计中,SYSRESETREQ产生的系统复位可以对处理器和系统的大部分都有效,而不应影响微控制器的调试系统。这样即使软件触发了一次复位,调试操作也可以正常工作。
VECTCLRACTIVE位被调试器用来清除异常状态,比如当调试要执行程序返回而不想复位处理器时,就可以使用该位,处理器上运行的应用程序代码不应使用这一特性。
- 配置和控制寄存器
Cortex-M0处理器上的配置和控制寄存器(CCR)为只读的,它决定了栈的双字对齐设置和非对齐访问的处理。
STACKALIGN为1,表示当产生异常压栈时,栈帧总是自动对齐到双字对齐的存储器位置上。UNALIGN_TRP位为1,表示试图执行非对齐访问的操作会导致错误异常发生。如果使用符合CMSIS的设备驱动,可以通过寄存器名“SCB->CCR”来访问配置和控制寄存器。
相关文章:
Cortex-M0中断控制和系统控制
目录1.NVIC和系统控制块特性2.中断使能和清除使能3.中断挂起和清除挂起4.中断优先级5.中断控制的通用汇编代码使能和禁止中断设置和清除中断挂起状态设置中断优先级6.异常屏蔽寄存器(PRIMASK)7.中断输入和挂起行为8.中断等待9.系统异常的控制寄存器10.系…...
科技云报道:2023,云计算的风向变了
科技云报道原创。 2022,是云计算的“分水岭”之年。 与前两年的火热相比,2022年云计算行业实属不太好过:阿里云一季度营收增速创出历史新低,腾讯云的市场份额也被后来者华为云反超,沦为第三。 在此情形下,…...
工程管理系统源码-专注项目数字化管理-工程管理
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
Nacos详细使用操作文档(图文详细)
文章目录Nacos详细使用操作文档(图文详细)1、安装2、Nacos作为注册中心2.1、Nacos服务注册【ICRMS】2.2、Nacos 服务调用2.2.1、Feign 远程调用【Personnel】2.2.2)、RestTemplateRibbon 远程调用【Personnel】3、Nacos作为配置中心4、Nacos 命令空间5、Nacos配置文件参数详解N…...
如何评价2023年美赛ABC题目
A题 遭受干旱侵袭的植物群落 背景 不同种类的植物对压力的反应方式不同。例如,草原对干旱非常敏感。干旱发生的频率和严重 程度各不相同。大量的观察表明,不同物种的数量在植物群落如何适应连续几代的干旱周期中 起着重要作用。在一些只有一种植物的…...
Win10显示dds及tga缩略图
整理之前做游戏MOD时收集的模型资源,3D游戏模型的贴图文件格式基本都是dds或tga的,毕竟无损压缩、支持嵌入MipMap、带透明通道、可以被GPU硬解balabala...道理我都懂但这俩玩意系统根本直接查看不了,就算装上专门的看图软件或插件,文件夹视图下也没有缩略图预览,只能一个个点开…...
Lesson5.1---Python 之 NumPy 简介和创建数组
一、NumPy 简介 NumPy(Numerical Python)是 Python 的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比 Python 自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示…...
Exchange 2013升级以及域名绑定等若干问题
环境简介Exchange 2013服务器位于ad域中,系统为Windows server 2012 R2,其内部域名为:mail.ad.com一. Exchange客户端无法在浏览器中正常运行在域中部署Exchange服务器后,除了可以通过outlook、foxmail等邮件客户端来使用邮箱功能…...
linux安装jenkins
1. 官网寻找安装方式 进入到jenkins官网,找到对应的下载页面:https://www.jenkins.io/download/ 根据自己系统还有想要使用的版本,进行选择即可。这里我们使用CentOS作为示例,版本选择长期支持版(LTS) 2.…...
【MySQL】MySQL表的增删改查(CRUD)
✨个人主页:bit me👇 ✨当前专栏:MySQL数据库👇 ✨算法专栏:算法基础👇 ✨每日一语:生命久如暗室,不碍朝歌暮诗 目 录🔓一. CRUD🔒二. 新增(Creat…...
GCC for openEuler 数据库性能优化实践
GCC for openEuler是基于开源GCC开发的编译器工具链(包含编译器,汇编器,链接器),在openEuler社区开源发布,并通过鲲鹏社区免费提供二进制包,支持aarch64处理器架构。 关键特性 支持鲲鹏微架构芯…...
【C++】类和对象(第二篇)
文章目录1. 类的6个默认成员函数2. 构造函数2.1 构造函数的引出2.2 构造函数的特性3. 析构函数3.1 析构函数的引出3.2 析构函数的特性4. 拷贝构造函数4.1 概念4.2 特性5.赋值运算符重载5.1 运算符重载概念注意练习5.2 赋值重载实现赋值重载的特性6. const成员函数7. 取地址及co…...
MySQL数据库(数据库约束)
目录 数据库约束 数据库约束的类型: null约束 : unique约束(唯一约束): default约束(默认值约束): primary key约束(主键约束): for…...
Hive的安装与配置
一、配置Hadoop环境先看看伪分布式下的集群环境有没有错误的情况:输入命令:start-all.sh jps查看伪分布式的所有进程是否完善二、解压并配置HiveHive压缩包→ https://pan.baidu.com/s/1eOF_ICZV8rV-CEh3nX-7Xw 提取码: m31e 复制这段内容后打开百度网盘…...
关于医院医用医疗隔离电源系统应用案例的分析探讨
【摘要】:介绍该三级医院采用安科瑞医用隔离电源柜,使用落地式安装方式,从而实现将TN系统转化为IT系统,同时监测系统绝缘情况。 【关键词】医用隔离电源柜;IT系统;绝缘情况;中西医结合医院&…...
【LeetCode】剑指 Offer 07. 重建二叉树 p62 -- Java Version
题目链接:https://leetcode.cn/problems/zhong-jian-er-cha-shu-lcof/ 1. 题目介绍(07. 重建二叉树) 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的…...
ERROR 1114 (HY000): The table ‘tt2‘ is full
insert 操作时提示is full 问题原因 rootlocalhost 11:55:41 [t]>show table status from t like ‘tt2’ \G ; *************************** 1. row *************************** Name: tt2 Engine: MEMORY Version: 10 Row_format: Fixed Rows: 7056 Avg_row_length: 944…...
考了PMP证后工资大概是多少 ?(含pmp资料)
这个岗位的不同还有每个公司的薪资也是不一样的,具体的数字肯定是没有的,但大概的比例还是有的,据PMI调查,在获得PMP证书的人当中,在PMP认证一年后,年薪有所增长的比例为66%,上涨幅度主要集中在…...
基于国产龙芯 CPU 的气井工业网关研究与设计(一)
当前,我国气田的自动化控制程度还未完全普及,并且与世界已普及的气井站的自 动化程度也存在一定的差距。而在天然气资源相对丰富的国家,开采过程中设备研发资 金投入较大,研发周期较长,更新了一代又一代的自动化开采系…...
40/365 javascript 数据类型
1.数据类型 number类型:整数,小数都属于这一类,不具体区分 字符串:hello, "hello" 布尔类型:true,false 逻辑运算符: && || ! 比较运算符: : 类型不一致&#x…...
后勤管理系统—服务台管理功能
数图互通是一家IT类技术型软件科技公司,专业的不动产、工作场所、空间、固定资产、设备家具、设施运维及可持续性管理解决方案软件供应商。 一、后勤管理系统服务台管理功能包含: 1、专业自动化、集中管理的自助服务助理,随时响应服务请求。…...
Spring Boot 是什么,应该如何学习,有哪些优缺点
1、Spring Boot 是什么? Spring Boot是一个基于Spring框架的开源项目,它简化了Spring应用程序的开发过程,提供了一种快速、便捷、可扩展的方式来构建Spring应用程序。 Spring Boot通过自动化配置机制简化了Spring应用程序的配置过程&#x…...
使用yolov5和强化学习训练一个AI智能欢乐斗地主(一)
这里写自定义目录标题项目介绍项目过程介绍训练yolov5目标检测斗地主收集数据集yolov5调参项目介绍 你好! 欢迎阅读我的文章,本章将介绍,如何使用yolov5和强化学习训练一个AI斗地主,本项目将分为三个部分,其中包含&am…...
C++ 浅谈之 AVL 树和红黑树
C 浅谈之 AVL 树和红黑树 HELLO,各位博友好,我是阿呆 🙈🙈🙈 这里是 C 浅谈系列,收录在专栏 C 语言中 😜😜😜 本系列阿呆将记录一些 C 语言重要的语法特性 dz…...
【Kotlin】Kotlin函数那么多,你会几个?
目录标准函数letrunwithapplyalsotakeIftakeUnlessrepeat小结作用域函数的区别作用域函数使用场景简化函数尾递归函数(tailrec)扩展函数高阶函数内联函数(inline)inlinenoinlinecrossinline匿名函数标准函数 Kotlin标准库包含几个…...
饲养员喂养动物-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)
【案例4-2】饲养员喂养动物 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例目标】 案例描述 饲养员在给动物喂食时,给不同的动物喂不同的食物,而且在每次喂食时,动物都会发出欢快的叫声。例如&…...
数据分析:消费者数据分析
数据分析:消费者数据分析 作者:AOAIYI 创作不易,如果觉得文章不错或能帮助到你学习,记得点赞收藏评论一下哦 文章目录数据分析:消费者数据分析一、前言二、数据准备三、数据预处理四、个体消费者分析五、用户消费行为总…...
Transformer论文阅读:ViT算法笔记
标题:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 会议:ICLR2021 论文地址:https://openreview.net/forum?idYicbFdNTTy 文章目录Abstract1 Introduction2 Related Work3 Method3.1 Vision Transformer3.2…...
Android基础练习解答【2】
文章目录一 填空题二 判断题三 选择题四 简答题一 填空题 1.除了开启开发者选项之外,还需打开手机上的 usb调试 开关,然后才能在手机上调试App。 2.App开发的两大技术路线包括 _原生开发_和混合开发。 3.App工程的编译…...
k8s 搭建
需求:搭建k8s 为后续自动部署做准备进程:安装至少两个ubuntu18.04系统(一个master 一到多个 node)每个系统上都要装上docker 和 kubernetes安装dockersudo su apt-get update#安装相关插件 apt-get install apt-transport-https c…...
龙华网站建设深圳信科/2021年度关键词有哪些
地磁的北极在地理的南极的附近 地磁的南极在地理的北极的附近 磁体的同名磁极相斥,异名磁极相吸 所以指南针的北极总是指着地理的北极(地磁的南极) 1、红色指针指向北面,白色指针指向南面。在表盘上“北”用字母N表示,南用字母“S”表示。 2、指南针又称…...
福州服务专业公司网站建设/全国今日新增疫情
编辑 NOTES.INI 文件 绝大多数情况下,不需要修改服务器或客户机的 NOTES.INI 文件。NOTES.INI 文件包含许多设置,Domino 和 Notes 依靠这些设置正常工作。意外的或错误的更改可能导致 Domino 或 Notes 以不可预知的方式运行。因此,只有在特殊…...
影视网站如何做/百度官方下载
在Oracle数据库管理手册中创建传输表空间集的方法要求在执行表空间传输期间被传输的表空间要以只读模式打开。相比之下,当RMAN使用备份创建传输表空间集时,不需要访问被传输表空间的联机数据文件。这就消除了要将传输表空间设置为只读模式的操作。结果就…...
网站dns如何修改不了网/百度识图网页版 在线
《内向性格的竞争力:发挥你的本来优势》将告诉我们,内向者和外向者该如何沟通;内向者如何建立社群关系,以及在商场中谈判;如何教养内向的小孩建立自信;内向者如何找工作、伴侣,解决家庭、婚姻中…...
做的比较好的律师网站/中山网站建设
引入外部 css文件 import ./index.css此时引入的样式是全局样式 使用less 安装 npm i style-loader css-loader sass-loader node-sass -D生成config文件夹 npm run eject配置 以上代码运行完,会在根目录生成config文件夹 进入 config > webpack.config.js 查找…...
深圳网站seo哪家快/sem对seo的影响有哪些
一、安装第三方模块时: 在安装第三方模块时也有可能出现“SyntaxError: invalid syntax”这个问题,这时需要检查一些是否是在cmd窗口下安装,同时,要到python的安装目录里面,找到pip所在的目录里面进行安装;…...