首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

随笔编程杂谈录:

制造轮子和创造轮子两者的区别在于:一者为复用,一者为封装 一、与封装的初 现在回到第一次接触封装的时候: 两年前,class这个词进入了的世界,但class并不是封装思想的启蒙师。...5.小结 对使用者而言:哥管你里面什么逻辑,给输入,你给我想要的输出就行了 确实一个封装体就做到了,隐藏内部的逻辑实现,将最简洁的使用方式告诉使用者 下面的一幅图和上面的封装体能完成相同的功能...,这就造成了浪费,虽然我们眼里不算什么 对于一个开源框架来说,一个bug可能导致所有使用者的崩溃,这是很严重的 也就是使用一个封装体是具有一定的风险性的,当然大厂的框架会相对完善 再者就是接口的复杂...好了,引入完成,下面进入正文 二、编程中初封装 1.与class的初 两年前,一开始class 以及它 的 private 是非常难理解的 对类的认识是C++里,印象最深的是圆这个类,从获取圆的面积开始...但任何一个程序员都必定是第一个使用者,所以两个角色一个人身上 对于入门的来说,只能是一个使用者,因为你只是在意获取结果,而没有程序员的设计之魂 就会感觉很混乱,站在一个使用者的角度,类确实将半径为

39820

求解:串口DMA STOP模式下唤醒崩了

问题: 正常工作模式下,串口收发数据帧一直运行几个小时都没问题,但是低功耗进入STOP模式之后,通讯唤醒,主机通讯,会出现无法通讯的情况,过了几秒又恢复正常,一般5S以内,偶尔较长时间,为何?...重点就放在了跟串口底层相关的部分,因为STOP模式之前会把所有的外设处理一下,串口、DMA都会关掉,唤醒之后重新使能,问题可能出在了这里,但是分析完之后也没有发现有什么异常。...< Receiver Timeout error */ 接下来检测下发生的错误,每一个错误都打印出来: 有时候也会出现噪声错误 错误对应的是,帧错误,噪声错误: #define HAL_UART_ERROR_FE...< Noise error */ 定位到问题了,接下来先打个补丁,能够正常使用,错误回调里面清除标志,重新DMA接收: void HAL_UART_ErrorCallback...DMA_REC_DATA_LEN); Bsw_Uart_ReceviceCfg(ENABLE); //接收配置 } } 目前仅仅是问题到了解决

87320
您找到你想要的搜索结果了吗?
是的
没有找到

iOS提交审核失败:通知“has changed to Invalid Binary.”错误

2016-11-09 今天App提交审核的时候遇到了一个问题,打包上传到itunes Connect的过程都没有问题,但是之后itunes Connect的活动中却看不到自己上传的新版本二进制文件。...不过遇到问题原因却不是这个,这些权限都是加过的。最终发现这个问题的原因是项目中使用了私有的api,这倒是没有想到的。...其实这样的问题大家最好去看下开发者账号绑定的邮箱(不过通常公司的开发者账号邮箱不在开发者手中,需要问下所有者)。 查看邮箱中的描述,是这样的 ?...从上面可以看出,使用的_UICreateCGImageFromIOSurface有问题。...其实是因为开发阶段使用了UI调试工具Reveal,在上线打包前忘记去掉了,项目中去除reveal.framework的引用就好了

1.5K70

Python|MitmProxy代理抓包工具实践难点

前言 最近小编利用MitmProxy代理抓包所遇到了一些实践难点,因为看过一些介绍MitmProxy代理抓包的博客,故如何安装MitmProxy的步骤不做介绍,只将自己遇到的实践问题介绍并解决,希望对读者有所帮助...(本篇博客基于 https://blog.csdn.net/fei347795790/article/details/107284720/该博客的实践所问题的解决方案。)...所实践问题 获取手机端证书 所读的一篇博客的介绍方法:将手机端的代理ip设置和pc端ip地址一致,代理端口号设置为:8080;然后手机端浏览器访问mitm.im进行下载证书。...照此方法不过的手机(小米手机)并不会出现证书下载界面,而会出现另一个界面; ? 再参考了另外几篇博客后,选择了一种解决方案。...原博客的代码中有一个get_params方法,其中的str_to_dict()函数方法需要手动写入,但原文描述有点不清楚;将str数据类型转换为dict类型,否则会出现utils无str_to_dict

1.2K20

如何优化 SQLite 每秒的插入操作

问题 译注:作者已整合了该帖,看着更像是一篇实验性文章,因此稍微进行了排版。 SQLite 的优化比较棘手,就批量插入而言,其速度可以从每秒 85 条优化到每秒 96,000 条。...此文件和数据库文件总是一个目录,并且有相同的文件名,但是文件名中添加了一个-journal字符串。此文件一般transaction开始时创建,transaction结束时删除。...,频率就达到了 96,700 条每秒。...实验九:实验七的基础上,使用 In-Memory Databases 数据库定义在内存中(除非有特殊用途,否则还是建议乖乖地定义磁盘上), #define DATABASE ":memory:" 输出如下...类似的问题也提过,链接为: https://stackoverflow.com/questions/784173/what-are-the-performance-characteristics-of-sqlite-with-very-large-database-files

2.8K20

寻找链表中环的入口节点

获取该有环链表的环入口节点(即:节点8) 链表中是否有环 首先,我们需要确保链表中是否包含一个环,在上篇文章(获取链表中倒数第K个节点)中我们用双指针的思路解决了问题,那么,我们也尝试下能否用双指针来解决这个问题...定义两个指针,从链表的头节点出发 第一个指针每次走一步,第二个指针每次走两步 走得快的指针追上了走得慢的指针,那么链表中就包含环 走得快的指针到了链表的末尾都没有追上第一个指针,那么链表就不包含环 IMG_C6505EF145D3...在前面提到的判断一个链表中是否有环时用到了一快一慢两个指针。如果两个指针相遇,则表明链表中存在环。...指针指向判断链表中有环时的相遇节点 p1指针继续向前移动,边移动边计数 p1指针与p2指针再次相遇时,即可得到环中节点数量 IMG_584FEB598A64-1 实现代码 通过上面的分析,我们已经得到了解决问题的思路...是神奇的程序员,一位前端开发工程师。 如果你对感兴趣,请移步的个人网站,进一步了解。

84220

Cortex-M中特别实用的DWT计数器

通过编程它们,就可以让它们计数器溢出时发出事件(以跟踪数据包的形式)。...最典型地,就是使用 CYCCNT寄存器来测量执行某个任务所花的周期数,这也可以用作时间基准相关的目的(操作系统中统计 CPU使用率可以用到它)。...Cortex-M中的DWT Cortex-M里面有一个外设叫DWT(Data Watchpoint and Trace),是用于系统调试及跟踪, 它有一个32位的寄存器叫CYCCNT,它是一个向上的计数器...stop_timer(); //stop timer numCycles = getCycles(); //read number of cycles ... } 示例2: #define...如涉及作品版权问题,请联系进行删除。 ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

41920

Redis系列——8.SDS

因为传统的C语言字符串符合ASCII编码,而他的特点是零则止,所以当读一个字符串的时候,只要遇到'\0',就认为到达了末尾。...这个问题就来了,如果保存的是图片或视频等二进制文件,就会被强行截断,那么数据就不完整了。...那现在不能通过零则止来判断是否这个字符串读完了,但是现在可以通过len与buf[]数组的长度比较,如果len+1等于buf的长度,就说明这个字符串读完了。...因为SDS表头的free成员记录着buf字符数据中未使用的数量,所以,进行append命令的时候,先判断free是否够用,如果够用,就直接添加字符,如果不够用,就先进行内存扩展,再进行添加字符串。...(void*) (s-(sizeof(struct sdshdr))); //获取表头地址 newlen = (len+addlen); //扩展后的新长度 //空间预分配 //#define

39520

Kubernetes 问题定位技巧:分析 ExitCode

使用 kubectl describe pod 查看异常的 pod 的状态,容器列表里看 State 字段,其中 ExitCode 即程序退出时的状态码,正常退出时为0。...[exitcode-pod] 退出状态码的区间 必须在 0-255 之间 0 表示正常退出 外界中断将程序退出的时候状态码区间 129-255,(操作系统给程序发送中断信号,比如 kill -9 是...0-255 之间,例如: exit(-1),这时会自动做一个转换,最终呈现的状态码还是会在 0-255 之间。...当指定的退出时状态码为负数,那么转换公式如下: 256 - (|code| % 256) 当指定的退出时状态码为正数,那么转换公式如下: code % 256 常见异常状态码 137 此状态码一般是因为 pod 中容器内存达到了它的资源限制...Stop process SIGTSTP 18,20,24 Stop Stop typed at terminal SIGTTIN 21,21,26 Stop Terminal

2.5K32

Kubernetes 问题定位技巧:分析 ExitCode

使用 kubectl describe pod 查看异常的 pod 的状态,容器列表里看 State 字段,其中 ExitCode 即程序退出时的状态码,正常退出时为0。...退出状态码的区间 必须在 0-255 之间 0 表示正常退出 外界中断将程序退出的时候状态码区间 129-255,(操作系统给程序发送中断信号,比如 kill -9 是 SIGKILL,ctrl+c...exit(-1),这时会自动做一个转换,最终呈现的状态码还是会在 0-255 之间。...那么转换公式如下: 256 - (|code| % 256) 当指定的退出时状态码为正数,那么转换公式如下: code % 256 常见异常状态码 137 此状态码一般是因为 pod 中容器内存达到了它的资源限制...Stop process SIGTSTP 18,20,24 Stop Stop typed at terminal SIGTTIN 21,21,26 Stop Terminal

2.3K20

对话贤微: 一家国产Arm服务器大芯片初创公司的底气

从国产化的角度出发,认为国内需要走一条符合高性能、通用市场需求的芯片产品道路,同时过去英特尔实现的x86替换老架构,让总结了服务器变革的源动力,认为这是二十年一的良机;从合伙人的角度出发,他深度推动和参与了...、贤COO姬信伟,他是英特尔多年的老搭档,他担任过Arm中国服务器市场的负责人,也曾是ARM最重要的生态公司Linaro的副总裁、还担任过华为美研所和处理器研究部的总监。...首先当下出现了一个二十年一的架构切换机会窗口,这是格局即将变革的节点。...彭亮:首先这是一个解决特定问题的技术,这个技术并不是今天才有的,已存在多年,业界已经采用这种技术用于解决例如单芯片规模、算力、良率、异构计算等问题,Chiplet芯片的设计交付和量产本身是个成熟方案,而在这方面我们过去做过多代...但现在,一个全新的机会摆在Arm和贤微面前,接下来就让我们看他们如何运筹帷幄。让静待一个革命性时代的到来。

62110

超轻量级网红软件定时器multi_timer(51+stm32双平台实战)

:"可以只用一个定时器,用计数器+标志位的方式也可以COPY出N个定时器呀,资源少也阻挡不了对它的充分利用"。...MCU与它建立通信用,还有一个用途就是以后移植一些开源项目,希望现在低端一点的平台上验证(如果低端跑不了就直接上能跑的),后面再在高端点的平台上实践,有时间有条件也会多在别的平台上跑跑,这样相当于积累了多个平台的开发经验...最终程序按照的设计思路完美运行!这里相当于带大家重新复习了下51单片机平台的基本使用。...实战演练2:小熊派开发板上实战 关于小熊派,这是一个基于stm32的网红物联网开发平台,昨天收到王总给我赠送的板子以后就写了相关的评测,大家可以点击下面链接看: 网红物联网开发板小熊派使用评测 ?...公众号粉丝福利时刻 这里给大家申请到了福利,本公众号读者购买小熊派开发板可享受9折优惠,有需要的朋友可联系获取优惠码,本福利长期有效。

2K10

【译文】epoll() 3步搞定

必备知识 本教程假定您熟悉Linux,C的语法以及文件描述符类UNIX系统中的使用。 开始 为本教程创建一个新的工作目录,这是我们正在使用的Makefile。...第一个示例使用epoll_create1()创建了一个文件描述符,这是强大的内核提供给我们的新epoll实例。尽管现在它还不能做任何事情,但我们仍应确保程序终止之前将其清理干净。...在这里添加了一些新变量来支持和表达在做什么。还添加了一个while循环,该循环将持续从正在监视的文件描述符中读取数据,直到其中一个数据说“stop”为止。...Read 'stop ' 首先,给了一个适合缓冲区的短字符串,它可以正常工作,并继续迭代循环。...希望这些可以帮助您了解如何使用epoll()。如果您有任何问题,疑问或反馈,不胜感激!

57220

有很多种方法来解决八数码

大家好,又见面了,是全栈君 AI实验报告,改变了重定向。希望通过翼牛。 很纳闷ida*然而,如何快速的双搜索。还找到了灵感不在位的基础上A*和Ida*来到慢。特别ida* 搜索31步骤甚至十几秒。...八数码问题 八数码问题也称为九宫问题3×3的棋盘,摆有八个棋子,每一个棋子上标有1至8的某一数字。不同棋子上标的数字不同样。棋盘上另一个空格,与空格相邻的棋子能够移到空格中。...要求解决的问题是:给出一个初始状态和一个目标状态。找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题一个状态就是棋子棋盘上的一种摆法。棋子移动后。状态就会发生改变。...首先将每一个状态,利用状态压缩的思想装换成两个int型变量,然后对于close表里的所有状态则採取一次所有初始化,再利用状态的进行排序,排序完毕后之后的查询close表过程中就能够使用二分的思想,降低操作...当搜到同一个节点时。搜索结束,将两边的步数加起来输出。在这里一个节点里,用一个值标记,此节点是由哪个状态訪问的,故仅仅需用一个队列交替扩展。

67620

将JZ2440调试串口改成COM2

如下图所示: 其串口工作原理也是一样的,只是接口不同而已,这里也有一个图示: 搞懂了串口工作时的连线图之后就可以在此基础上进行修改,以便解决实际使用中遇到的问题。...问题马上就来了,在用JZ2440开发时,串口是SecureCRT上输出信息的。输出信息时,偶尔会使电脑蓝屏。...由于使用习惯的问题,随后的系统从XP升级到了Win7 ,Win8 ,Win8.1 .使用JZ2440时,又频繁地出现了蓝屏问题,并且这个PL2303的驱动就像DNW的驱动一样,特别难安装。...细细想来,这个问题的并不是由于JZ2440板子的问题,只是因为系统原因, 对PL2303芯片的支持不是很到位。为了解决这个问题想弃用板子自带的调试串口。...仿照原有电路,到了下面的几个设备: 有了这两个设备不就成了?另外一路调试串口呼之欲出。

81920

移动端arm cpu优化学习笔记第3弹--绑定cpu(cpu affinity)

个人理解就是如果进程没有绑定在一个cpu上,那么当该进程切换cpu的时候,新cpu 的 cache上并没有之前cpu cache上缓存的数据,就会导致cache miss,然后需要从内存加载数据,然后过一段时间切回去原来...刚开始理解代码的时候,谷歌了一下sched_setaffinity这个系统调用,搜到了android源码里的声明头文件: https://android.googlesource.com/platform...32, // 也就是32个32bit的变量,因为一个32bit就能表示32个cpu // 而手机一般也就8个cpu,所以感觉其实一个unsigned long变量就足够了 // 也做实验验证了,后面实验部分会再详细说明...__bits变量对应位置 // 其实从CPU_SET宏的实现也可以看到,尽管__bits数组长度是32, // 但是只会访问到第0个变量,因为 i < 32, // 所以为什么觉得直接一个...根据实验结果可以看到,对比绑定大核和小核,确实绑定大核上运行会比绑定小核运行速度要更快,不过这里大核是显式绑定6和7,但是多数情况下会失败,绑到了4和5,不知道是不是用户自己绑定有什么限制,如果系统调度就可以跑到

1.8K00

【AI移动端算法优化】四,移动端arm cpu优化学习笔记之绑定cpu(cpu affinity)

个人理解就是如果进程没有绑定在一个cpu上,那么当该进程切换cpu的时候,新cpu 的 cache上并没有之前cpu cache上缓存的数据,就会导致cache miss,然后需要从内存加载数据,然后过一段时间切回去原来...刚开始理解代码的时候,谷歌了一下sched_setaffinity这个系统调用,搜到了android源码里的声明头文件: https://android.googlesource.com/platform...32, // 也就是32个32bit的变量,因为一个32bit就能表示32个cpu // 而手机一般也就8个cpu,所以感觉其实一个unsigned long变量就足够了 // 也做实验验证了,后面实验部分会再详细说明...__bits变量对应位置 // 其实从CPU_SET宏的实现也可以看到,尽管__bits数组长度是32, // 但是只会访问到第0个变量,因为 i < 32, // 所以为什么觉得直接一个...根据实验结果可以看到,对比绑定大核和小核,确实绑定大核上运行会比绑定小核运行速度要更快,不过这里大核是显式绑定6和7,但是多数情况下会失败,绑到了4和5,不知道是不是用户自己绑定有什么限制,如果系统调度就可以跑到

2K20
领券