
编程
AllenSun-1990
上海先楫半导体资深FAE工程师,不定期更新HPMicro高性能MCU应用案例。
展开
-
使用开源软件Inno Setup制作软件安装包
本文主要介绍了使用Inno Setup对工程的可执行文件进行打包的流程。原创 2022-11-10 11:20:50 · 1307 阅读 · 0 评论 -
Algorithm:接雨水
算法:接雨水原创 2022-04-28 19:48:49 · 156 阅读 · 0 评论 -
Algorithm:缺失的第一个正数
算法:求缺失的第一个正数原创 2022-04-27 09:39:11 · 141 阅读 · 0 评论 -
cmake:文件操作命令
camke文件操作命令原创 2022-02-25 13:39:09 · 366 阅读 · 0 评论 -
Algorithm:K 个一组翻转链表
给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。原创 2021-12-22 08:59:53 · 70 阅读 · 0 评论 -
Algorithm:整数转罗马数字
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+II。通常...原创 2021-06-01 21:51:07 · 135 阅读 · 0 评论 -
[C/C++] 断言和异常
assert: 断言assert() 会对表达式expression进行检测:如果expression的结果为 0(条件不成立),那么断言失败,表明程序出错,assert() 会向标准输出设备(一般是显示器)打印一条错误信息,并调用 abort() 函数终止程序的执行。 如果expression的结果为非 0(条件成立),那么断言成功,表明程序正确,assert() 不进行任何操作。try{} catch{} : 异常...原创 2021-05-09 08:16:50 · 553 阅读 · 0 评论 -
C语言中volatile关键字的作用
一.前言 编译器优化介绍: 由于内存访问速度远不及CPU处理速度,为提高机器整体性能,1)在硬件上:引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。2)软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变量缓存到寄存器。由于访问寄存器要比访问内存单元快的多,编译器在存取变量时,为提高存取速度,编译器优化有时..转载 2021-05-09 07:53:24 · 1992 阅读 · 0 评论 -
Algorithm:数组中出现次数超过一半的数字
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 64M,其他语言128M热度指数:693525本题知识点:哈希数组题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。示例1输入[1,2,3,2,2,2,5,4,2]返回值2class Solution {public: i...原创 2021-05-06 16:56:25 · 109 阅读 · 0 评论 -
Algorithm:找到字符串的最长无重复字符子串
题目描述给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。示例1输入[2,3,4,5]返回值4示例2输入[2,2,3,4,3]返回值3备注:1 \leq n \leq 10^51≤n≤105解题中:class Solution {public: /** * * @param arr int整型vector the array * @return int整原创 2021-04-12 22:18:23 · 215 阅读 · 1 评论 -
Algorithm:回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例 1:输入:x = 121输出:true示例2:输入:x = -121输出:false解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入:x = 10输出:false解释:从右向左读, 为 01 。因此它不是一个回文数...原创 2021-03-26 21:10:53 · 215 阅读 · 0 评论 -
pfctl
PF防火墙的配置命令补充说明pfctl命令是PF防火墙的配置命令,PF防火墙( 全称:Packet Filter )是UNIX LIKE系统上进行TCP/ip流量过滤和网络地址转换的软件系统。PF同样也能提供TCP/IP流量的整形和控制,并且提供带宽控制和数据包优先集控制。PF最早是由Daniel Hartmeier开发的,现在的开发和维护由Daniel和openBSD小组的其他成员负责。PF防火墙的功能很多,本站只列举一些基本配置。激活要激活pf并且使它在启动时调用配置文件,编辑/e.转载 2020-12-10 16:33:47 · 655 阅读 · 0 评论 -
C++:判断链表是否有环
判断给定的链表中是否有环。如果有环则返回true,否则返回false。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head)原创 2020-12-03 23:01:16 · 1614 阅读 · 0 评论 -
C++:最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。示例1输入[4,5,1,6,2,7,3,8],4返回值[1,2,3,4]class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { vector<int> res.原创 2020-12-03 22:07:56 · 613 阅读 · 0 评论 -
C++:lambda表达式
Lambda函数是C++ 11中引入的现代C++的一个直观概念。使用lambda表达式可编写内嵌的匿名函数。而不必编写独立函数或函数对象,使代码更容易阅读和理解。Lambda语法lambda表达式以方括号[]开始(这称为lambda引入符),其后是花括号{},其中包含lambda表达式体。lambda表达式被赋予自动类型变量basicLambda。第二行使用普通的函数调用语法执行lambda表达式。autobasicLambda = [ ] { cout << "Hello fro.原创 2020-07-26 10:32:35 · 649 阅读 · 0 评论 -
C++:开发log文件记录功能
log.cpp#include "log.h"std::ofstream outstream("/home/kent/source/log/Data_Log.txt", std::ios::out);log.h#ifndef _LOG_H#define _LOG_H#include <iostream>#include <fstream>extern std::ofstream outstream;#endifmain.cpp..原创 2020-07-25 18:09:01 · 499 阅读 · 0 评论 -
C++:regex正则表达式
正则表达式在<regex>头文件中定义,是标准库中的一个强大工具。正则表达式是一种用于字符串处理的微型语言。尽管一开始看上去比较复杂,但一旦了解这种语言,字符串的处理就会简单得多。正则表达式适用于一些与字符串相关的操作。验证:检测输入字符串是否格式正确。 决策:判断输入表示那种字符串。 解析:从输入字符串中提取信息。 转换:搜索子字符串,并将子字符串替换为新的格式化的子字符串。 遍历:搜索所有的子字符串。 符号化:根据一组分隔符将字符串分解为多个子字符串。ECMAScript:.原创 2020-07-22 22:45:59 · 3348 阅读 · 0 评论 -
repo工具使用技巧
版本仓库代码回退 :repo init -u buic-scm:gm/manifest -b refs/tags/gm-imx8-phantom-gm_3.20.25.4.02_153.00_devel_stabi -g all -m manifest.xmlrepo sync -j4原创 2020-07-20 17:52:17 · 569 阅读 · 0 评论 -
Dev开发经验总结(持续更新)
要想少出问题,就要多测试。多写test case。尽量覆盖所有的condition。原创 2020-07-20 10:18:39 · 747 阅读 · 0 评论 -
C/C++:数组名&
#pragma GCC diagnostic ignored "-Wvla"char message[Size + 3];#pragma GCC diagnostic popmessage[0] = UPDATE_TO_VUC;int temp = (uint16_t)strtoll(id.c_str(), nullptr, 16);message[1] = (uint8_t)((temp >> 8) & 0xFF);message[2] = (uint8_t)(temp .原创 2020-07-16 18:56:28 · 267 阅读 · 0 评论 -
基于开发板的文件系统制作根文件系统 rootfs.img
最近在开发一个项目,这个项目之前一直是用友坚的UT4418的板子。因为没货,并且由于UT4418的Linux系统开发QT的资料比较少,就用了飞凌的OK4418的板子。这两款芯片都是用的S5P4418的CPU。后来使用飞凌OK4418的板子测试,发现串口数据总是上不来。于是又切换到UT4418的板子上面开发。两个板子其实工具链还有QT的lib都是通用的。所以,只要把UT4418板子上面的文件和飞凌的...原创 2020-02-14 09:53:25 · 661 阅读 · 0 评论 -
C++:最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindromic-subs...原创 2019-12-10 17:33:11 · 457 阅读 · 0 评论 -
c++ 类名和enum时重复时要在类名前加class::
c++ 类名和enum时重复时要在类名前加class::一些不好的习惯都是用小写,但又没有区分开token,看看代码再说,下面的代码是我在测试polymorphism时写的一部分,怎么也查不出,最后主意到下面红色标志出来的语句,他们(animal)重复了,要区分开来。重复名的有很多情况,以后遇见再在一起总结,先记录下来。#include <iostream> ...转载 2019-12-06 14:12:31 · 450 阅读 · 0 评论 -
C++:编译不同的函数体
只编译.cpp不要添加额外的.h,使用相同的.h。不同的实现。意思是include directory相同,源文件不同。原创 2019-12-03 11:27:42 · 139 阅读 · 0 评论 -
class类中静态变量和静态方法使用介绍
变量或函数如果依赖于类的特定实例,那么就是实例变量或实例函数。如果变量由类的所有实例共享,则应该声明该变量为静态变量。如果某个函数不依赖于特定实例,则它应被声明为静态函数。通过类名(非对象名)来引用静态变量和静态函数,这样可增加代码的可读行,减少错误。因为构造函数总是用来构建特定对象,所以构造函数是实例函数。在实例函数中可以调用静态变量或静态函数,但是不能在静态函数中调用实例变量或实例函数...原创 2019-10-24 13:57:47 · 1895 阅读 · 0 评论 -
STM32 GPIO触发中断
#define KEY1_INT_GPIO_PORT GPIOA#define KEY1_INT_GPIO_CLK (RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO)#define KEY1_INT_GPIO_PIN GPIO_Pin_0#define KEY1_INT_EXTI_PORTSOURCE ...原创 2019-10-19 18:52:12 · 5392 阅读 · 1 评论 -
STM32开发:指南者ADC采样接线图
使用指南者的开发板做ADC采样。开始不清楚是怎么接线的。后来才明白,输入端是VR,用哪条channel检测,就将这个管脚和VR连接。检测电压要和开发板的GND端连接。说明ADC内部本身是和GND连接的。这个板子的ADC采样的范围是0V~3.3V。接线图如下,如果连接GND的话,ADC的电压值就是0V。连接3V3的管脚的话,测出来的值就是3.3V。...原创 2019-10-17 08:02:42 · 5609 阅读 · 0 评论 -
C++ :使用抽象类提供对外接口
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩)2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义)注意包含纯虚函数的抽象类无法实例化。使用举例:namesp...原创 2019-10-16 14:26:18 · 1961 阅读 · 0 评论 -
软件开发技巧:程序调试方法
1. 渐进式程序调试方法,就是对于一段程序。如果编译出bug。就将可疑的代码段都注释掉。使程序编译通过。程序编译通过以后,再逐渐放开注释的代码。2. 多打印log。在创建类的时候可能会出问题,在构造函数里面打印log。...原创 2019-06-04 23:57:57 · 741 阅读 · 0 评论 -
基于链表的方法实现静态内存管理
注:这篇博客主要讲了我用C语言实现静态内存池管理的算法和思想。首先建立这些内存块的结构体索引。然后用malloc申请我们需要管理的内存块。在申请好的内存池里,进行内存使用。申请用户需要的内存,用的是轮询的方式,根据内存块的大小在几种不同的内存块中依次查找是否被使用的标志。释放内存就是改变每块内存的flag在程序结束后,free全部的内存,销毁内存池。我暂时还想不到更快的方法来申请内存,原创 2017-05-30 20:00:05 · 1182 阅读 · 0 评论 -
gcc编译器 __attribute__ ((section(".")))
提到section,就得说RO RI ZI了,在ARM编译器编译之后,代码被划分为不同的段,RO Section(ReadOnly)中存放代码段和常量,RW Section(ReadWrite)中存放可读写静态变量和全局变量,ZI Section(ZeroInit)是存放在RW段中初始化为0的变量。默认情况下,编译器将其生成的目标代码存放在.data 和.bss 段中。section 属性允许指定原创 2017-06-02 11:22:00 · 7799 阅读 · 0 评论 -
Linux线程创建
#include #include #include #include int * thread(void *arg){while(1){printf("It is the thread!\n");sleep(1);} return NULL;}int main(){pthread_t id;prin原创 2017-06-15 20:39:26 · 311 阅读 · 0 评论 -
GNU C attribute section的一个使用例子
1.前言: 在内核中我们经常遇到"section"类似的字眼.把相关的CPU或设备信息存放在某个section里面.然后对这个section进行遍历,判断这个section里面是否有我们自己想要的信息.这是一种不错的编译思想.下面整理了一个示例来加固下这种思想的学习.2.示例: car.h [html] view plain co转载 2017-05-31 16:54:57 · 792 阅读 · 0 评论 -
数据结构(C语言描述)
对于数据结构的理解:数据结构是定义不同的数据类型,来存储信息。或者利用这些特殊数据结构的特点来实现相应的功能。我们在使用数据结构时都必须对其进行初始化赋值。因为其结构的特殊性,所以看起来赋值、删除等操作看起来要复杂些。不过还是有章可循的,那就是指针。只要掌握了指针的操作和数据结点的数据结构,了解数据结构的相关知识、利用数据结构来解决问题,就会变得简单。常用的数据结构:数组原创 2017-05-31 11:33:44 · 3773 阅读 · 0 评论 -
C语言实现计算一年中过了多少天
#include #include int daysofmonth(int year, int month){switch(month){case 1:if(month == 1)return 31;case 2:if(leapornot(year))return 29;return 28;case 3:return 31;原创 2017-05-27 12:00:06 · 3432 阅读 · 0 评论 -
Arduino控制motorshield
/***使用arduino和motor shield测试通过。确保A1、A2、ENA、GND连接正确,最好在同一排。电源模块的电压在工作范围内。***/#define motor1pin1 7 //定义IN1引脚#define motor1pin2 8原创 2017-05-15 21:43:03 · 2644 阅读 · 0 评论 -
Weak & Strong Alias(强弱别名)
语句原型:void smc_timing_init(int cs) __attribute__((weak, alias("_smc_timing_init")));总结:_smc_timing_init是smc_timing_init的别名,具有弱属性。当smc_timing_init未定义,调用smc_timing_init时执行_smc_timing_init。当smc_timi原创 2017-04-06 15:48:30 · 1572 阅读 · 1 评论 -
union共用体
共用体在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体。注:在某些书籍中可能称之为“联合体”,但是“共用体”更能反映该类型在内存的特点。一般定义形式union 共用体名{成员表列转载 2015-10-28 11:05:27 · 1046 阅读 · 0 评论 -
函数指针
函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做转载 2017-01-05 16:08:22 · 387 阅读 · 0 评论 -
sizeof()的使用及各种数据类型的字节大小
1、什么是sizeof 首先看一下sizeof在msdn上的定义: The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type (including aggregate types). This keyword returns a valu转载 2016-11-13 17:15:03 · 1272 阅读 · 0 评论