- 博客(76)
- 资源 (2)
- 收藏
- 关注
原创 RingBuffer环形缓冲区C语言
项目未能实现线程安全,仅供学习参考,工程项目请谨慎使用!!!RingBuffer 是一个基于C语言开发的环形缓冲区,适用于各嵌入式平台的串口收发等应用场景;在基本功能的基础上还提供了一个分段记录框架,方便数据管理;代码在AT32F403A平台上编译运行,经过简单的串口收发测试后暂未发现显性BUG。
2024-03-14 21:44:41
1137
1
原创 CodeComplete-ReadingNote
问题定义->需求->架构->构建->系统测试->将来的改进“未能定义问题”的处罚是,你浪费了大量时间去解决错误的问题,这是床冲出发,因为你也没有解决正确的问题。
2024-01-28 22:50:57
1125
原创 中断的分类、机理与嵌套:深入理解计算机系统的中断、陷入与异常
本文对计算机系统中的中断、陷入和异常进行了详细的探讨。我们了解了中断的分类、机理和嵌套,以及中断、陷入和异常的处理过程。这些概念对于理解计算机系统的设计和工作原理至关重要,尤其是在多任务环境和实时系统中。在未来,我们将继续研究这些概念在实际应用中的发展和创新。
2023-11-15 21:51:21
979
原创 FreeRTOS-定时器\二值信号互斥信号\事件组
FreeRTOS提供了一种软件定时器,用来快速实现一些周期性的操作,并且节约了硬件定时器。不过尽量还是不要做过多的操作,以免影响其他定时器的准度。演示了定时器定义,回调函数会每一秒进入一次,等到10次之后,定时器被销毁。还有一系列的中断中使用的函数。
2023-11-04 21:00:05
324
原创 操作系统概述
"programs"就完了?那么多复杂的程序呢!"管理软硬/硬件、为程序提供服务"的程序?理解操作系统“精准”的定义毫无意义问出正确的问题:操作系统如何从一开始变成现在这样的?三个重要的线索计算机(硬件)程序(软件)操作系统(管理软件的软件)讨论狭义的操作系统对单一计算机硬件系统作出抽象、支撑程序执行的软件系统学术界谈论“操作系统”是更广义的" System"(例子:OSDI/SOSP)
2023-04-01 22:34:31
622
原创 三万字长文总结C语言规范
unix like风格:单词用小写字母,每个单词直接用下划线„_‟分割,例如text_mutex, kernel_text_address。Windows风格:大小写字母混用,单词连在一起,每个单词首字母大写。不过Windows风格如果遇到大写专有用语时会有些别扭,例如命名一个读取RFC文本的函数,命令为ReadRFCText,看起来就没有unix like的read_rfc_text清晰了。匈牙利命名法是计算机程序设计中的一种命名规则,用这种方法命名的变量显示了其数据类型。
2023-03-26 22:34:11
367
原创 嵌入式相关开源项目、库、资料------持续更新中
本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言、单片机、开源项目、物联网、操作系统、Linux、计算机等资源。
2023-02-14 22:25:48
4791
3
原创 一年一度的【博客之星】评选活动已开始,请大家为我投个五星
一年一度的【博客之星】评选活动已开始,请大家为我投个五星,您的支持就是我持续创作的动力,感谢支持!https://bbs.youkuaiyun.com/topics/611391136
2022-12-30 11:02:40
284
2
原创 C语言高级用法--函数指针:回调函数;转换表
函数指针最常见的两个用途:作为参数传递给另一个函数(回调函数)和转换表(jump table),本文将探索这两方面的一些技巧。
2022-06-27 22:22:53
470
原创 C++指针和引用
**复合类型**(compound type)是指基于其他类型定义的类型。C++语言有几种复合类型,诸如结构体、共用体、枚举等,本文将介绍其中的两种:引用和指针。
2022-05-29 17:19:42
966
原创 校招行测笔试-言语理解与表达
校招行测笔试-言语理解与表达本文思维导图:完整版思维导图,微信公众号【刘看山是山】后台回复[行测]一.片段阅读1.中心理解题1.1逻辑连词1.1.1转折关系标志词 虽然 ……但是 ;虽说 …可是;尽管……可是……;……不过……;……然而……; ……却……;其实/事实上/实际上理论要点:转折之后是重点 示例: 尽管双 11 很便宜,可是我还是买不起啊 这次行测考试很简单,然而我还是没答完啊【例 1】一直以
2022-04-30 17:52:54
4263
原创 必知必会-CPP的23个Tips
0x01:extern关键字可以在任何地方使用,但变量只能在某个文件、函数或代码块中被定义一次。0x02:定义包含声明,但声明不包含定义。0x03:NULL:数据类型pointer作为全局变量,系统自动初始化为该值。0x04:在main()函数外为全局变量,函数内为局部变量。二者名称可以相同,但是在函数内,局部变量的值会覆盖全局变量的值。重名变量,作用域小的屏蔽作用域大的。0x05:当局部变量被定义时,系统不会对其初始化,您必须对其初始化。正确地初始化变量是一个良好的编程习惯,否则有时候程
2022-04-23 17:01:51
1190
原创 职业规划-三大职业生涯阶段
第一阶段:添加燃料,强制开局整个第一阶段往往长达十五年,是一个学习和探索的过程,充满了尝试和错误。这并不是为了找到一份你每天都津津乐道的神话般的工作,而是找出你擅长什么、不擅长什么、喜欢做什么,以及不喜欢做什么。第一阶段并不仅仅是被动地增长年龄和阅历,像一块牛排一样“更加入味”,而是一个高度活跃和有目的性的阶段。司徒慕德爵士说过:“职业生涯绝不是一条笔直上升的路线。我们常常需要为了前进而后退,为了变得更好而变得更坏,为了获得进步而投入资本。最好的旅途总是发生在迷路时。”第一阶段的策略很简单:步入职场
2022-04-17 18:15:06
1075
原创 职业规划-储备三大职场燃料
为了推动自己的走完这段漫长的旅程,你需要大量的职场燃料。这个燃料有三个主要来源:可迁移技能、有意义的经验和持久的关系。本文思维导图:一.可迁移技能1.解决问题的能力从某种程度上说,世界上任何一份工作都是为了解决某个问题而存在。你能够分析问题并指定解决方案吗?当你面对一项挑战和一张白纸时,你是否有一两套能解决问题的可靠方法呢?有不少理论框架和策略能帮助你提高解决问题的能力。你应当有意识地往自己的工具箱里添加些不同的方法,并勇于将不用的方法结合起来,创造出适合自己的独门秘方。2.说服式沟通技巧无
2022-04-10 18:56:31
1035
原创 必知必会-C语言内存管理
内存管理衡量是否掌握C语言的两个标准,一:指针;二:内存管理。指针的相关内容欢迎查看历史文章,本文会介绍C语言内存管理的相关知识,其对于读者之后的编程生涯也会大有裨益。如果你有相关需求,就往下看吧。一.栈、堆和静态区对于程序员,一般来说,我们可以简单的理解为内存分为三个部分:静态区,栈,堆。很多书没有把把堆和栈解释清楚,导致初学者总是分不清楚。其实堆栈就是栈,而不是堆。堆的英文是 heap;栈的英文是 stack,也翻译为堆栈。堆和栈都有自己的特性,这里先不做讨论。再打个比方:一层教学楼,可能有
2022-04-05 17:41:59
1667
原创 必知必会--数组与指针二
指针与数组一四.指针数组与数组指针4.1指针数据和数组指针的内存布局初学者总是分不出指针数组与数组指针的区别。其实很好理解:指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它是一个指针,它指向一个数组。在 32 位系统下永远是占 4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针数组呢:(A) int *p1[10];(B) int (*p2)
2022-04-04 17:39:27
1455
原创 必知必会系列-指针和数组
指针和数组读文章前思考三个问题:1.什么是指针?2.什么是数组?3.指针和数组之间有什么关系?一.指针1.1 指针的内存布局int *p;大家都知道这里定义了一个指针 p。但是 p 到底是什么东西呢?我们把 p 称为指针变量,p 里存储的内存地址处的内存称为 p 所指向的内存。指针变量 p 里存储的任何数据都将被当作地址来处理。我们可以简单的这么理解:一个基本的数据类型(包括结构体等自定义类型)加上*号就构成了一个指针类型的模子。这个模子的大小是一定的,与*号前面的数据类型无关。*号前面
2022-03-14 17:49:55
596
原创 去掉VS中ipch文件和.sdf文件的解决方法
VS2010 按F12 未能找到符号 的定义 的解决办法:"工具"菜单->选项->文本编辑器->你的语言(eg:C/C++)->高级:1 “禁用Intellisense”==false;2 "浏览/导航"全部选false,扫描间隔随意(eg:15);sdf和解决方案重新生成1、"生成"菜单->清除解决方案;(?)2、关闭VS2010或解决方案;3、删除解决方案对应的 .sdf文件;4、生成->重新生成解决方案;再次转到定义(F12)就OK了...
2022-03-10 18:44:09
1034
原创 必知必会-C语言关键字篇
关键字1.registerregister:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对,因为一个CPU的寄存器的数量是有限的,不可能把这些变量都放入寄存器中。寄存器:数据从内存里拿出来先放到寄存器,然后 CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存放到内存里,CPU 不直接和内存打交道。为啥要这么麻烦啊?因为速度。寄存器其实就是一块一块小的存储空间,只不过其存取速度要比内存快多。近水楼台先得月嘛,它离
2022-02-26 14:41:59
702
原创 135. 分发糖果
class Solution {public: int candy(vector<int> &ratings) { if (ratings.size() == 0) return 0; if (ratings.size() == 1) { return 1; } vector<int> candy(ratings.size(), 1); f
2021-12-25 21:46:14
335
3
原创 力扣121题
class Solution {public: int maxProfit(vector<int>& prices) { if(prices.empty()) return 0; //直接利用一个循环,找到最小的价钱作为买入价,并找到在此买入价下的最大利润 int profit = 0; int min = prices[0]; for(int i = 1; i
2021-12-25 21:44:59
364
原创 力扣25. K 个一组翻转链表
class Solution {public: ListNode* reverseKGroup(ListNode* head, int k) { if (head == nullptr) return head; auto tail = head; for(int i = 0; i < k; ++i) //先让tail移动k个节点 { if(tail == nullptr) return he..
2021-12-25 21:43:16
189
原创 力扣92. 反转链表 II
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next)
2021-12-25 21:41:30
333
原创 C++类成员函数的重载、覆盖与隐藏
成员函数的重载、覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。一.函数重载1.重载的原因:在 C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,即函数重载。 这样便于记忆,提高了函数的易用性,这是 C++语言采用重载机制的一个理由。例如下面例子中的函数 EatBeef,EatFish,EatChicken可以用同一个函数名 Eat 表示,用不同类型的参数加以区别。void EatBeef(…); // 可以改为 void Eat(Beef
2021-12-19 13:55:32
728
软件设计文档模板.rar
2021-09-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人