- 博客(49)
- 收藏
- 关注
原创 linux系统与目标版文件传输&驱动模块.ko生成&vim使用
linux系统与目标版文件传输**1.scp指令scp :基于ssh协议,使用网口scp liujun@192.168.1.200:demo/md2_app ./2.lrz指令,rz,szlrz: 基于Zmodem协议, 使用串口,所以速度只有10kB左右,适合传输小文件XShell或者其他串口终端,键入 lrz 拖入文件 3:tftp指令tftp:基于ssh协议,使用网口tftp 0x80000000 sample_vo.bin**驱动模块.ko生成有以下两种方式:一:1
2020-10-14 16:27:05
542
原创 optarg与getopt的用法
optarg与getopt的用法这里是我遇到的问题,不想看的,可直接跳过,去下面看解释前言:今天在一个项目里的iReadOptions(int argc, char **argv)函数里遇到extern char *optarg;我知道这是引用外部声明的变量,我当时就突发奇想,想看看这个外部变量是在什么地方定义的,又在外部文件中有什么作用,于是我就在那个库里挨个文件找optarg,找到最后都没有找到optarg,我就开始郁闷了,那函数iReadOptions的optarg引用的是哪里的变量?于是我就有
2020-10-14 13:28:10
12767
1
原创 C++友元函数和友元类(C++ friend)详解
私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行。这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。C++ 是从结构化的C语言发展而来的,需要照顾结构化设计程序员的习惯,所以在对私有成员可访问范围的问题上不可限制太死。C++ 设计者认为, 如果有的程序员真的非常怕麻烦,就是想在类的成员函数外部直接访问对象的私有成员,那还是做一点妥协以满足他们的愿望为好,这也算是眼前利益和长远利益的折中。因此,C++ 就有了友元(fr
2020-10-14 11:00:06
738
原创 Mark_同一工程IAR编译生成bin文件有多处差异_待验证
原因A1:已经查到问题了首先路径不一样的情况下编译同一个工程生成的烧录文件大小不一样是因为:工程代码中存在assert断言部分的__FILE___ 这个宏定义(我只说我的工程代码哈),很多库函数一般都会对参数进行相关的检查,就是用的assert。尽管实际代码的参数都是正确的,但是__FILE___一旦被编译了就会把路径信息带到烧录文件里面(猜测)解决以上问题的办法是查看assert先关代码,一般都是条件编译的,比如我这边是#ifdef NDEBUG#define assert 啥都不干#
2020-09-03 19:04:30
1410
原创 NFC门禁卡
常见的门禁卡有3种类型:M1卡:这是最常见的一种卡,使用PM3等工具就可以破解密码。破解密码并读取数据后,可以复制到普通M1卡上(如果门禁设备不验证卡号)、UID卡上(卡号可写,有后门指令)、CUID卡(不响应后门指令)、FUID(0扇区只能擦写一次,即写入卡号后就锁死不能再次更改),CFUID(CUID和FUID的结合,手动锁卡前是UID卡,锁卡后是M1卡) 补充:现在还有一种无漏洞M1卡,无法通过设备破解密码,需要使用变色龙等设备实地嗅探密钥,再进行“知一求全”等操作;ID卡:只有一串卡号,不能存储
2020-09-02 09:44:15
4541
原创 __FILE__去掉路径
Q: C语言中定义的__FILE__使用,如何只出现该文件名,而不显示路径A:可以用宏定义来实现去除文件名中的路du径名。因为windows和linux下,文zhi件名中的路径分隔符号不同,windows中是dao"/",而linux中是"/",所以,采用的宏不同:#include <string.h> //strrchr()函数所需头文件windows:#define filename(x) strrchr(x,'\\')?strrchr(x,'\\')+1:xlinux:#d
2020-06-10 14:02:37
5022
原创 字节对齐与绝对定位
字节对齐://KEIL编译器__align(num) 这个用于修改最高级别对象的字节边界eg: __align(64) u8 mem1base[MEM1_MAX_SIZE];//IAR GCC 编译器#pragma pack(num) 指定下面变量按num字节对齐 作用域为下面所有变量,如果要恢复需要使用#pragma pack()#pragma pack() 能够取消自定义的对齐方式,恢复默认对齐//eg push pop声明作用域#pragma pack(push)#pragm
2020-06-10 14:00:33
1380
原创 MCU的嵌入式系统设计,运行SDRAM(运行效率比较)
MCU的嵌入式系统设计,如何运行SDRAM?2020-03-17 11:36 预计 10 分钟读完在使用 MCU 的嵌入式系统设计中,当程序或者数据内存占用太大而无法放入片上闪存或 SRAM 时,开发者通常考虑使用 SDRAM。别问我为什么你的 MCU 不支持 SDRAM。SDRAM 是同步动态随机存取存储器的缩写。在微控制器应用中,微控制器通过使用外部存储控制器(EMC)操作访问 SDR...
2020-03-17 15:05:56
1278
原创 野指针
野指针有三种情况会造成野指针的出现1、指针定义之后没有初始化,其值是不确定的2、指针被free后,没有赋值NULL,后续又使用了该指针3、指针的操作超越了变量的作用范围(不是指针越界)4、函数返回指向栈内存的指针(栈内存在函数运行结束后被释放)...
2019-06-10 10:22:37
439
原创 Stm32ISP协议解析;BIN与HEX阅读
HEX和BIN的区别https://blog.youkuaiyun.com/spdian/article/details/52963467HEX文件解析https://blog.youkuaiyun.com/a1037488611/article/details/43340055HEX文件和BIN文件是我们经常碰到的2种文件格式。因为自己也是新手,所以一直对这两个文件懵懵懂懂,不甚了解,最近在做STM32单片机的...
2018-12-06 11:00:01
4908
原创 事件与中断
串口中断触发但是IT_Stat检查不到,此时应当清理FlagStatusunsigned char data=0;if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ USART_ClearITPendingBit(USART1, USART_IT_RXNE); //USART_ClearFlag(USART1,USART_FLA...
2018-12-06 10:57:43
2608
原创 Boot与App程序设计
1.flash分配:Boot一般在7K到10K,EE可以视情况分配,假如flash足够大,可以采用先写到APP之外的地址,然后将数据搬移到APP起始地址。EE页大小设置,Flash页大小设置#define FMC_PAGE_SIZE 0x800一般F0为1k,F1为2K(必须参考手册,设置为最小可擦除页的倍数)2.中断的处理,找出对应芯片的中断数量NVIC_PriorityGrou...
2018-12-06 10:54:00
3958
原创 SysTick定时器与延时函数的几种配置方法
SysTick定时器SysTick定时器被捆绑在NVIC中,用于产生SysTick异常(异常号:15)。Systick 部分内容属于NVIC控制部分,一共有4个寄存器,名称和地址分别是:STK_CSR, 0xE000E010 – 控制寄存器STK_LOAD, 0xE000E014 – 重载寄存器STK_VAL, 0xE000E018 – 当前...
2018-12-06 10:52:43
4839
原创 关于VCC、VDD、VSS、GND的术语解释
VCC:C=circuit 表示电路的意思, 即接入电路的电压; VDD:D=device 表示器件的意思, 即器件内部的工作电压; VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压。 GND:在电路里常被定为电压参考基点。 VEE:负电压供电;场效应管的源极(S) VPP:编程/擦除电压。1、对于数字电路来说,VCC是电路的供电电压,VDD是芯片的工作电压(通常Vcc&g...
2018-12-06 10:46:46
6901
原创 内存分配——静态存储区 栈 堆 与static变量
一、内存基本构成可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的...
2018-12-06 10:46:01
2607
原创 static volatile '\0' 注册函数
static1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。来自 http://blog.chinaunix.net...
2018-12-06 10:43:43
188
原创 STM32串口中断的方式发送
我将其改为真正的中断发送。步骤一:初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //LED1-PC10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_S...
2018-12-06 10:38:30
29764
2
原创 C语言嵌入式系统编程修炼(软件架构篇)
C语言嵌入式系统编程修炼(软件架构篇)模块划分模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念: (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对...
2018-12-06 10:35:39
285
原创 编程:绝对定位-__attribute__
attributeattribute((at(0X68000000)))这里其实就是要搞懂2个C语言关键字就可以了.首先,attribute,这个是 用来指定变量或结构位域的特殊属性,该关键字后的双括弧中的内容是属性说明。然后是at关键字,该关键字可以用来设置变量的绝对地址,也就是你可以通过这个关键字,指定某个变量处于内存里面的某个给定的地址.综合起来,就是设置变量处于0X6800000...
2018-12-06 10:33:24
1695
原创 __align、双重指针、结构体指针
__align__align 关键字指示编译器在 n 字节边界上对齐变量。__align 是一个存储类修饰符。它不影响函数的类型。语法__align(n)其中:n是对齐边界。对于局部变量,n 值可为 1、2、4 或 8。对于全局变量,n 可以具有最大为 2 的 0x80000000 次幂的任何值。__align 关键字紧靠变量名称前面放置。用法如果声明的变量的常规对齐边界小...
2018-12-05 15:40:50
1176
原创 while循环跳出返回值技巧
在while()循环中,假设使用错误机制时,针对不同的错误类型,返回不同的值时,需要注意。可以在不同错误后,置位错误标志位,置位循环标志位,使之跳出循环,根据不同情况的错误标志位数值,跳出循环后返回不同的数值。这样的做法可以在调试时,将断点设置在循坏外面,从而在不影响循环的情况下,观察返回值。int hal_tgtp_dspburn_check(uint8_t tp){ uint8_t...
2018-12-05 15:26:42
6285
原创 光电隔离原理
光电隔离原理以下是根据结果反推的经验值,不一定对,硬件分析能力比较差,有错误请指正:当OUT1输出高电平,三极管打开,2脚为低电平,光电隔离器3打开,3脚为高电平当OUT1输出低电平,三极管关闭,2脚为低电平,光电隔离器3关闭,3脚为低电平NPN三极管正常工作条件:发射结正偏,集电结反偏。Uc>Ub>Ue 放大区发射结反偏,集电结反偏。Uc>Ue>Ub 截止...
2018-12-05 15:23:52
6026
1
原创 STM32_ADC
ADC转换STM32共3个ADC 每个18个通道,其中16个规则组,2个注入组。多个通道采集多个数据需要使用DMA这是一个电压采集void Adc_Init(void){ ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2P...
2018-12-05 15:18:52
484
原创 CAN控制器及邮箱
CAN基础知识ISO11898是针对通信速率为125Kbps~1Mbps的高速通信标准。CAN协议的特点:多主控制。系统柔软性。速度快,距离远。具有错误检测、错误通知和错误恢复功能。故障封闭功能。连接节点多。显性电平对应逻辑:0CAN_H和CAN_L之差为2V左右。隐性电平对应逻辑:1CAN_H和CAN_L之差为0V。显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性...
2018-12-05 14:47:18
8426
原创 STM32DAC讲解及代码示例
DAC转换STM32的DAC模块主要特点有:① 2个DAC转换器:每个转换器对应1个输出通道② 8位或者12位单调输出③ 12位模式下数据左对齐或者右对齐④ 同步更新功能⑤ 噪声波形生成⑥ 三角波形生成⑦ 双DAC通道同时或者分别转换⑧ 每个通道都有DMA功能DAC_OUT1 ->PA4DAC_OUT2 ->PA5DAC配置步骤程序代码示例://...
2018-12-05 11:04:26
8429
1
原创 I2C通信协议及软件模拟I2C
IIC是半双工通信方式。24C02IIC协议:空闲状态:I2C总线总线的SDA和SCL两条信号线同时处于高电平时开始信号:当SCL为高期间,SDA由高到低的跳变;启动信号是一种电平跳变时序信号,而不是一个电平信号。停止信号:当SCL为高期间,SDA由低到高的跳变;停止信号也是一种电平跳变时序信号,而不是一个电平信号。应答信号:对于反馈有效应答位ACK的要求是,接收器在第9个时钟脉冲之前的...
2018-12-05 11:00:34
6672
2
原创 嵌入式琐碎知识点
LCD接口部分LCD接口WE即WR,OE即RDKEIL开发包下载http://www.keil.com/dd2/Pack/#/eula-container打包工具hex生成pgh的包,应该需要特殊的解析方式,具体生成方式未知。E:\workspace\GPRS_PROJECT\obj\hex2pgx.exe --VENDOR 0x881A --exec-8b 0x800C:E:\wor...
2018-12-05 10:58:56
167
原创 LINUX指令学习
网络查看IP Windows下 ipconfig LINUX ifconfig设置LINUX ip sudo ifconfig eth1 192.168.1.**关网卡 sudo ifconfig eth1 down开网卡 sudo ifconfig eth1 upping windows ip,ping 192.168.1.**查找名为a.c的文件find -name a...
2018-12-05 10:51:10
122
原创 RAM与ROM与PID算法数学公式及程序实现
RAM与ROM内存:RAM SRAM硬盘:ROM FLASHflash 分为:NOR FLASH 和NAND FLASHNOR FLASH读取速度快于 NAND FLASHNAND FLASH写入速度快于 NOR FLASH二者 由其寻址特点决定。PID算法程序实现:第一步:定义PID变量结构体,代码如下:struct _pid{ float Set...
2018-12-05 10:47:01
838
原创 RS485通信
RS485通信与RS232相对比看。所用芯片为SP3485代码与uart代码基本相同,只有在发送与接收数据时要通过一个使能引脚,进行相应的使能,主要不同在于硬件连接。典型的串行通讯标准是RS232和RS485,它们定义了电压,阻抗等,但不对软件协议给予定义。RS485特点:接口电平低,不易损坏芯片。RS485的电气特性:逻辑“1”以两线间的电压差为+(26)V表示;逻辑“0”以两线间的电...
2018-12-04 09:57:39
3252
原创 STM32中SPI概述与编程
SPI通信协议SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。C1101的引脚为 VCC GND CSN SI SO SCK GD00 GD02 后两个貌似可以不接,他们能产生中断SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约...
2018-12-04 09:54:44
1608
原创 sprintf、memset、memcmp、atoi用法和实现
Sprintf()函数的用法函数功能:把格式化的数据写入某个字符串函数原型:int sprintf( char *buffer, const char *format [, argument] … );返回值:字符串长度(strlen)例子:char* who = “I”;char* whom = "优快云";sprintf(s, “%s love %s.”, who, who...
2018-12-04 09:51:26
302
原创 STM32CAN总线配置基础教程
①配置相关引脚的复用功能,使能CAN时钟。要用CAN,先要使能CAN的时钟,CAN的时钟通过APB1ENR的第25位来设置。其次要设置CAN的相关引脚为复用输出,这里我们需要设置PA11为上拉输入(CAN_RX引脚)PA12为复用输出(CAN_TX引脚),并使能PA口的时钟②设置CAN工作模式及波特率等。通过先设置CAN_MCR寄存器的INRQ位,让CAN进入初始化模式,然后设置CAN_MC...
2018-12-04 09:42:51
8035
1
原创 有点复杂的CAN多通道多FIFO循环发送函数
结构体声明和定义:hal_can_tgtppkg_txpkg(CAN_CH_CMDMODE, (uint8_t *)phd, sizeof(PACK_HEAD_t));typedef struct { uint8_t Phy; uint8_t Win;}CANCFG_UNIT_t;static CANCFG_UNIT_t can_config_tab[HAL_CANWINNUM_M...
2018-12-04 09:27:13
1476
1
原创 STM32最小系统和时钟详解
最小系统1,、供电电路2、复位电路3、时钟:外部晶振(2个)4、Boot启动模式选择5、下载电路(JTAG)6、后背电池时钟详解:在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。①、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③、LSI是低速内...
2018-12-04 09:16:53
5750
1
原创 WIN10装系统
楼主,我知道问题在哪哦,是因为预装8.1系统采用的uefi启动电脑引导gpt分区表硬盘。你如果想成功安装windows7有两种方法。第一就是进电脑bios,把boot选项里面启动模式从uefi改成legacy,然后再设置u盘启动,就能正常进入了,然后利用diskgen软件,把硬盘转成mbr分区表,再新建分区,安装win7即可。第二种方法:就是传说中的uefi+gpt安装win 7 64位系统,此...
2018-12-04 09:05:09
335
原创 窗口看门狗配置过程
① 1、使能看门狗时钟: RCC_APB1PeriphClockCmd();② 设置分频系数: WWDG_SetPrescaler();③ 设置上窗口值: WWDG_SetWindowVa
2018-12-03 17:05:23
1406
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人