- 博客(18)
- 问答 (2)
- 收藏
- 关注
转载 50条C语言技巧
x : y) // 这样给50分// 不信你试试这个int n = 3 * MIN(3, 4 < 5?(x) : (y)) // 这个给90分// 不信你试试这个double xx = 1.0;// 以下放大招了,看看GNU的#define MIN(A,B) ({// 结果为16 ROUNDUP(10, 16);((n) & ((n) - 1)) == 0这个不理解?
2024-07-10 06:55:01
18
原创 使用中断及延时机制实现按键消抖
如果按键仍然处于触发状态,则认为这是一个有效的按键事件,并在ISR中处理该事件(如调用相应的函数或设置标志位)。禁用中断(可选):在某些情况下,为了避免在处理按键事件期间再次触发中断,可以在处理按键事件时临时禁用中断,待处理完毕后再重新启用。配置中断:设置中断服务程序(ISR),并配置中断触发条件,如按下时触发(下降沿触发)或释放时触发(上升沿触发)。初始化按键输入:首先,将按键连接到微控制器的某个输入引脚,并配置该引脚为中断输入。首次触发:当按键首次触发中断时,记录当前时间或中断计数。
2024-06-30 23:17:01
478
1
原创 keil编译报错L6406E: No space ...以及栈溢出问题
调试遇到arm内存不足的问题:keil编译报错,提示芯片空间不足,但不确定是FLASH空间不足还是RAM空间不足。flash够大,应该问题不大,应该还是需要用到的ram不够了,导致数据放不到ram中报空间不足。解决办法:增加keil的RAM分配空间,直到编译通过,发现RW-data段占用11K左右,而该段分配的是初始化的全局变量,包含static变量。验证代码后,去掉了大变量,剩余空间不到1K可以跑起来了。查看代码,发现两个基变换矩阵占用近18k,其中一个定义为static const,另一个定义
2021-12-23 21:07:49
4662
原创 Ulink仿真器erase flash failed
KEIL中调试arm芯片报错erase failed:这是调试的第一步,擦除flash然后再将程序加载到flash上,进行verify后可进入debug阶段一般网上该问题的解决办法大多有以下几种:1、确认芯片设置是否正确,主要是芯片型号和设置的是否一致2、擦除算法有没有加载进去,有没有加载对。3、有没有全片擦除flash,可以手动先全片擦除以后,再进行加载程序,因为有时候芯片内有程序会报不能访问内存。4、重点加粗第二点,擦除算法加载不对,会导致erase flash failed,但是擦除失败的原
2021-12-10 21:12:28
1592
原创 keil启动文件和分散加载文件(sct文件)
启动文件可参考去下:https://blog.csdn.net/linux12121/article/details/82939941?utm_source=app&app_version=4.13.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
2021-12-08 08:19:37
460
原创 图解TCPIP 笔记
图解TCPIP—基础知识(前三章干货少 重点在后边)表示层:将计算机特定的数据格式转换为网络标准数据格式,标记格式编码会话层:用于选择建立哪种连接方式,会在数据前端增加首部或标签信息传输层:会话层只做何时建立连接,何时发送数据,到具体传输数据比如从建立连接,传输和重发机制,断开连接都是传输层工作物理层:将包含MAC地址的数据附加到从网络层收到的数据首部上,将其发送到网络上传输方式:面向有连接和无连接、电路交换和分组交换分组交换,将数据分组,加上目的地址发送给路由器,路由器收到后缓存,最后按照顺
2021-12-08 08:10:14
441
原创 动态链接调用浅析
1、特点动态链接特点是需要把库函数申明为函数指针,通过过去库中的函数地址来调用,主要用到loadlibrary函数和getprocaddress函数。2、loadlibrary函数变化前者在vs2012以后函数名称改为loadlibraryW即采用Unicode字符编码,函数参数也有char改为wchar,为了能让之前vs2010函数编译的接口函数库load通过,则loadlibrary改为loadlibraryA方式。动态链接不需要lib库,不需要工程中添加路径,直接load即可。3、函数指针声
2021-08-12 23:12:17
112
原创 ANSI C标准规范的类型相容
专注地阅读ANSI C标准,解决下边测试代码的warning;food(const charp)main(int argc, charargv){food(argv);}编译之后会产生警告信息:warning: argument is incompatible with prototype通常认为char* const char相容,因为标准库中的所有字符串处理函数都是这样的。实际上,char **argv 和const char **p不相容,前者指向char的指针,后者指向的是con
2021-04-13 12:47:17
210
原创 每日复盘之Dll动态库应用报错0xc000007b
每日复盘之Dll动态库应用报错0xc000007b关于dll单步调试windows动态库可静态和动态调用,静态调用需dll文件和lib,动态只需要dll。静态调用若生成dll是debug版本,可以跟进去调试,前提是dll放在调用工程的debug下。0xC00007b应用程序无法启动1.22复盘之32位和64位dll的调用配置windows调用32位dll是,配置平台选择Win32即可,调用64位dll时,平台需要选择x64,同时会在解决方案的目录下新建x64目录。今天在win10上又碰
2021-04-08 08:39:14
255
3
原创 C文件读写操作
C文件读写操作头文件:stdio.h常规文件操作:fopen文件 wb–覆盖写 ab–可追加写打开文件失败错误码显示 perror(sterr(errno));大数据量输出可用文件输出,fwrite();fseek(pfile,0,seek_end);方法重新定位数据流指针位置。ftell(pfile);与fseek方法结合,得到该文件的长度。rewind();方法上数据流指针回到文件头最权威的请查阅MSDN文档具体函数说明文件流指针定位fseek函数用法:int fseek
2021-04-06 08:47:25
115
原创 编译器优化产生的BUG
给大家看一下下边这段代码while(1){ if(rst_flag) { rst_flag = 0; uart_send("HERE'S NO BUG"); break; }}rst_flag全局变量,初始化为0,外部一定条件下修改为1,程序上来理论上要一直等待rst_flag为1然后打印Here’s no bug。但是程序实际执行时候,并没有一直等待rst_flag为1,二是执行了一次if条件之后,直接重新循环,而且再也没
2020-08-26 08:34:43
524
3
原创 非对称算法RSA原理——浅述
一、质数(RSA基因)定义:指在大于1的自然数中,除了1和它本身之外不再有其他因数的自然数,也可说除了1和它本身之外,不能被其他自然数整除的数。互质定义:公因数只有1的两个非零自然数。二、欧拉函数(RSA建立基础)定义:任意给定的正整数n,请问在小于等于n的正整数中,有多少个数(假设x个)与n构成互质关系?计算这个值(x)的函数叫做欧拉函数,以£(n)表示。(这里边的函数符号只是本文写的,不具参考意义。)三、欧拉定理(RSA建立基本雏形)如果两个正整数m和n互质,那么m的£(n)次方减去1可以被
2020-08-15 22:29:38
657
1
原创 eclipse下makefile工程C/C++生成及调用静态库(.a文件)之教训
查找网上方法一生成. a文件首先需要建静态库工程,可以参考我上一篇的文章我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《eclipse下C/C++工程生成静态连接库》, 一起来围观吧 https://blog.csdn.net/kefeilong123/article/details/107523522?utm_source=app按照这个流程可以正确的生成静态库文件,正常看上去没什么问题。是骡子是马,拉出来溜溜就知道了。查找网上方法二丑媳妇怕见公婆,调用时候果真出问题了,检查发现,
2020-08-01 09:08:46
969
原创 eclipse下C/C++工程生成静态连接库
网上已经有些文章讲了基本流程,见链接:我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《eclipse 生成及使用C/C++静态库》, 一起来围观吧 https://blog.csdn.net/u012707739/article/details/77899880?utm_source=app不过从我上手生成.a文件时还是遇到问题,按照流程建完工程后,编译提示"no rule to make target ‘clean’ 或者’all’" 查了网上的解决方法,有的说文件路径不对,说ma
2020-07-22 21:19:04
506
原创 寄存器间数据传输时序分析之保持时间
拿触发器图为例描述两个寄存器之间的数据传输, 寄存器A下文称RA的data数据在clk的驱动下,输出到寄存器B,RB在clk上升沿采集data,时钟源为同一clk,那么有以下几个时间段:TclkA:pad上的时钟到RA的线路时钟延时Tco:时钟在RA中的输入端D到输出端Q的延时Tdata:数据从RA的Q端输出到RB的D端线路上时钟延时通过以上几个参数即可以得出数据到达RB的时间Data Arrival Time=TclkA+Tco+Tdata同理,在数据到达时间(Data Arrival Tim
2020-07-10 08:01:23
1288
原创 寄存器间数据传输时序分析之建立时间
拿触发器图为例描述两个寄存器之间的数据传输, 寄存器A下文称RA的data数据在clk的驱动下,输出到寄存器B,RB在clk上升沿采集data,时钟源为同一clk,那么有以下几个时间段:TclkA:pad上的时钟到RA的线路时钟延时Tco:时钟在RA中的输入端D到输出端Q的延时Tdata:数据从RA的Q端输出到RB的D端线路上时钟延时通过以上几个参数即可以得出数据到达RB的时间TclkB:pad时钟到RB的线路时钟延时假设时钟周期为T_cycle。建立时间门限为Tsu:表示时钟采样沿来之前,数
2020-06-30 08:21:31
4633
原创 半双工SPI通信调试
spi主从通信 本文只说问题,具体协议网上比较多master和slave方式配置要一致半双工 CPHA为1(第二个沿采样) CPOL为1(时钟空闲为高)MSB传输,时钟5.88M(实测)调试遇到问题,从端发不出来数问题排查1,看Master时钟有没有供,发现时钟确实没供,但是clk线不接到从端时候,主端的clk是有的。对于接收状态,clk是在每次使能完接收控制寄存器后硬件自己产生。对于发送状态,clk是在将待发送数据填充到发送寄存器中自己产生。slave没收到时钟导致一直等待tx_fif
2020-06-10 21:20:30
2289
原创 MCU二次boot开发调试心得
二次boot开发调试心得近期调试一个国产芯片时,遇到了程序过大没办法下载到原来的boot问题(原boot程序只能接受不到100K的代码,flash为256K)基本调试逻辑,首先flash分区,从地址0开始留10k空间给二级boot的程序,通过二级boot再把待下载的程序下载到flash的指定地址上,最后跳转执行即可。注意一将待下载程序的.text段放在APP_FLASH_ADDR(自定义)上,.data和. bss段放在RAM中,防止跟堆栈地址冲突。注意二二次boot程序需要接收代码,但
2020-06-07 16:25:14
1145
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人