- 博客(11)
- 收藏
- 关注
原创 虚假唤醒详解
虚假唤醒详解 接触过多线程编程的朋友们或多或少都听说过虚假唤醒这一术语,我在百度上看了很多相关的帖子,说的都不是很清楚,于是写下这篇文章,希望能对大家有些裨益。虚假唤醒是什么 首先我们来谈谈虚假唤醒到底是什么。在这里我给出一个自己的定义,帮助大家去理解虚假唤醒 虚假唤醒是一种现象,它只会出现在多线程环境中,指的是在多线程环境下,多个线程等
2022-04-28 21:51:09 5243 10
原创 GCC编译器
GCC简介GCC全称GNU Complier Collection, GNU编译器集合,发展到现在,其不仅能编译C语言程序,还是C++,GO,Objective-C等多种语言的前端。程序由源代码变成可执行程序需经过4个步骤:预处理、编译、汇编和链接。预处理过程调用预处理器,对预处理指令(#include等)进行处理,生成预处理后的文件(.i 文件);编译则将每一个预处理后的源代码文件视为一个编译单元,对其进行编译,生成汇编文件(.s 或 .S 文件),汇编文件中都是机器(CPU平台)支持的汇编指令构成
2021-05-30 14:58:48 1023
原创 二叉树的层序遍历
二叉树的层序遍历要求从上到下,从左到右遍历整颗树;这里提供两种解法,都是使用单队列。二叉树的定义如下:// C++//Definition for a binary tree node.struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};解法一: 使用 n...
2020-09-22 19:56:53 193
原创 KMP算法详解
引言:KMP算法是一个子串匹配算法,即在一个主串 S 中寻找给定字串 T 的算法。KMP算法用于字符串的顺序存储结构的字串匹配。对于子串匹配,简单粗暴的解法肯定是从主串的第一个字符开始,与待匹配字串进行比较。如果发现与字串不能完全匹配(相等),就倒退到主串的第二个字符开始。。。然后从第三个字符开始。。。,一直到最悲惨的比较到主串的最后一个字符。在这个算法中,一旦在比较过程中出现主串中的某个字符与子串中的字符不相等的情况,主串的指针 i 就必须得回到刚开始匹配位置的下一个位置(回溯),相当于走 n
2020-08-04 22:14:16 391
原创 C++ const 类型限定符详解
const限定符一. 总体介绍:const的核心是禁止改变。1. const 修饰的基本数据类型的变量必须在声明时初始化,因为之后不允许将改变量作为左值进行赋值操作,其他操作无所谓。2. const 修饰的对象默认只在本源文件内有效,如果想扩展它的作用域到其他文件,必须在源文件定义前加 extern 全局变量声明(与变量不同),同时在头文件中进行正常的 extern 声明。二. 对常量的应用(常量引用)(引用与const):引用的类型必须与所引用的对象的类型一样。所以想建立一个常变量
2020-08-03 19:46:37 249
原创 make: *** No rule to make target ‘lib1funcs.S‘, needed by ‘obj/lib1funcs.o‘。 停止。
错误原因: 出现这种错误的原意是make工具或者说gcc工具找不到该 .S、.c 或 .h 文件。对于多级目录结构下的多文件编译,需要给gcc编译工具指定所有的汇编文件,源文件和头文件的具体路径。出现这种错误肯定是因为没有指明报错的文件的路径或指明的文件路径错误,导致gcc找不到该文件,从而报错。(也可能是VPATH设错了)解决办法: 找到报错该 .S、.c 或 .h 文件所在的目录,查看你给gcc工具的参数中是否包含了该文件的路径,然后修改它。 ...
2020-08-01 22:50:31 598
原创 i.MX6ULL串口外设无法工作
介绍: 这几天给NXP的 i.MX6ULL 系列的串口外设写驱动,发现了一个神奇的bug,这个神奇而让人非常无语以至于气急败坏的bug非常难以察觉,甚至于无法察觉。笔者浪费了很长时间终于找到了这个bug,特此公布,为大家找串口的bug省些气力。正文: 废话了这么多,现在直接说bug是什么把。在配置串口波特率时一定要先配置UART外设的UBIR寄存器,然后再配置UBMR寄存器,顺序反的话串口绝对不会工作!!!(妈的,真让人无语,这他妈的谁能想到,发泄一下)...
2020-07-31 22:46:15 405 2
原创 第二弹:i.MX6ULL的GPT外设的驱动
头文件:```头文件#ifndef __MY_GPT_H#define __MY_GPT_H#include "MCIMX6Y2.h"// general purpose timer/** * @brief GPT is a 32-bit up-counting conter. * */ #define GPT_SoftWare_Reset ((uint32_t)0x00008000)typedef str
2020-07-24 18:45:08 680
原创 i.MX6ULL:给你STM32的开发体验(i.MX6ULL的GPIO驱动的STM32方式的实现
简介: 最近在学i.mx6ull的裸机开发,感觉看的视频讲的不好,于是我就参考着STM32的固件库自己写了一个类似STM32的GPIO的驱动,谁想用拿走就好,能打赏几个钱就更好啦,毕竟纯原创嘛,还是有点辛苦的。```头文件#ifndef __BSP_GPIO_H#define __BSP_GPIO_H#include "fsl_common.h"#include "fsl_iomuxc.h"#include "MCIMX6Y2.h"#include "myCortexA7...
2020-07-18 22:48:17 623
原创 linux下GCC编译器报错:error: 未定义的引用:__aeabi_idiv
问题分析: 我是在Ubuntu Linux环境下开发C程序使用交叉编译器编译源码时遇见这个问题的。当时在给一款基于arm内核的处理器写驱动,使用了除法,遇到了这个问题。 出现这个问题的原因是arm内核不支持除法,arm没有实现除法的硬件,里面没有除法器(它应该是使用桶式移位寄存器实现的除法),当检测到代码使用了除法后,交叉编译器报错 undefined reference:__aeabi_idiv解决方案: 解决方案有两种,一种是找到gcc除法库lib...
2020-07-15 17:54:49 2165
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人