![](https://img-blog.csdnimg.cn/20191017092003101.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
编程语言
文章平均质量分 88
li_wen01
liwen01
展开
-
嵌入式程序大小控制方法介绍
嵌入式设备flash空间有限,为节省成本,一般程序的存储空间都会非常小,这就需要我们将程序中不需要的内容清除,或者是直接对程序进行压缩处理,以达到减小执行程序大小的目的。控制嵌入式程序大小有下面几种方法有: 1.使用strip命令清除符号表信息 2.使用objcopy生成特定的格式文件 3.使用tar zip等命令对程序进行压缩处理在实际应用中发现下面两个问题点: 1.为什么静态库使用strip之后不能再被成功链接? 2.为什么有些时候objcopy生成的bin...............原创 2020-12-10 18:16:55 · 1758 阅读 · 1 评论 -
面向对象编程语言(C++)复习笔记(3)——类与对象
一,类的概念及封装1.什么是封装第一层含义:封装是面向对象程序设计最基本的特性。把数据(属性)和函数(方法)合成一个整体,这在计算机世界中是用类和对象实现的。(把属性和方法进行封装)第二层含义:把客观事物封装成抽象的类,并且类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息的隐藏。(对属性和方法进行访问控制)2.类的访问控制 在C++中可以对类的属性和方法定义访......原创 2020-04-07 20:23:41 · 1384 阅读 · 1 评论 -
面向对象编程语言(C++)复习笔记(4)——类的继承,封装,多态
前言面向对象的三个基本特征是:继承、封装、多态。其中,封装可以隐藏实现细节,使得代码模块化; 继承可以扩展已存在的代码模块(类),它们的目的都是为了——代码重用; 多态则是为了实现另一个目的——接口重用;继承继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。其继承的过程,就是从一般到特殊的过程。通过继承创建的新类称为“子类”............原创 2020-04-07 20:24:52 · 970 阅读 · 1 评论 -
内存越界问题
最近在做视频编码的工作,在PC上调试没有问题,但是移植到嵌入式ARM设备上的时候就出现了内存越界问题。起初也不知道是内存越界的问题,只是程序运行会出现非常异常的情况。在PC机上做测试的时候,在内存映射的时候reqbufs.count 的值大于2 进行数据采集的时候,采集到的图片就会出现有的图片是空的,但是运行的时候也没有出现其他的异常或是错误警告,所以这个问题当时就没有去定位,后来将该程序.........原创 2018-04-24 11:04:31 · 8677 阅读 · 1 评论 -
C语言编译过程详解
前言C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。编写hello world C程序:// hello.c#include <stdio.h>int main(){ printf("hello world!\n");}编译过程只需:$ gcc hello.c # 编译$ ./...转载 2019-03-07 23:02:56 · 461 阅读 · 1 评论 -
Linux内存管理内存映射以及通过反汇编定位内存错误问题
提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的!我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。内存的使用时程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,.........转载 2019-03-11 18:00:40 · 4101 阅读 · 1 评论 -
shell脚本编程:sed命令编辑文本
red是一种在在线编辑器。它一次处理一行内容。工作中遇到一个客户的需求,默认wifi的ssid命名需要使用MAC地址的后6位,wifi配置信息在hostapd.conf文件中。最终需要实现的功能就是,flash 第一次上电,读取网卡的MAC地址,提取MAC地址的后六位数字,将这留位数值写到hostapd.conf文件的对应位置。shell实现命令如下:MAC=$(cat /sys/clas...原创 2018-04-24 11:01:32 · 2099 阅读 · 1 评论 -
C++ static_cast与dynamic_cast转换 最简单的理解
3.1static_cast用法:static_cast< type-id > ( exdivssion )该运算符把exdivssion转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类和子类之间指针或引用的转换。 进行上行转换(把子类的指针或引用转换成基类表示)是安全的; 进行下行转换(把基类指针或引用...转载 2018-08-02 16:06:27 · 1219 阅读 · 1 评论 -
C 与 C++ 回调函数的不同应用
回调函数:假设 A是回调函数,B是调用者,B参数里一个是指向A的函数指针,即回调A,同时另外的参数传递给A作为参数。A可以是多个函数的统一指向,只要函数参数个数相同即可。那么:B调用A,A也有参数,有参数就要赋值才行。所以B函数内部给A参数赋值。B调用A,A又利用了B给的参数。A就是回调函数。B就是调用者。C中回调函数的应用:int* func(int params, ...); //这就是指...原创 2018-02-24 18:24:24 · 982 阅读 · 1 评论 -
shell 编程 for 循环详解及应用实例
与其他编程语言类似,Shell支持for循环。for循环一般格式为:for 变量 in 列表do command1 command2 ... commandNdone列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。例如,顺序输出当前列表中的数字:for ...原创 2018-02-24 15:21:57 · 2159 阅读 · 0 评论 -
C++多态分析
多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。(重写有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态...原创 2017-08-05 21:15:46 · 543 阅读 · 0 评论 -
gcc, g++编译时消除特定警告的方法
在编译调试代码的时候,编译警告可以为我们定位到程序中的很多异常问题。gcc 编译器为我们提供了很多的编译选项:-Wall会打开一些很有用的警告选项,建议编译时加此选项。具体如下: -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts -Wimplicit...原创 2018-04-24 11:14:41 · 40479 阅读 · 2 评论 -
cmake 学习笔记
最大的Qt4程序群(KDE4)采用cmake作为构建系统Qt4的python绑定(pyside)采用了cmake作为构建系统开源的图像处理库 opencv 采用cmake 作为构建系统...看来不学习一下cmake是不行了,一点一点来吧,找个最简单的C程序,慢慢复杂化,试试看:例子一单个源文件 main.c例子二转载 2017-04-15 09:52:29 · 843 阅读 · 0 评论 -
linux 动态库 静态库原理分析
1.什么是库 在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类 linux下的库有两种:静态库和共享库(动态库)。动态通常用.so为后缀,静态用.a为后缀。例如:libhello......原创 2019-04-02 22:32:31 · 2024 阅读 · 1 评论