自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 c语言的关键字使用方式

volatile:使编译器不进行该变量的优化

2022-11-19 18:10:28 293 1

原创 基于STM32F103与FreeRTOS的自平衡小车实现

对于高精度的设备当然不允许有这种误差存在,于是I算法就是来解决这一问题,I算法会进行误差值的累加,但显而前面几次误差过大,我们得先忽略,不然I算法也无效,I算法是积分算法,累加之前的误差,加上一个合适的系数,这就会补偿前面那个临界误差来带的影响,这样我们的PID算法就差D算法了,D算法是为了解决当我们的无人机好好的飞着突然受到了一个强风吹那咋办,岂不会立马系统就变得晃动很大,因为P这时对于的差值很大,为了解决这一点,D算法微分就刚好能解决这一点,D算法积分算法是通过计算上一次偏差。这样我们就得到了速度。

2022-11-15 23:58:56 1837 3

原创 QT5如何移植到ARM板

这个前提是arm需要先移植好了tslib(上一篇有写如何移植tslib到arm板),当然交叉编译工具链也是必须先自己安装好了,当你的虚拟机ubuntu安装了交叉编译链(具体步骤百度一大堆)并且arm板移植好了tslib(上一篇有写),测试tslib没问题了,那么现在就可以来移植qt了。进入qt的下载界面,选择qt-everywhere-src-5.12.9下载即可得到qt的源码,接着配置一下源码。正题来了其实我们移植就是编译qt的源码,然后将源码传到arm板,再配置一下环境变量就行了,

2022-11-10 16:59:35 1450

原创 tslib移植到ARM板

相信大家移植的时候遇到到最多的问题就是找不到触摸设备而报错,然后一顿突突改了版本,噢,没用,哈哈,解决方法其实很简单,我猜你用的很可能是tslib1.4,多年入坑经验猜的,没事,解决方式来了,就三字,换高版本,这里以imx6ull开发板和tslib1.7(强力推荐)为例

2022-11-09 12:16:43 281

原创 库和头文件的关系

头文件是可读的文本,而库文件是一些不可读的二进制文件,头文件是起到函数,变量类型定义的作用,函数的具体实现在库里,变量的定义在.c文件里。编译器会根据头文件进入相关目录查找库中是否有实现。

2022-08-23 10:46:08 424

原创 c语言程序在内存中的分配

静态内存区,代码存储区,常量区。

2022-08-22 11:33:59 295

原创 c++粗浅认识

1.c++并非第一个面向对象的语言,而是第一个火起来的面向对象的语言:原因人们会一种语言后不愿意再去学另一种语言,c++之父就是依赖这一心理考虑,使c++完全兼容c,但因此也留下了c语言带来的病根,也因此可知c++并不是纯正的面向对象的语言,也支持c语言的面向过程的思想编程,但特殊的是c++支持泛型编程的思想,泛型编程思想与面向对象思想结合使用相得益彰。2.解决命名冲突的问题:使用预定义库加上std::两种省略std::前缀的方法:using namespace std; using std.

2022-05-09 18:36:15 264

原创 linux设备驱动开发常用API(含部分宏)

static int __init dht11_init(void){ printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__); return 0;}static void __exit dht11_exit(void){ printk("%s %s %d\n", __FILE__, __FUNCTION__, __LINE__);}module_init(dht11_init);module_exit(dht11_exit);.

2022-04-14 12:32:59 1107

原创 驱动程序的四种方式

阻塞/非阻塞简介阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。阻塞/非阻塞例程阻塞方式int fd;int data = 0;fd = open("/dev/xxx_dev", O_RDWR); /* 阻塞方式打开 */ret = read(fd, ..

2022-04-07 22:46:16 1156

原创 linux输入设备在应用层的多种读取方式

1).查询方式与休眠唤醒方式(非阻塞方式与阻塞方式)查询方式APP调用open函数时,传入“O_NONBLOCK”表示“非阻塞”。APP调用read函数读取数据时,如果驱动程序中有数据,那么APP的read函数会返回数据,否则也会立刻返回错误。休眠唤醒方式APP调用open函数时,不要传入“O_NONBLOCK”。APP调用read函数读取数据时,如果驱动程序中有数据,那么APP的read函数会返回数据;否则APP就会在内核态休眠,当有数据时驱动程序会把APP唤醒,read函数恢复执

2022-03-25 20:35:11 736

原创 linux输入设备-应用程序如何获取到id及evbit

linux中每一个输入设备都用一个struct input_dev来表示struct input_dev { const char *name; const char *phys; const char *uniq; struct input_id id; unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)]; unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//...

2022-03-24 22:34:13 1606 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除