- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 Keil:Undefined symbol ......(referred from......)
当报错文件是Cpp,调用的接口为C时就会出现,解决方法是在h文件中加入extern C{}
2025-03-08 16:30:21
117
转载 函数可重入性及编写规范
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。2)可重入函数:不为连续的调用持有静态数据。不返回指向静态数据的指针;所有数据都由函数的调用者提供。使用本地数据,
2021-02-24 15:06:29
627
转载 浅显易懂的实时操作系统和分时操作系统原理和区别
原文链接:https://blog.youkuaiyun.com/u013752202/article/details/53649047对于实时操作系统(RTOS)和非实时操作系统,你能分别列举出来多少?实时操作系统:uCOS/VxWorks/RTLinux非实时操作系统:Linux/Windows/OSX我也只能列举出来这么多了。重点不在这里,重点在于他们之间的区别,详见下图:在上面的图中右边的任务优先级高于左边的任务,先看实时操作系统的,当优先级更高的任务2就绪的时候,即便任务1正在运行中
2020-07-03 14:29:19
2304
原创 C++知识:vector容器和for里面冒号
vector<fucLIB > funcxx; for (fucLIB fun : protocol.funcxx) { funcxx.push_back(fun); }vector:一个封装了动态大小数组的顺序容器for里面冒号:自动遍历容器里面的元素,从第一个到最后一个...
2020-03-10 15:30:17
2261
原创 S5PV210 按键驱动源码、应用程序解析(重点:中断、休眠唤醒、定时器)
按键驱动是最简单的功能,一旦使用linux来做就需要做很多功课。anyway,逻辑层还是前年不变的。先贴上驱动层代码。/* * linux/drivers/char/mini210_buttons.c * * This program is free software; you can redistribute it and/or modify * it under the t...
2019-09-27 15:46:37
668
转载 【适用于MCU】PID算法完全讲解
原文链接:https://blog.youkuaiyun.com/xiaobaixiongxiong/article/details/83792580总所周知,PID算法是个很经典的东西。而做自平衡小车,飞行器PID是一个必须翻过的坎。因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂。并举出PID的形象例子来帮助理解PID。一、首先介绍一下PID名字的由来:P:Proportion(...
2019-08-30 10:27:09
1746
原创 单片机滤波平滑累加处理简单用法 (使用定时器)
一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。 一阶低通滤波的算法公式为:X(n) = get_ad(); Y(n) = αX(n) + (1-α)Y(n-1); 式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。 一阶低通滤波法采用本次采样值与上次滤波输出值进行加权,得到有效滤波值...
2019-02-12 14:34:35
1368
转载 单片机中常用的滤波算法
单片机常用滤波算法 说明:假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时进行判断,如果本次值与上次值之差<=A,则本次值有效;如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值。...
2019-02-12 14:15:54
1419
原创 nordic 52832添加HID服务实现手机蓝牙自拍杆功能 附遇到的问题和解决方法
此教程基于SD 2.0原理:添加HID服务模拟外设滑鼠给手机发送音量加或减实现控制相机拍照,参照SDK工程->ble_app_hids_mouse需要添加的功能1.HID服务2.设备管理机制DM3.储存设备信息pstorage流程1.蓝牙初始化内添加device_manager_init(0);参数0代表保存以往连接设备,方便自动连接void devic...
2019-01-28 17:45:41
5784
9
原创 nordic 蓝牙无法系统配对问题的解决办法
on_ble_evt内注释掉BLE_GAP_EVT_SEC_PARAMS_REQUEST下的内容 case BLE_GAP_EVT_SEC_PARAMS_REQUEST:// // Pairing not supported// err_code = sd_ble_gap_sec_params_reply(m_conn_hand...
2019-01-28 17:08:55
2779
原创 【nordic 52832】编码器qdec原理+使用详解,还有实际遇到的问题和解决办法
编码器就是鼠标滚轮器件,工作的时候用到了。原理看懂了很简单,参考:https://blog.youkuaiyun.com/wang328452854/article/details/50579832长话短说物理现象:编码器内有2个监测点,相位相差90 ,滚轮拨动一格2个监测点分别检测到一个脉冲。程序实现:开定时器检测脉冲,处理脉冲,然后输出拨动了几格,一般官方会做成接口调用一下 就行。...
2019-01-28 16:21:19
4078
1
转载 【nordic 52832】 创建精准时间定时器
转自:https://blog.youkuaiyun.com/gyb510/article/details/51842834/nordic封装了定时器,操作起来没有STM32一样方便,本文教你如何做时间计时nrf52832 有五个定时器,timer0--timer4 。因为SDK已经使用了timer0,所以如果使用了SDK,就不能再使用timer0,只能使用timer1--timer4。开发环境:...
2019-01-27 13:57:52
2742
原创 linux驱动I2C/SPI——misc混杂设备版【普通驱动】
misc的方式写驱动相对简单,最底层的还是操作寄存器,和单片机同样的原理。代码直接贴出来,非常时候新手学习。#include <linux/module.h>#include <linux/init.h>#include <linux/fs.h>#include <linux/miscdevice.h>#include <linu...
2018-09-10 17:28:34
957
原创 Linux串口编程(中断方式和select方式)
Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串口交换数据的。在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可以使用软中断的方式来处理数据的接受和发送,这里主要使用的是信号SIGIO,也就是异步I/O。这里也可以使用select实现异步形式的通知。 这里可以参考《UNIX 环境高级编程》中的第14章 高级I...
2018-09-10 10:07:35
4213
3
原创 IAR 新版本打开老版本遇到的问题和解决方法 __nounwind和cannot open source file "core_cm3.h"
1.__nounwinddeclaration is incompatible with "__nounwind __interwork __softfp unsigned int __iar_builtin_STREXB(unsigned char, unsigned char volatile *)解决方法:右击工程进入options->C/C++Compiler->Pre...
2018-09-05 15:52:48
7109
原创 C语言#define简单使用
说下工作中大部分会用到的功能 1.define的“函数定义”,注意后面是没有分号的,网上有么牢牢资料都写的分号,copy过来还是要试一试啊兄弟们。#define max(x,y) (x)&gt;(y)?(x):(y)2.多行定义函数,最明显的特征是换行加\,这样在头文件内也可以写函数了#define ASSERT(EX) ...
2018-08-28 16:46:49
4694
原创 UVC摄像头(3)应用层——webcam程序
完成UVC完成webcam.ko模块驱动后还需要一个程序带动驱动 需要的模组:webcam.kodwc_otg.ko平台:海思某芯片int main(int argc, char* argv[]){ struct uvc_device dev; system(&quot;insmod wdt.ko default_margin=5&quot;); system(&quot;himm 0...
2018-08-25 10:33:04
7644
5
原创 UVC摄像头(2)驱动层——UVC描述符参数设置
UVC描述符参数设置static int (*composite_gadget_bind)(struct usb_composite_dev *cdev);我们绑定它的函数是这个webcam_bind(struct usb_composite_dev *cdev){ int ret; /* Allocate string descriptor numbers ....
2018-08-24 19:30:08
6233
原创 UVC摄像头(1)驱动层——精简结构框架
* “本文写的是USB摄像机linux驱动层简单介绍,linux的USB驱动非常复杂,坑很大,搞懂全部的七八成就是大神级别的人物了。我刚开始上手UVC驱动非常晕,超多结构体,还是指针形式,封装层数庞大,各种bind,以前linux驱动基本没碰过,只看过开发板手册里的LED驱动,现在直接做USB驱动,只能一步步来,不心急。”*我们现在要做的是驱动一个USB接口摄像机,所以写的是USB设备的代码...
2018-08-24 15:58:58
2792
1
原创 编译ARM平台ko驱动的通用Makefile写法
先安装好交叉编译器KERNELDIR = /home/fandy/SDK/linux-3.4.xx //内核路径PWD := $(shell pwd)CC = $(CROSS_COMPILE)gccobj-m := name.o //驱动名称modules: $(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean: rm -...
2018-08-20 18:49:03
5352
原创 linux mount 实现网络服务器文件挂载传输NFS方式
可以用于ARM板传输文件用实现需要安装NFS,请自行百度安装1.服务器/etc/export文件添加目录sudo vi /etc/export添加以下语句,注意需要带参数/home/exp/iwork *(rw,sync,no_root_squash)wq保存,然后重启NFS服务sudo /etc/init.d/nfs-kernel-server restart...
2018-08-10 18:14:56
1779
原创 LINUX 系统基础操作命令、小技巧、设置等【慢慢更新】
更新源命令apt-get-update设置环境变量查看PATHecho $PATH 以添加mongodb server为列修改方法一export PATH=/usr/local/mongodb/bin:$PATH //配置完后可以通过echo $PATH查看配置结果。 生效方法:立即生效 有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的pat...
2018-05-28 15:21:44
169
转载 让vim使用起来像C编辑器【基础版】
当程序员在linux的Vi工具刚用起来时是不是感觉像记事本一样不顺手呢,别急,做下面2部即可。 打开配置文件vim ~/.vimrc若文件不存在则可以新建加入设置set tabstop=4set softtabstop=4set shiftwidth=4set autoindentset cindentset cinoptions={0,1s,t0,n-2,p2s,...
2018-05-08 11:27:32
213
转载 MySql入门基础笔记
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2018-05-04 10:52:38
127
原创 基于STM32F1的HMC5883L电子罗盘驱动——妈妈从此再也不担心我迷路了
HMC5883L是一种IIC通信的电子罗盘芯片,输出与北的角度偏差,数值是0-360度,靠西方向增长,可以理解为逆时针为正。配合GPS模块简直就是四轴飞行器的铁杆标配。驱动分为驱动IIC和转换角度两块。1.驱动IICvoid IIC_IO_Init(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockC...
2018-03-27 14:34:31
17499
40
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人