![](https://img-blog.csdnimg.cn/ea851352f8be4cf5b6d0db1e28806a1d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++ 设计师
文章平均质量分 65
C/C++ 编程大技巧
CJourneys
cosmicjourneys:我的学习之旅就像宇宙中的浩瀚旅程,不断探索新的知识和技能。
展开
-
鲁棒的设计
维护外设的状态信息,包括连接状态、配置信息等,以确保程序可以正确地理解外设的当前状态,并根据需要采取相应的操作。在进行外设操作时,设置合理的超时时间,并在超时发生时采取适当的措施,比如取消当前操作、重启外设或者向用户报告超时错误。在开发过程中进行充分的测试和调试工作,包括单元测试、集成测试和系统测试等,以确保系统的功能和性能符合设计要求,并发现和修复潜在的问题和缺陷。对于代码进行充分的文档和注释,包括函数接口、数据结构、算法等,以便其他开发人员能够理解和修改代码,并确保代码的可维护性和可扩展性。原创 2024-03-26 09:09:50 · 217 阅读 · 0 评论 -
c/c++中一些不常用但有用的知识
在 C 语言中,变长数组(Variable Length Arrays,VLA)是 C99 标准引入的特性,允许使用变量来定义数组的长度。因此,在 C 版本的代码中,可以使用您提供的方式来动态申请数组,前提是编译器支持 C99 标准。原创 2023-12-08 15:51:22 · 709 阅读 · 0 评论 -
C程序设计:状态机
状态机是一种常用的编程模型,用于描述系统的状态和状态之间的转换规则。无论使用何种操作系统或编程框架,状态机都可以用来帮助设计和实现系统的逻辑。即使在使用 FreeRTOS 的情况下,如果系统的逻辑需要描述为多个状态和状态转换,那么状态机仍然是一种很有用的设计工具。在上面的例子中,有两个状态 S1 和 S2,输入有两个选项 A 和 B,输出有四个选项 O1、O2、O3 和 O4。根据当前状态和输入,状态机会根据表格的规则进行状态转移,并输出相应的结果。原创 2023-07-31 14:16:28 · 765 阅读 · 0 评论 -
C程序设计:基于双向链表的flash磨损平衡算法
优势:简单有效:使用链表队列来管理Flash中的数据块,通过遍历链表来查找、更新和新增节点,在Flash中实现磨损平衡。这种实现方式相对简单直观,并且能够有效地管理数据块的使用,减少Flash磨损不平衡的问题。灵活性:链表队列的形式可以灵活地添加、删除和移动节点,从而管理Flash中数据块的布局。这样可以根据程序的需求进行灵活的数据管理操作,提供了一定的灵活性和可扩展性。最大化使用寿命:通过使用链表队列和磨损平衡策略,可以尽可能地均衡使用Flash中的数据块,延长Flash的使用寿命。原创 2023-07-28 13:45:45 · 620 阅读 · 0 评论 -
freeRTOS:基于(队列+线程)的日志系统设计
故障排查与调试:嵌入式系统通常运行在资源有限的环境中,故障排查和调试变得尤为复杂。日志系统可以记录系统在运行过程中的各种操作、状态和事件信息,方便开发人员追踪和定位问题所在。通过分析日志,可以快速找到故障源,并进行相应的修复和调试。系统性能优化:嵌入式系统的资源有限,因此性能优化尤为关键。日志系统可以记录系统运行过程中的性能指标,如任务执行时间、资源利用率等。通过分析这些日志,可以发现系统性能瓶颈,进行性能优化和资源管理,提高系统的响应速度和资源利用效率。原创 2023-07-27 11:00:55 · 896 阅读 · 0 评论 -
C++ 程序设计:基于线程的定时器
在C++11之前,标准库中没有提供原生的定时器功能。原创 2023-07-26 11:06:23 · 1030 阅读 · 0 评论 -
C++ 程序设计:线程基类
灵活性:可被继承的线程基类可以灵活地根据具体需求进行扩展和定制。你可以在派生类中添加额外的成员函数、成员变量,以及自定义的线程操作接口。这使得你可以更好地适应复杂的应用需求。可定制性:通过可被继承的线程基类,你可以实现自己的线程管理策略、线程间通信机制等。你可以定义自己的线程调度算法,控制线程的执行顺序和优先级等。这样可以更好地满足特定场景下的需求。可扩展性:当你的应用需要多线程之间的协作和通信时,你可以在可被继承的线程基类中定义线程间的通信机制,例如消息队列、互斥锁、条件变量等。原创 2023-07-25 15:07:17 · 194 阅读 · 0 评论 -
C++ 程序设计:四大模式(工厂+装饰+策略+观察者)
"工厂+装饰+策略+观察者"是常见且常用的设计模式之一,但并不是指称"四大模式"的官方术语。"通常是指指令式面向对象编程中的四个基本概念:封装继承多态和抽象。这四个概念是面向对象编程的基石。原创 2023-07-18 15:05:40 · 877 阅读 · 0 评论 -
C++ 程序设计:单例+原型(手机原型机和量产机)
当原型模式与单例模式结合在一起时,可以实现一个可以克隆的单例。在传统的单例模式中,类只能有唯一的一个实例,并且使用静态方法获取该实例。而在原型模式中,可以通过复制原型对象来创建新的对象实例。当将这两种模式结合在一起时,通过克隆原型对象,可以创建多个具有相同属性和行为的实例,同时保持单例的特性,即每次克隆都得到同一个实例。这种结合模式的应用场景是当希望在单例基础上创建新的对象实例,这些新实例保持与原始实例相同的初始状态,并且这些实例之间相互独立。原创 2023-07-13 14:34:50 · 4402 阅读 · 0 评论 -
C++ 程序设计:信号与槽
在C++中,有很多开源的信号与槽库可以使用。以下是一些常见的开源信号与槽库:Qt:Qt是一个流行的跨平台应用程序框架,提供了一个强大的信号与槽系统。它能够轻松地创建和管理信号与槽的连接,具有良好的可扩展性和灵活性。Qt通过使用线程间事件队列(event queue)来实现线程间的信号与槽通信。Boost.Signals:Boost.Signals是C++的一个信号与槽库,它提供了一套基于回调机制的信号与槽系统。原创 2023-07-07 15:48:35 · 968 阅读 · 0 评论 -
C程序设计:基于双向链表的软件定时器
基于双向链表的软件定时器是一种常见的实现方式,它可以在操作系统或应用程序中用于管理定时任务。双向链表是一种数据结构,它包含指向前一个节点和后一个节点的指针。在软件定时器的实现中,每个定时任务可以表示为一个节点,节点中包含定时任务的信息,如定时时间、回调函数等。软件定时器可以被添加到硬件定时器中,主线程循环中,另开线程中。原创 2023-07-06 15:37:38 · 400 阅读 · 0 评论 -
C程序设计:基于循环双向链表的事件管理器
基于循环双向链表的事件管理系统是一种用于管理事件的数据结构。它可以用于多种场景,包括计划任务、调度、日程安排等。原理如下:事件节点:每个事件都被表示为一个节点,每个节点包含一些必要的属性,比如事件的名称、开始时间、结束时间等。节点之间通过指针连接形成链表。循环链表:链表的最后一个节点的下一个节点指针指向链表的第一个节点,形成一个循环链表。这样可以方便地进行遍历和循环操作。双向链表:除了通常的单向指针外,每个节点还包含一个指向前一个节点的指针。这样可以在链表中高效地进行向前或向后遍历。原创 2023-07-05 10:11:11 · 139 阅读 · 0 评论 -
C程序设计:一种基于linux内核双向链表的移植
每个链表节点包含两个指针,prev指向前一个节点,next指向下一个节点。在实际使用中,通常会在自定义的数据结构中嵌入,以便将其作为链表节点使用。原创 2023-06-29 13:17:32 · 797 阅读 · 1 评论 -
C++ 链表队列的实现
【代码】C++ 链表队列的实现。原创 2023-06-28 14:20:50 · 223 阅读 · 0 评论 -
C程序设计:环形队列
2.环形队列读的速度慢于写时,一旦写的地址到达了读的地址时,队列将被清空。1.在多线程的队列读写,应在读写时加锁来保护。原创 2023-06-28 14:16:42 · 494 阅读 · 0 评论 -
【C/C++ 规范系列 4】- 规避常见的陷阱
本文基于 wiki《 QT API Design Principles 》:https://wiki.qt.io/Category:Developing_Qt::Documentation1.常规陷阱(The Convenience Trap)一种常见的错觉,需要实现的代码越少,API就越好。请记住,代码编写不止一次,但必须一遍又一遍地理解。例如://bad codeQSlider *slider = new QSlider(12, 18, 3, 13, Qt::Vertical, 0,原创 2020-09-18 10:55:54 · 120 阅读 · 0 评论 -
【C/C++ 规范系列 3】- 命名的艺术!
本文基于 wiki《 QT API Design Principles 》:https://wiki.qt.io/Category:Developing_Qt::Documentation原创 2020-09-17 11:17:50 · 195 阅读 · 0 评论 -
【C/C++ 规范系列 2】- 如何用 const ?如何用好const ?
本文基于 wiki《 QT API Design Principles 》:https://wiki.qt.io/Category:Developing_Qt::Documentationc++提供了关键字“const”来表示某些东西不会改变或没有有副作用。这适用于值、指针和被指向的对象,也可以作为一个特别的属性应用于类的成员函数上,表示成员函数不能修改对象的状态。然而,const本身并没有提供太大的价值 —— 很多编程语言甚至没有类似const的关键词,但是却并没有因此产生问题。实际上,如果你原创 2020-09-16 15:28:53 · 93 阅读 · 0 评论 -
【C/C++ 规范系列 1】- 函数入参,出参到底是使用 指针?引用?还是值?
本文基于 wiki《 QT API Design Principles 》:https://wiki.qt.io/Category:Developing_Qt::Documentation1.指针vs引用(Pointers vs. References)(获取【出参】) 对于获取【出参】,指针和引用,下面的写法哪一个更好? void getHsv(int *h, int *s, int *v) const void getHsv(int &h, int &s, in...原创 2020-09-15 20:27:12 · 1625 阅读 · 0 评论