网网站站建建站站/网站排名优化手机
一、配置步骤
1.使能并配置高速时钟HSPCLK、ADC校验
EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS;
这里ADC_MODCLK=3,所以HSPCLK时钟为150/6=25Mhz
2.配置ADC时钟并给ADC上电
AdcRegs.ADCTRL3.all = 0x00E0;
AdcRegs.ADCTRL1.bit.CPS= 0;
ADCTRL3寄存器的5-7位置1表示内部带隙与参考电路上电和其他模拟电路上电;
4-1位置0表示不对HSPCLK进行分频,0位置0表示顺序采样模式;
ADCTRL1的CPS位置0表示不对HSPCLK进行分频,具体的ADCCLK计算公式由以下给出:
所以这里的ADCCLK被配置为150/6=25Mhz
3.配置ADC模块的工作方式
SEQ_CASC | SMODE_SEL | CONT_RUN | SEQ_OVRD |
双序列发生器模式 | 顺序采样 | 连续自动序列化模式 | 固定长度循环模式 |
单序列发生器模式/级联模式 | 并发采样 | 启动/停止模式 | 自然结束循环模式 |
这里配置ADC模块的工作模式为双序列发生器模式、顺序采样、连续自动序列化模式、自然结束循环模式:
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;
AdcRegs.ADCTRL1.bit.CONT_RUN = 1;
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;
至于如何选择ADC模块的工作方式,需要根据实际情况选择,若采样通道不大于8个可以使用双序列发生器模式、顺序采样,这里比较重要的一点是分清楚连续自动序列化模式和启动/停止模式之间的区别。
当选择连续自动序列化模式且选择自然结束循环模式时,序列发生器完成一个序列的转换时,转换序列将自动重复开始,且不需要等到SOC信号的到来,所以使用连续自动序列化模式时,只需要触发一次SOC信号用于启动第一个转换序列即可,之后的每个序列转换将自动进行,而不需要额外的SOC信号触发。
当选择启动/停止模式时,序列发生器完成一个序列的转换后,状态指针停留在当前转换的状态,手动复位序列发生器后,状态指针才会重新指向初始位置,且需要等待SOC信号到来才会开始转换。
实际应用中,如果采用软件触发SOC则需要搭配连续自动序列化模式使用,如果采用Epwm周期性触发SOC则需要搭配启动/停止模式使用。
4.配置序列发生器的最大采样通道数和采样顺序
这里以采样A0-A7八个通道为例,按A0、A1、A2、...、A7的顺序采样:
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 采样ADCA0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // 采样ADCA1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // 采样ADCA2AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // 采样ADCA3AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // 采样ADCA4AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // 采样ADCA5AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // 采样ADCA6AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // 采样ADCA7
5.选择SOC触发方式
对于两个序列发生器SEQ1、SEQ2,启动方式有以下几种:
SEQ1 | SEQ2 |
软件立即启动(S/W) | 软件立即启动(S/W) |
ePWMx SOCA | ePWMx SOCB |
以软件启动且搭配连续自动序列化模式为例:
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//软件启动方式
epwm触发:
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;
6.配置ADC中断
根据需要可以选择是否配置ADC中断,这里需要在采样完成A7后发送中断申请,所以禁止SEQ1发送中断申请,允许SEQ2发送中断申请,配置步骤如下:
EALLOW; PieVectTable.ADCINT = &adc_isr; //配置adc中断服务函数地址EDIS; PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启INT1.6中断IER |= M_INT1; // 开启第一组中断EINT; ERTM; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; //禁用SEQ1发送中断申请AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1; //允许SEQ2发送中断申请AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; //每个SEQ2序列转换完成后发送一次中断申请
中断服务函数为:
interrupt void adc_isr(void)
{sampleTable[0] = (AdcRegs.ADCRESULT0) >> 4;sampleTable[1] = (AdcRegs.ADCRESULT1) >> 4;sampleTable[2] = (AdcRegs.ADCRESULT2) >> 4;sampleTable[3] = (AdcRegs.ADCRESULT3) >> 4;sampleTable[4] = (AdcRegs.ADCRESULT4) >> 4;sampleTable[5] = (AdcRegs.ADCRESULT5) >> 4;sampleTable[6] = (AdcRegs.ADCRESULT6) >> 4;sampleTable[7] = (AdcRegs.ADCRESULT7) >> 4;AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;for(i = 0; i < 8; i++){I[i] = (float)sampleTable[i] * 3.0 / 4095.0;}
}
二、配置模板
1.采集A0-A7通道,选择顺序采样模式、双序列发生器模式、连续自动序列化模式、自然结束循环模式,配置ADC时钟为25Mhz,软件触发SOC方式,且每次在完成A7转换后进入一次中断服务函数读取结果寄存器的值,完整的配置模板如下:
void InitAdc()
{EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS;AdcRegs.ADCTRL3.all = 0x00E0;AdcRegs.ADCTRL1.bit.CPS= 0;AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;AdcRegs.ADCTRL3.bit.SMODE_SEL=0;AdcRegs.ADCTRL1.bit.CONT_RUN = 1; AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1;AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 采样ADCA0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // 采样ADCA1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // 采样ADCA2AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // 采样ADCA3AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // 采样ADCA4AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // 采样ADCA5AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // 采样ADCA6AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // 采样ADCA7AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//软件启动方式EALLOW; PieVectTable.ADCINT = &adc_isr; //配置adc中断服务函数地址EDIS; PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启INT1.6中断IER |= M_INT1; // 开启第一组中断EINT; ERTM; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; //禁用SEQ1发送中断申请AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1; //允许SEQ2发送中断申请AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; //每个SEQ2序列转换完成后发送一次中断申请
}
interrupt void adc_isr(void)
{sampleTable[0] = (AdcRegs.ADCRESULT0) >> 4;sampleTable[1] = (AdcRegs.ADCRESULT1) >> 4;sampleTable[2] = (AdcRegs.ADCRESULT2) >> 4;sampleTable[3] = (AdcRegs.ADCRESULT3) >> 4;sampleTable[4] = (AdcRegs.ADCRESULT4) >> 4;sampleTable[5] = (AdcRegs.ADCRESULT5) >> 4;sampleTable[6] = (AdcRegs.ADCRESULT6) >> 4;sampleTable[7] = (AdcRegs.ADCRESULT7) >> 4;AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;for(i = 0; i < 8; i++){I[i] = (float)sampleTable[i] * 3.0 / 4095.0;}
}
2.采集A0-A7通道,选择顺序采样模式、双序列发生器模式、启动/停止模式、配置ADC时钟为25Mhz,Epwm触发SOC方式,且每次在完成A7转换后进入一次中断服务函数读取结果寄存器的值,完整的配置模板如下:
void EPWM6_SOCA_Init(Unit16 tbprd,Unit16 cmpa,Unit cmpb)
{EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; EDIS;EPwm6Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; EPwm6Regs.TBCTL.bit.PHSEN = TB_DISABLE;EPwm6Regs.TBPHS.half.TBPHS = 0;EPwm6Regs.TBCTR = 0x0000; EPwm6Regs.TBPRD = tbprd;EPwm6Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; EPwm6Regs.TBCTL.bit.HSPCLKDIV=TB_DIV1; EPwm6Regs.TBCTL.bit.CLKDIV=TB_DIV1; EPwm6Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;EPwm6Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;EPwm6Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;EPwm6Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;EPwm6Regs.CMPA.half.CMPA = cmpa; EPwm6Regs.CMPB = cmpb; EPwm6Regs.ETSEL.bit.SOCAEN = 1; //使能EPwm6SOCA信号产生EPwm1Regs.ETSEL.bit.SOCASEL = 2; //当TBCTR=TBPRD时产生SOCA信号 EPwm1Regs.ETPS.bit.SOCAPRD = 1; //在第一个事件来到时产生SOCA信号 EALLOW;SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EDIS;
}
void InitAdc()
{EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS;AdcRegs.ADCTRL3.all = 0x00E0;AdcRegs.ADCTRL1.bit.CPS= 0;AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;AdcRegs.ADCTRL3.bit.SMODE_SEL=0;AdcRegs.ADCTRL1.bit.CONT_RUN = 0; //启动/停止模式AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 采样ADCA0AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // 采样ADCA1AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; // 采样ADCA2AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; // 采样ADCA3AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // 采样ADCA4AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // 采样ADCA5AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // 采样ADCA6AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // 采样ADCA7AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;//EPWM_SOCA启动方式EALLOW; PieVectTable.ADCINT = &adc_isr; //配置adc中断服务函数地址EDIS; PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启INT1.6中断IER |= M_INT1; // 开启第一组中断EINT; ERTM; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0; //禁用SEQ1发送中断申请AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1; //允许SEQ2发送中断申请AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; //每个SEQ2序列转换完成后发送一次中断申请
}
interrupt void adc_isr(void)
{AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; //初始化状态指针位置sampleTable[0] = (AdcRegs.ADCRESULT0) >> 4;sampleTable[1] = (AdcRegs.ADCRESULT1) >> 4;sampleTable[2] = (AdcRegs.ADCRESULT2) >> 4;sampleTable[3] = (AdcRegs.ADCRESULT3) >> 4;sampleTable[4] = (AdcRegs.ADCRESULT4) >> 4;sampleTable[5] = (AdcRegs.ADCRESULT5) >> 4;sampleTable[6] = (AdcRegs.ADCRESULT6) >> 4;sampleTable[7] = (AdcRegs.ADCRESULT7) >> 4;AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;for(i = 0; i < 8; i++){I[i] = (float)sampleTable[i] * 3.0 / 4095.0;}
}
相关文章:
DSP28335模块配置模板系列——ADC配置模板
一、配置步骤 1.使能并配置高速时钟HSPCLK、ADC校验 EALLOW;SysCtrlRegs.PCLKCR0.bit.ADCENCLK 1; EDIS;EALLOW;SysCtrlRegs.HISPCP.all ADC_MODCLK; // HSPCLK SYSCLKOUT/(2*ADC_MODCLK)ADC_cal();EDIS; 这里ADC_MODCLK3,所以HSPCLK时钟为150/625Mhz 2.配…...

字符串转换为字节数组、16进制转换为base64、base64转换为字符串数组、base64转换为16进制(微信小程序)
1、字符串转换为字节数组 // 字符串转为字节数组 function stringToByteArray(str) {var array new Uint8Array(str.length);for (var i 0; i < str.length; i) {array[i] str.charCodeAt(i);}return array; } 2、16进制转换为base64 // 16进制转换为base64 function H…...

c++中, 直接写浮点数, 是float 还是 double?
如果直接一个浮点数, 那么他默认是float还是double呢? 测试用例 #include <iostream> using namespace std;int main() {auto x 0.2;float f 0.2;double d 0.2;cout << "x Size : " << sizeof(x) << " bytes" << endl…...

C++核心编程友元的应用
文章目录 1.友元1.什么是友元2.全局函数做友元2.类做友元3.成员函数做友元 1.友元 1.什么是友元 在C中,友元(friend)是一种允许一个类或函数访问另一个类的非公有(private 或 protected)成员的机制。这种机制打破了类…...

C#,JavaScript实现浮点数格式化自动保留合适的小数位数
目标 由于浮点数有漂移问题,转成字符串时 3.6 有可能得到 3.6000000000001,总之很长的一串,通常需要截取,但按照固定长度截取不一定能使用各种情况,如果能根据数值大小保留有效位数就好了。 C#实现 我们可以在基础库里…...

Android基础-工程目录结构说明
Android工程的项目目录结构是开发Android应用时的基础,它组织和存储了应用的所有源代码、资源和配置文件。了解并熟悉这个目录结构对于提高开发效率和代码管理至关重要。下面将详细阐述Android工程的项目目录结构。 1. 工程根目录 Android工程的根目录通常包含多个…...

浅谈提示词发展现状,Prompt 自动优化是未来。
#封面手绘于本科期间,当年在知乎上写的第一篇关于 AI 的文章就用的这个封面,聊表纪念。 这次我们来聊聊 Prompt. 本来想取一个类似“提示词不存在了…”,或是“再见,Prompt 课程…”的标题,但最近很多大佬的谬赞让我感…...

揭秘智能测径仪省钱之道!每年能为每条产线省上百万!
在当今竞争激烈的市场环境下,企业们都在不断寻求提高生产效率、降低成本的方法。而智能测径仪的出现,为圆形钢材、螺纹钢等生产企业实现这一目标提供了有力的支持。 智能测径仪被广泛应用于高线、铸管、圆钢、螺纹钢、钢筋等的轧制生产线中,进…...

echaerts图例自动滚动并隐藏翻页按钮
效果图 代码 legend: {itemHeight: 14,itemWidth: 14,height: "300", //决定显示多少个// 通过 CSS 完全隐藏翻页按钮pageButtonItemGap: 0,pageButtonPosition: end,pageIconColor: transparent, // 隐藏翻页按钮pageIconInactiveColor: transparent, // 隐藏翻页按…...

OpenCV的小部件最基本范例
OpenCV也有与PYQT类似的小部件,例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法,也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…...

内置类型知多少?
内置类型(也称为基本类型或原生类型)是C/C本身定义的数据类型,它们直接由编译器支持,不需要用户自定义。 内置类型主要包括以下几类: 1.算术类型: (1)整型:int、short、long、lon…...

【C++题解】1090 - 同因查找
问题:1090 - 同因查找 类型:for循环、简单循环 题目描述: 求出 10 至 1000 之内能同时被2、3、7 整除的数,并输出。 每行一个。 输入: 无。 输出: 按要求输出满足条件的数,每行 1 个。 完…...

uni微信小程序editor富文本组件如何插入图片
需求 在editor中插入图片,并对图片进行编辑,简略看一下组件的属性,官网editor 组件 | uni-app官网 解决方案 首先要使用到ready这个属性,然后官网有给代码粘过来,简单解释一下这段代码的意思(作用是在不同…...

LabVIEW调用国产硬件DLL的稳定性问题及解决方案
在LabVIEW中调用国内公司提供的硬件DLL时,尽管可以运行,但常出现不稳定和bug问题,且厂家临时修改的版本未经长期测试。为确保稳定性和质量,需要制定系统化的测试和反馈机制、建立严格的版本控制、与厂家协作优化、并进行深入的自测…...

基础篇01——SQL的基本语法和分类
MySQL数据库安装与基本使用 安装教程参见:通过zip安装MySQL 通过命令行启动和停止MySQL服务命令 前提:安装MySQL成功之后 启动服务:net start mysql 停止服务:net stop mysql 通过命令行连接mysql 可以通过mysql的客户端命令行…...

HOW - 面试技巧系列 - 全英文面试
自我介绍 “can you tell me a little bit about yourself?” “please introduce yourself.” 工作经验 “can you describe your most recent job experience?” “how does your experience make you a good fit for this position?” 职业规划 “what are your l…...

【人工智能】第六部分:ChatGPT的进一步发展和研究方向
人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…...

新能源管理系统主要包括哪些方面的功能?
随着全球对可持续发展和环境保护的日益重视,新能源管理系统已成为现代能源领域的核心组成部分。这一系统不仅涉及对新能源的收集、存储和管理,还包括对整个能源网络进行高效、智能的监控和控制。以下是新能源管理系统主要包含的几方面功能: 一…...

python如何快速的判断一个key在json的第几层呢,并修改其value值
python如何快速的判断一个key在json的第几层呢,并修改其value值 def find_and_modify_key(json_obj, target_key, new_value, current_level1):# 检查当前层是否包含目标keyif target_key in json_obj:print(f"找到 {target_key} 在第 {current_level} 层。&q…...

Python基础用语:揭示编程世界的底层逻辑与无限可能
Python基础用语:揭示编程世界的底层逻辑与无限可能 Python,这门强大的编程语言,如同一位神秘的导师,引领我们走进编程的奇妙世界。掌握Python的基础用语,不仅意味着我们能够驾驭这门语言,更意味着我们能够…...

react 中使用 swiper
最近项目中需要用到轮播图,我立马想起了 swiper ,那么本文就来带大家体验一下如何在 React 中使用这个插件,使用的是 函数组 hooks 的形式。 需求非常简单,就是一个可以自动播放、点击切换的轮播图(跑马灯࿰…...

2024年搭建知识库系统5大工具推荐
现如今,越来越多的企业开始了解并搭建知识库系统,想要带动企业员工的工作效率以提高企业运营效率。各种各样搭建知识库系统的工具应运而生,而如何在众多工具中,选择出最适合独特的企业产品的一个工具,成为企业亟待解决…...

Golang内存分配分三种Golang内存分配分三种类型
Golang内存分配分三种类型 线程缓存(Thread Cache) 拟人化解释:线程缓存就像是每个邮局员工的私人储物柜。每个员工都有自己的储物柜,用来暂时存放需要处理的小信件和包裹。当有新的信件或包裹需要处理时,员工会先看看…...

Marin说PCB之如何在主板上补偿链路中的走线的等长误差?
一场雨把我困在这里,你冷漠地看我没有穿雨衣淋成落汤鸡。今天刚刚出门时候看天气预报没有雨,于是我就没有带雨衣骑电动车去公司了,谁知道回来的路上被淋成狗了。天气预报就像是女人的脾气那样,不能完全相信的。 好了,我…...

企业在现代市场中的战略:通过数据可视化提升财务决策
新时代,财务规划团队不仅仅是企业内部的一个部门,更是帮助企业做出明智决策和设定战略目标的中坚力量。在当今瞬息万变的商业环境中,财务专业人士需要具备应对挑战并引导企业走向成功的角色职能。企业领导者时常面临着数据压力,需…...

printf(“不喝酒就没得朋友可是只要偶一喝酒就喝倒一代朋友人生真的很矛盾“);
/*无线通讯语言模块测试PAST 2019 12 28 L298 CODE1871**/ #include <REG52.H> #include <intrins.H> #include "stdio.h" #define uint unsigned int #defi…...

JAVA小案例-分别计算100以内奇数和偶数的和
JAVA小案例-分别计算100以内奇数和偶数的和 没啥可说的,就是for循环加if分支,也可以用while写。 代码如下: public class Jiouhe {/*** 分别计算100以内奇数和偶数的和* param args*/public static void main(String[] args){int sum10;in…...

头歌初识redis答案
头歌初识Redis的答案可以从多个方面进行归纳和总结。以下是根据参考文章提供的信息,按照清晰、分点表示和归纳的方式给出的答案: 一、Redis基础知识 Redis有16个数据库,默认使用第0个数据库,可以用select命令进行切换。 Redis是…...

Linux.小技巧快捷键
1. ctrl c 强制停止 终止某些程序的运行 也可以取消某行命令 2. ctrl d 退出或登出 进入python环境中,使用ctrl d 退出 3.history 查看历史使用了哪些命令 4. ! 历史最近使用的命令的开头 5.使用ctrl r 搜索历史使用的命令 按下 ctrl r 会进入 reverse -…...

传统的老程序员转向人工智能需要准备好这三件事情,你知道吗?
前言 人类文明的进步有时候快的吓人,在我们父辈上街买菜还是以一毛为计量买菜的时代,其实过去了也没有多长时间。现在买菜接近10块为准了,正常在集市上喊着怎么卖?摊主喊着三斤,包含的意思是10块钱三斤。相隔这么多年…...