自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 资源 (3)
  • 收藏
  • 关注

原创 openssl非对称加密填充OAEP

上班访问外网限制,只能访问csdn,个人练习工程代码/* crypto/rsa/rsa_oaep.c */int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen){

2021-07-06 01:14:00 660

原创 openssl与mbedtls互相aes加密解密

上班访问外网限制,只能访问csdn,个人练习工程代码文件读取 1k字节解密加密 256bit cbc模式 mbedtls加密 openssl解密#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h&g

2021-07-06 01:08:21 978

原创 openssl非对称加密填充OAEP

/* crypto/rsa/rsa_oaep.c */int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen, const unsigned char *from, int flen, const unsigned char *param, int plen){ return RSA_padding_add_PK

2021-07-06 01:00:03 618

原创 ‘__NR_sigreturn’ was not declared in this scope

按教程来编译报错找不到linux-arm-low.c: In function ‘CORE_ADDR arm_sigreturn_next_pc(regcache*, int, int*)’:linux-arm-low.c:769:29: error: ‘__NR_sigreturn’ was not declared in this scope gdb_assert (svc_number == __NR_sigreturn || svc_number == __NR_rt_sigreturn)

2021-06-06 02:09:53 2438 3

原创 单片机实现内存管理

#include <stdint.h>#define MEM_SIZE 1024 * 10#define MEM_UNUSED 0#define MEM_USED 1char memeryPool[MEM_SIZE] = {0};#pragma pack(1)struct MemBlock { struct MemBlock *next; uint32_t size; char *address; unsigned char state;};

2021-05-16 01:39:32 935

原创 字符设备驱动一个驱动支持多个设备

一个驱动支持多个设备时有两种方式 一个cdev对象管理多个设备 每个cdev对象管理一个设备一套文件 如何区分呢,open函数传入参数来区分,一个struct inode代表一个真实的文件,struct file表示一个打开的文件static int key_open(struct inode *inode, struct file *filp){}struct inode { kdev_t i_dev; /* inode所在的device代码 */ umode_t i_mode; /*

2021-05-07 22:59:39 568

原创 1302-中等-层数最深叶子节点的和

层序遍历,使用链式队列/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */struct qNode { struct TreeNode *node; int deep; struct qNode *next;};struct Que.

2021-04-28 01:25:27 91

原创 gpio子系统和pinctrl子系统学习

Imx6ul.dtsi 下找到iomuxc节点iomuxc: iomuxc@020e0000 { compatible = "fsl,imx6ul-iomuxc"; reg = <0x020e0000 0x4000>;};全局搜索字符串fsl,imx6ul-iomuxc,有个驱动文件里面写有pinctr 内容,gpio的配置读写,由soc厂商实现所以直接copy,Linux内核利用 compatible匹配来确定驱动通过 of.h下的节点驱动函数imx6ull-alientek-

2021-04-24 23:10:50 284

原创 Linux定时器jiffies学习

struct timer_list { struct list_head entry; /* 定时器链表 */ unsigned long expires; /* 启动定时长 */ struct tvec_base *base; void (*function)(unsigned long); /* 定时执行函数 */ unsigned long data; /* 传递给func的参数 */ int slack;};apivoid add_timer(struct timer_list

2021-04-24 22:59:03 819

原创 notify消息通知回调模块

#ifndef NOTIFY_H#define NOTIFY_H#include <stdint.h>typedef enum { RET_KEY, NOTIFY_MAX, } NotifyModule;typedef int32_t (*SyncCall)(int32_t event, const void *input, int32_t inLen, void *output, int32_t outLen);typedef int32_t (*Asyn

2021-04-22 23:30:19 656

原创 2021-04-20

直接递归超出时间限制int coinChange(int* coins, int coinsSize, int amount){ int temp = amount + 1; int ret; if (amount < 0) { return -1; } else if (amount == 0) { return 0; } else { for (int i = 0; i < coinsSize; i+.

2021-04-20 01:14:13 113 1

原创 3-中等-无重复字符的最长子串

int lengthOfLongestSubstring(char * s){ int front = -1; int last = 0; int ans = 0; int buff[256]; if (s == NULL) { return -1; } (void)memset(buff, -1, sizeof(buff)); while (s[last] != '\0') { if (buff[s[las.

2021-04-15 01:00:34 71

原创 linux启动流程学习

Linux启动第一阶段启动文件linux/arch/arm/kernel/head.SENTRY(stext):__vet_atags 校验设备树是否有效__create_page_tables创建页表ldr r13, =__mmap_switched 存入r13,使能mmu之后调用__enable_mmu->__turn_mmu_on->mov r3, r13 即调用__mmap_switched->start_kernel第二阶段 init/main.casmli

2021-04-13 22:28:29 158

原创 u-boot学习笔记一--bootcmd和bootargs

Print 打印环境变量tftp addr filename 将tftp服务器上的filename文件下载到addr这个地址Bootcmd三个命令 第一个下载zimage镜像到80800000,下载设备树到83000000,第三个命令启动linux bootz 传入参数 80800000 - 83000000 第二个参数不用用- 第一个kernel地址,第三个设备树地址bootcmd=tftp 80800000 zImage;tftp 83000000 imx6ull-alientek-nand.

2021-03-31 21:37:37 217

原创 rename函数

#include <stdio.h>int rename(const char *oldpath, const char *newpath);#include <fcntl.h> /* Definition of AT_* constants */#include <stdio.h>int renameat(int olddirfd, const char *oldpath, int newdirfd, cons

2020-12-28 23:29:28 1740

原创 freertos基础学习--任务通知

发送通知函数,向对应任务发送不带参数的通知,相当于计数型或二进制信号量。xTaskNotifyGive( xTaskToNotify )xTaskToNotify参数为任务句柄 TaskHandle_t类型,可以从xTaskCreate()创建任务获得,也可以xTaskGetCurrentTaskHandle()获取当前正在运行的任务句柄。对这个任务句柄的任务通知计数+1.uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickTy

2020-12-28 00:32:47 431 1

原创 标准io读写fopen、fclose、fwrite、fread、fseek

好记心不如烂笔头,c库在普通读写io,open、close的基础上创建了一套新的文件读写接口函数#include <stdio.h>FILE *fopen(const char *path, const char *mode);FILE *fdopen(int fd, const char *mode);/* 返回0关闭成功,EOF返回失败 */int fclose(FILE *stream);参数:path 为文件路径的字符串mode:r 以只读文本文件权限打开,文件偏

2020-12-20 23:06:58 214

原创 文件打开关闭、读写操作open、read、write、lseek、pread、pwrite

好记性不如烂笔头C语言文件操作 read, write, close, lseek#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);int creat(const char *pathnam

2020-12-20 22:07:23 693

原创 c语言实现几种排序算法

冒泡排序void BubbleSort(int *buff, int len){ int flag; for (int i = 0; i < len - 1; i++) { flag = 0; for (int j = 0; j < len - 1 - i; j++) { if(buff[j + 1] >= buff[j]){ continue; }

2020-12-17 23:18:21 87

原创 stat函数获取分析文件属性

linux 文件属性,终端下ls和stat命令查看,在c程序中怎么处理呢lala0903@lala0903-virtual-machine:/var/cache/apt/archives/stlink$ ls -ltotal 128drwxr-xr-x 5 root root 4096 12月 17 21:58 build-rw-r--r-- 1 root root 40768 12月 17 00:45 CHANGELOG.mddrwxr-xr-x 4 root root 4096 12月 1

2020-12-17 22:42:26 161

原创 makefile参数传递,gcc给c文件传递宏参数

代码写好之后有时候需要在编译的时候选择编译哪部分代码,通过gcc参数 -D给c文件传递宏参数,下面是具体实现,-D和参数中间空格可以省略makefile参数传递,make para=value#include <stdio.h>#ifdef DEBUGconst char *g_vision = "宏参数是debug"; #else /* DEBUG */const char *g_vision = "宏参数是relese"; #endif /* DEBUG */#if (F

2020-12-14 23:28:04 1899 1

原创 质数因子

题目描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )最后一个数后面也要有空格输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入180输出2 2 3 3 5#include <stdio.h>void prime_number(long _num){ for (int i = 2; i <= _num; i

2020-12-12 21:39:09 634 1

原创 计算某字母出现的次数

写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字母,然后输出输入字符串中该字母的出现次数。不区分大小写。输入描述:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字母。输出描述:输出输入字符串中含有该字符的个数。示例1输入ABCabcA输出2#include <stdio.h>#include <stdlib.h>#include <string.h>int ret_char_number(const char*

2020-12-12 00:55:51 1025

原创 交换数据的三种方式

1、中间变量int a, b, c;......c = a;a = b;b = c;2、加减法int a, b;a = a + b;b = a - b;a = a - b;3、 异或法int a, b;a ^= b;b ^= a;a ^= b;

2020-12-09 22:58:49 363

原创 vscode常用快捷键

VScode 基础编辑 快捷键按 Press功能 FunctionCtrl+X剪切行(空选定) Cut line (empty selection)Ctrl+C复制行(空选定)Copy line (empty selection)Alt+ ↑ / ↓向上/向下移动行 Move line up/downShift+Alt + ↓ / ↑向上/向下复制行 Copy line up/downCtrl+Shift+K删除行 Delete lineCtrl

2020-12-06 14:20:40 153

原创 linux解压压缩文件

常见的压缩文件扩展名:*.z :compress 程序压缩的文件;*.zip :zip程序压缩的文件;*.gz :gzip程序压缩的文件;*.bz2 :bzip2程序压缩的文件;*.xz :xz程序压缩的文件;*.tar :tar程序打包的文件,并没有压缩过;*tar. gz :tar程序打包的文件,并且经过gzip的压缩;*tar.bz2t :tar程序打包的文件,并且经过bzip2的压缩;*.tar .xz :tar程序打包的文件,并且经过xz的压缩; Linux上常见的压缩命令就是

2020-12-06 01:25:16 131

原创 shell脚本变量定义使用读取

好记心不如烂笔头变量的使用:echo 打印变量echo ${VAR}echo $VAR变量的设置:1、变量与变量内容用 = 号来连接Name=lala0903等号两边不能有空格,变量名称只能是数字或字母,字母开头2、双引号“”内的特殊字符保持原有特性MYNAME="xin$Name"echo $MYNAME xinlala09033、单引号‘’内特殊字符变为一般字符MYNAME='xin$Name'echo $MYNAME xin$Name变量的有效范围在原本的

2020-12-05 12:18:57 935

原创 linux命令执行快捷键

tab 单击 :补全命令tab 双击 :提示可选的命令[回车] 换行输入命令[ctrl]+u 删除光标前面的命令串[ctrl]+k 删除光标后面的命令串[ctrl]+a 光标移动到命令串最前面[ctrl]+e 光标移动到命令串最后面[ctrl]+z 当前任务放到后台运行[ctrl]+c 杀死当前进程(卡死的时候老有用了)[ctrl]+[alt]+t 开启新的终端[ctrl]+s 锁定终端[ctrl]+q 恢复终端...

2020-12-04 22:01:35 399

原创 log信息打印接口函数

printf函数在格式化输出时,向下调用了char putchar(char c);这个函数,在“stdio.h”里可以发现有这个函数,所以我们需要自己构造一个这样的函数,即通过串口putchar(),代码如下:/*stm32f103 寄存器操作*/char putchar(char c){ while((USART1->SR&0X40)==0);//循环发送,直到发送完毕 USART1->DR = (u8) ch; return c;}#ifn

2020-12-04 00:21:33 691

原创 Makefile语法学习

好记心不如烂笔头。这份是个人学习imx6ull 裸机开发开发的makefile文件,参考资料《跟我一起写makefile》每条命令必须以tab键开始,make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。规则:target … : prerequisites …command#后面的内容为注释使用变量 $(name)通配符 “*”,“?”和“[…]” ,同shell语法模式规则 % 表示任意%.o : %.c命令赋值符号的含义自动

2020-11-18 22:14:58 241

原创 字符设备驱动框架

好记性不如烂笔头struct gpioled_dev{ dev_t devid; struct cdev c_dev; struct class *usr_class; struct device *usr_dev; struct device_node *nd; int pin; int pin_status; int major; int minor;};static int __init gpioled_init(voi

2020-11-18 21:15:36 123

原创 结构体带成员初始化

好记性不如烂笔头。受Linux内核驱动以及硬件家园博主博客其启发,最近在32位单片机上比较喜欢使用这种方式写代码,类面向对象的思路,对外只提供一个结构体变量==对象。结构体初始化的时时候带成员初始化,只需要部分初始化特别方便,且不受顺序影响。例:Linux驱动程序中的 file_operations 结构体/* 设备操作函数 */static struct file_operations gpioled_fops = { .owner = THIS_MODULE, .open = led_op

2020-11-18 00:08:33 764

原创 C语言数组带下标赋值

好记性不如烂笔头。c语言数组带下标赋值,初始化的时候数组元素的值不受顺序影响,在有些时候方便扩展一幕了然。int array[3] = { 1, 2, 3 };/* 等同于 */int array[3] = { [0] = 1, [1] = 2, [2] = 3,};int array[3] = { [2] = 1, [1] = 2, [0] = 3,};举例:在之前工程中按键程序中使用过,增加删除特别方便。按键驱动typedef void (*const KEY_TASK_

2020-11-17 23:55:21 2636

原创 linux驱动学习-linux中断程序编写流程

Linux中断:1、确定中断号2、申请中断号、request_irq 不用一定要释放free_irq3、编写中断服务函数request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev){ return request_threaded_irq(irq, handler, NULL, flags, name, dev);}中断的上

2020-11-10 21:28:39 498

原创 DOS命令常用

/? 查看帮助信息echo 打印字符串@echo off/on 关闭/开启回显命令pause 暂停控制台exit 跳出命令,跳出控制台rem 或者 :: 注释 等同shell #goto 跳转到标签处:xxx 标签xxxstart 启动打开盘符/窗口/文件夹,运行程序...

2020-11-05 00:17:59 64

原创 DOS环境变量

name 变量名%name% 使用变量%name:~a,b% 使用从第a+1个字符开始,偏移b个字符set 环境变量设置set name=XXX 设置变量name为XXXset name= 删除name变量set /a a+b 计算a+b的值并打印set /p name 控制台输入字符,赋值给name...

2020-11-04 23:51:34 363

原创 DOS目录文件操作命令学习

/? 查看命令的使用,参数介绍等cd 切换目录md 创建目录rd 删除目录ren 目录重命名dir 查看目录copy 复制文件xcopy 复制文件/文件夹

2020-11-04 23:18:04 135

原创 121-简单-买卖股票的最佳时机

1暴力求解int maxProfit(int* prices, int pricesSize) { int temp1 = 0; int temp2 = 0; for (int i = 0; i < pricesSize - 1; i++) { for (int j = i+1; j < pricesSize; j++) { if (prices[j] <= prices[i]){ continue; } temp2 = pr.

2020-10-29 23:23:37 122

原创 299-中等-猜数字游戏

char* user_itoa(int _value,char* _str){ int i = 0; int j = 0; if (_value < 0) { _value = -_value; _str[i++] = '-'; } do { _str[i++] = _value % 10 + '0'; _value /= 10; } while (_value); _str[i] = '\0'; if (_str[0] == '-') { j = 1; .

2020-09-25 00:23:23 91

原创 70-简单-爬楼梯

方法一 递归+缓冲int GetNextStep(int step){ static int buff[1000] = {0}; if (buff[step] != 0) { return buff[step]; } if (step == 0) { buff[step] = 1; } else if(step == 1) { buff[step] = 1; } else { buff[st.

2020-09-25 00:05:00 62

单片机内存管理malloc源码提供内存回收策列

单片机内存管理的源码,分配策略包含首次适应及最佳适应两种方法,释放提供碎片回收功能,压缩包中包含以往版本。

2021-05-21

iic_slaver.rar

iic从机模块,执行效率还行可以10m主频的单片机最快可以接收到100K的速度。该模块需要资源,2个外部中断配置-上升下降沿中断,来模拟iic时序,芯片编译器的问题,对结构体不是很友好,所以这边没有使用结构体对变量打包,目前只实现了简单的接受和发送,不支持eeprom那种读写方式。

2020-07-15

多按键ad驱动,方便移植,对其他模块依赖小,移植完之后可直接调用

使用ad按键的一个完整驱动,最多可实现10个按键的短按、长按、保持、以及抬起,双击和三击只需要自己修改scan.c的代码就行,稳定性很好,方便移植,如果需要使用矩阵按键和io按键,只需要实现相应的get_key_number函数,扫描和调用分开,使用队列作为缓冲,有效缓解了大工程中耗时函数阻塞导致有效按键消息丢失。

2020-07-10

空空如也

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

TA关注的人

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