C语言
Dezeming
研究方向:数学原理,GPU加速技术,数据结构与算法,机器学习,深度学习神经网络,3D可视化,计算机图形学,图像处理,计算机视觉,Qt程序设计,C++编程
曾学习和研究过:Java,51,stm32,msp430等单片机,嵌入式ARM,DSP,模拟/数字电路,树莓派
展开
-
An invalid parameter was passed to a function that considers invalid parameters fatal.
使用fopen的时候,遇到这个错误。FILE *fp = fopen(filename, "rw");意思是这个fopen函数非常看重传入参数的合法性,如果不合法,就直接报错。所以一定是写错了。比如我第二个参数写为了"rw",不能既读入又读出。...原创 2021-11-30 16:05:34 · 1512 阅读 · 0 评论 -
使用OpenMP进行多线程加速for循环
OpenMP是多线程优化库,可以对for循环有很好的加速作用。开发环境:首先在项目属性里设置支持OpenMP:然后程序中加入头文件:#include <omp.h>并在需要使用的地方写入:float renderFrame() { omp_set_num_threads(20); //设置线程的个数 double start = omp_get_wtime();//获取起始时间 #pragma omp parallel for for (int i =原创 2020-11-25 16:06:50 · 6190 阅读 · 4 评论 -
VS2015与dll库和lib库的生成和管理
本节内容将是一个较长篇的内容,研究如何实现生成自己的dll库以及其中的一些细节。目录最直接的方法——新建dll库工程间接方案——修改已有工程定义变量到库中定义包含类的DLL库最直接的方法——新建dll库工程然后就可以生成了,鉴于后续操作和非直接方案一模一样,所以这里就不再赘述,现在我们要了解的是,如何把以前构建好的工程修改为dll库生成工程。间接方案——修改已有工程我们进入一个工程目录里,注意该工程的目录:黄圈里表示解决方案名,红圈里表示解决方案里的其中一原创 2020-11-04 20:57:42 · 1594 阅读 · 0 评论 -
C++运行时库的判定
先上代码:#include <iostream>#include <typeinfo>using namespace std;class Base {};class Derived1 :public Base {};class Derived2 :public Base {};int main(void) { Base b; const type_info &info1 = typeid(b); if (info1 == typeid(Base原创 2020-08-27 22:55:38 · 1612 阅读 · 0 评论 -
ARM的PWM定时器1
PWM定时器是最常用的定时器,包括51单片机里面的简单定时器也是PWM定时器。PWM定时器主要作用是产生PWM波形,原理就是一个定时器(计数器)。以三星公司的S5PV210为例,现在阐述一下ARM的PWM定时器。这个CPU有五个PWM定时器,0,1,2,3各自对应一个外部GPIO,输出PWM信号,timer4没有对应的GPIO,这个主要用来作为产生内部中断来使用。它们的时钟来源是PCLK_...原创 2019-11-10 19:16:18 · 6245 阅读 · 0 评论 -
指针游戏2 传递地址的指针
#include <stdio.h>int a = 9, b = 10;void changeaa(int *asd) { asd = &a;}int main(){ int* aa; int* bb; changea(aa); printf(" %d\n",*aa); getchar(); return 0;}//错误,因为*aa...原创 2019-03-29 08:53:42 · 7109 阅读 · 0 评论 -
指针游戏1 最简单的指针游戏
这篇文章只是一个引子,为了下一篇文章的 “如何在子函数中改变指针的指向” 的问题做铺垫。所以这些基本问题都不会解释多少,如果有问题的话欢迎留言。#include <stdio.h>int a = 9, b = 10;void changea(int *dst) { *dst = 7;}int main(){ int* aa...原创 2019-03-28 22:58:28 · 8198 阅读 · 1 评论 -
CUDA的纹理内存讲解
CUDA的纹理内存讲解,来自翻译和补充官方文档 CUDA programming GuideTexture and Surface MemoryCUDA支持供GPU处理图形用的纹理硬件和表面(surface)内存,但是只支持一部分功能。从纹理和表面内存中读取数据可以得到很多好处(以后再说)。有两个不同的API可以来获取纹理内存和表面内存:1.纹理参考API,支持所有设备。2.纹理对象...原创 2019-03-28 21:03:34 · 7131 阅读 · 0 评论 -
CUDA Handbook 补充 CPU和GPU硬件架构4
SM(streaming multiprocessor) Mapped pinned memory 页锁定内存,分配在主机内存但是映射到GPU,所以可以直接从GPU上访问。 缓存侦测cache snoops:当特定数据由多个缓存共享,并且处理器修改共享数据的值时,更改必须传播到具有数据副本的所有其他缓存,把所有存有该数据的缓存都更改。此更改传播可防止系统违...原创 2019-03-31 23:00:41 · 6074 阅读 · 0 评论 -
C语言 之编译器优化
C语言的编译器会对变量和代码进行一定的优化,我们看下面这个例子。int a,b,c;a=1;b=a;c=b; 这个程序正常运行的时候会这样子:先把a指向的内存空间内放入1 再把a指向的内存空间里的数读出来放到b指向的内存空间, 最后再把b指向的内存空间里的数读出来放到c指向的内存空间里。然而编译器要对这个程序进行一定原创 2020-03-23 20:15:16 · 9876 阅读 · 0 评论 -
C语言 之建立动态链接库
下面我们建立一个动态链接库。回顾上篇文章讲的建立静态链接库,我们把这几个文件丢到一个新的目录下:makefile tiaoshen.c mmc.h xu.c你也可以自己建立新的文件,这里不再赘述。makefile文件中改成all:gcc tiaoshen.c -o tiaoshen.o -c -fPICgcc -o libtiaoshen.原创 2020-03-23 20:14:38 · 7000 阅读 · 0 评论 -
C语言 之建立静态链接库
下面说一下建立静态链接库的方法各个C语言编程软件都有它的方法,比如建立一个工程来共享文件,这就比较容易和简单了,现在我们选择使用难一点的linux系统,探究在linux系统下的建立静态链接库的方法。首先,在linux系统我们在一个文件夹目录里面来建立一个 .h 头文件和一个 .c 文件,(比如我建立tiaoshen.c 和 mmc.h)然后打开它们。在 .c 头文件里面我们写上自己创作...原创 2019-11-10 19:14:52 · 5421 阅读 · 0 评论 -
C语言 之递归函数
今天来总结一下关于递归函数的使用方面的问题。 递归函数就是在函数使用的时候自己调用自己,层层调用,来实现你想要的功能。 有两个最常用的例子,我们来写一下。 (1)计算阶乘#include <stdio.h>int factorial(int n); // 函数声明(阶乘)int main(void){int a = 5;printf("%...原创 2019-11-10 19:14:44 · 6227 阅读 · 0 评论 -
C语言之 认识可变参数
printf()的原型是int printf(const char *fmt, ...);后面三个 . 表示C语言的变参。 那么什么是变参?它有什么功能和作用呢? 变参就是参数不确定,可以随意根据需要来改变的参数。 我们先举一个固定参数列表的函数:int swap(int a,int b){ int c; c=a; a=b; b=c;...原创 2019-11-10 19:13:46 · 4669 阅读 · 0 评论