- 博客(25)
- 收藏
- 关注
原创 day 1
1.修改AI贪吃蛇提问:句柄是指针的指针,为什么句柄就是一个对象独一无二的ID;为什么结构体定义一个speed变量,改变speed的值,贪吃蛇速度会改变
2022-03-01 22:25:22
159
原创 第四章 静态链接
4.1 空间和地址分配4.1.1按序叠加去掉头尾,每个目标文件依次合并。问题:有多个零散的段,浪费空间;地址和空间对齐要求,造成大量内存碎片。4.1.2相似段合并 (目前都用这种)1.空间与地址分配:将所有目标文件的符号放进一个全局符号表,计算输出文件各个段合并后的长度和位置,建立映射关系2.符号解析和重定位4.1.3符号地址确定得到初始虚拟量地址,在得到偏移量,可以计算各个符号(函数和变量)的地址。4.2 符号解析和重定位4.2.1重定位...
2021-12-09 15:34:35
372
原创 第三章 目标文件里有什么
3.1目标文件定义源代码编译但未链接的中间文件。根据定义 库也是和目标文件一个格式(linux下ELF),库一起和编译后的源代码链接3.2目标文件构成编译后源代码放在代码段(.text)、初始化全局变量和静态局部变量保存在数据段(.date)、未初始化的全局变量和静态局部变量保存.bss段(因为未初始化的变量默认0,放在数据段占内存空间)编译后代码被放到代码段和数据段分开存放优点:1.代码段设置可读,数据段设置可读写,防止程序指令被误改;2.cache分成指令缓存和数据缓存,有利于提高cac
2021-11-23 11:11:31
118
原创 第二章 编译和链接
2.1 被隐藏的过程 :预处理 编译 汇编 链接四个过程预处理:现象就是.c文件变为.i文件 C++就是变为.ii文件 实际内涵就是#define删除,所有宏定义替换源代码里的内容等一些带#的代码处理和注释删除。行号和文件标识也是现在弄的,调试方便定位位置。编译 现象就是.i变.s 进行语法分析、语义分析以及优化后生产的相应的汇编代码文件,这是核心部分。汇编 .s 变.o 照着汇编表 一句汇编对应一句机器指令。链接 看静态链接部分2.2 编译器做了什么 思
2021-11-14 11:54:19
287
原创 第一章 温故知新
“hello world”引发的思考:1.程序为什么编译后才能运行?2.编译过程?3.编译出来的可执行文件是什么?怎么存放,组织的4.C语言库是什么?硬件主要:CPU 内存 I/O控制芯片(慢速的I/O设备和快速CPU实现交互)CPU主频 目前最高4GHZ 受限于制造工艺计算机体系:计算机科学领域任何问题都可以通过增加一个间接的中间层解决系统调用接口通常通过中断实现操作系统:尽可能压榨计算机硬件潜力1.CPU 多任务系统2.设备驱动 硬件驱动可看成操作系统一部分,和内核一起运
2021-11-06 12:20:43
101
原创 C语言实现贪吃蛇(VS code环境)
代码是参考网上的(自己写了一遍 附在后面),主要是分享遇到的bug以及感悟问题1.贪吃蛇初始方向不受控?解决:一开始一直以为是自己控制方向的数组dy dx逻辑出错,后来才发现是自己把蛇头位置+蛇头方向 写成 蛇头位置+蛇身方向,所以乱了问题2.贪吃蛇运动过程中,方向失控?解决:主要是没看清楚代码 先入为主的把dy dx 方向改了问题3:吃食物出现bug?解决:还是move函数里面的判断出错了,逻辑问题,要多学会透过问题看本质问题4:request时候,出bug?解决:init函数没有及时重
2021-10-29 11:17:19
1770
1
原创 VS code 环境配置
vs code 就是一个文本编辑器,如果需要写C/C++,下载相关插件就会有联想等相应功能,如果进一步需要做到IDE的编译调试,则需要安装编译器MinGW-W64 GCC 项目里新建 .vscode文件 里面放编译器的路径以及相关一些配置脚本 网上很多 不在赘述。但是配置环境其实每个人的境遇可能都会不同,甚至有人会花两三个小时在配置上,这太奢侈了,我很顺利的调试起了经典的贪吃蛇,但是在运行中出现了几个waring,双击竟然无法跳转,纠结了好久,后来换个搜索关键词,五分钟结束,如何百度也是个大学问啊!
2021-10-25 15:18:56
239
原创 我飞天啦~~~
前段时间看杨利伟叔叔的太空一日游十分感动,也为中国航天事业的发展感到十分高兴,最近又有三名航天员上了太空,就用本篇文章记录下使用OLED(ssd1306)显示屏实现飞天动画的过程。动图如上,大概是用了10几幅图片(显示图片的像素代码时网上来的)的样子,提前预存每帧图片,然后用数组实现循环播放每帧图片即可。...
2021-06-29 16:40:52
163
原创 Error: L6218E: Undefined symbol GENERAL_TIM3_PWM (referred from main.o).
自己一直火哥例程写了个PWM的控制,但是编译一直出错,查了很多发现没有对应的解决办法,特此记录下。火哥习惯在每个模块的函数加上static,static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性。但static也有个特点,就是只能在声明它的文件里使用。所以我去掉自己定义函数前面的static即可在main函数中调用该函数。...
2021-04-02 10:53:57
619
原创 小车总体调试
其实简单的循迹小车真不难,从一开始的手足无措,到后来一个一个模块的解决,其中遇到了很多问题,也都一一解决了,今天把各个模块组合在一起,进行统一调度。当然,又出错了。。。不过有问题才是人生常态嘛就是我的测距和红外探测没问题,就是小车转不起来,我分开调试,发现加上红外就不行,我一开始以为是红外的问题,找了好久才发现程序一直卡在LCD屏的初始化里,原来我因为线太多,很乱,就先把屏幕拔掉了,换上屏幕就可以使用。不过还是之前提的问题,永远只有两路输出,害!而且我发现我设置的差速并不明显,我怀疑是硬件太差的缘故
2021-03-31 15:43:00
367
原创 红外探测循迹模块
模块如上图所示,其实常用的就那几款,大同小异。现在嵌入式好就好在模块化的集成度高,开发简单,只要配置几个I/O口,控制高低电平,就可以实现模块的功能,而不用太担心模块底层的代码实现。但不好也不好在这里,因为集成度越来越高,也意味着嵌入式永远不能像互联网一样水平的薪资。当然嵌入式本身工资已经不低了,而且不用996,看了很多讲嵌入式的,我个人还是对这个行业很满意的,虽然我也是研究生,看到一些互联网学长的薪资也很羡慕,做好当下吧,谁叫我当时选择了相对更容易考的机械专业呢。那么拿到模块,肯定先要看模块的官方.
2021-03-31 15:27:10
4410
1
原创 gets();getchar();scanf()三种函数的异同
在做一道数组的C语言题目中遇到了这几个不同又相似的函数。题目描述从键盘输入一串字符,输出字符串里的数字字符数。我一开始想用的是scanf,也没问题,可以实现,但是看到了两个不同的答案,分别用了gets();getchar();#include<stdio.h>int main(){int n=0;char ch;while((ch=getchar())!=EOF){if(ch>=‘0’&&ch<=‘9’) n++;}printf("%d",n
2021-03-30 21:43:22
131
原创 原理图实现飞线
在PCB的绘制过程中,我们都知道可以隐藏多余冗杂的一些布线,器件。那原理图里是如何实现飞线的呢?说来也挺可笑的,我一开始用文件字符串,更新成PCB时一直报错,我知道文本肯定不对,但又不知道用哪个,一直搜的飞线隐藏,网上找了很多,就是找不到,后来才知道要用网络标号,现在想想应该是搜索的问题。...
2021-03-30 19:13:10
961
原创 AD无法生成PCB
这个问题遇到很多次了,主要AD平时用的太少,总是忘记。在设计–>update之所以没有这个选项,要么文件没有保存,要么工程是free document
2021-03-30 15:02:51
4781
3
原创 modbus通讯协议移植
曾经有一位资深的嵌入式硬件工程师告诉我,移植代码最好直接移植官网的,网上其他乱七八糟的,不知道被别人怎么改过了,自己调试时什么问题都会有。具体移植步骤我也是看下面这位写的博客的,很全。https://blog.csdn.net/qq_40305944/article/details/107447042就是有一个问题他没讲到,我做点补充。关于从机地址的更改,因为有很多类似ucSlaveAddress的单词干扰,而且在文件里有很多,找了好久,发现就定义在main函数的开头。...
2021-03-29 13:17:23
473
原创 LCD屏+测距模块 修改中断程序改错有感
我在超声波测距模块中使用了LED作为观察输出的方式,但是肯定是不够直观,所以结合使用I2C接口的LCD屏作为输出,观察测距模块。LCD屏的代码就不放了,有需要可以评论区私聊。现在模块化那么成熟,基本所以模块都有配套代码和说明书的,淘宝上直接问商家也可。有了屏的程序,只要调用人家封装好的函数,打印,显示函数等,把测距模块的返回信息通过定时器计算时间,在通过公式换算成相应的距离,通过函数打印在屏幕上即可。当然,具体实行的时候,会出很多问题,而发现问题,解决问题,才能更好的进步不是吗?第一问:写完中断函数
2021-03-29 13:05:58
224
原创 ..\..\User\xunji\bsp_xunji.c(44): error: #18: expected a “)“
这个错误真的太难过了一开始怎么找找不到,以为是中文括号在捣鬼。后来才发现是#define里多加了个分号,最操蛋的是我自己打是肯定不会打上这个分号的,我也不会直接复制别人的代码,我复制的自己.c文件里的代码,忘记去掉分号了。。。...
2021-03-29 10:43:26
425
原创 warning: #223-D: function “GPIO_ReadInputDateBit“ declared implicitly
一直出错,一直改错。这个错误很奇怪,说这个GPIO读取输入的这个函数是隐式声明。到.h文件找到了这个函数,发现无法跳转到这个函数的定义里面,怀疑函数名打错,找到GPIO的库函数,找到这个函数定义发现函数名大小写没有错,处于严谨心里,还是复制过去。上面三个是复制的,可以跳转,下面一个自己当时打的,说找不到,我怎么看着几个函数名都是一样的,有老哥知道了评论区可以讨论。当然都复制过来后,warning没有了。...
2021-03-29 10:40:25
2629
4
原创 超声波模块代码排错有感
具体的代码我不讲了,这篇文章主要讲形而上的东西,在写超声波模块代码时,我遇到了问题,以及如何排错的。我水平有限,可能有些问题对很多人来说不算问题,在我这就成了鸿沟了。首先这个原理十分简单,就是高电平要接5V电压,然后配置两个GPIO口,一个做10us的高电平输出作为启动,都在图里。我把小灯的亮灭作为输出,但是小灯就是不亮,我决定分别进行硬件和软件排错,首先是硬件(比较容易看),看接线以及更换测距模块(如果没有多余模块,一般硬件不容易出错,多半是软件问题),发现还是不行,就暂且认定是程序出错,进入deb
2021-03-23 20:12:52
195
原创 错误 C2447 “{”: 缺少函数标题(是否是老式的形式表?)
我的这个错误很可惜,真的很可惜,网上找了好多办法,都不行。结果。。。函数定义后面多加了个分号。我是先在前面进行函数声明了,在复制声明过来,填充函数的内容,自己手打肯定不会有这个问题,而且选的黑色,真的不明显!希望以后不会再犯这种错了。...
2021-03-21 20:05:16
19819
10
原创 error: declaration may not appear after executable statement in block
还是在自己移植定时器4路PWM输出时,打完代码发现了这个问题,翻译下意思是声明在执行语句后面。如图所示,报错的位置,然后我的解决办法是:在定义一个函数就OK了。
2021-03-20 20:33:20
207
原创 全局变量一些问题说明
其实全局变量的定义已经有很多人说了很多也说的很清楚了我之所以来讲这个事,主要是针对我自己遇到的问题做下说明本来想把原文章贴出来,发现他也是转载的?那我就是转载的转载?算了,大家自己去搜“全局变量” 浏览量第一的就是啦。extern unsigned char SysEventCounter; <----这里是关键,不能对该变量赋值,只能声明,赋值就会报错。上述声明是写在.H文件中的。其他.C文件若要用到该变量,直接包含该.H文件就可以了如果想要赋初值,可以在用到它的.C文件中这样写:
2021-03-18 20:16:30
208
原创 error: #65: expected a “;“ 错误总结
error: #65: expected a “;” 错误总结自己也几次遇到过这个问题,因为不注重总结,反反复复总是犯,找了很多答案,现在对这个问题进行总结。常见的原因有1.自己打代码时,不小心删掉或者误加一个“}”2.点击错误时,如果跳到头文件那里,很可能是头文件包含的函数结尾缺少“;”欢迎使用Markdown编# 系列文章目录提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成
2021-03-18 19:24:55
39445
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人