- 博客(103)
- 资源 (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
741
原创 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
1084
原创 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
701
原创 ‘__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
2691
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
1035
原创 字符设备驱动一个驱动支持多个设备
一个驱动支持多个设备时有两种方式 一个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
638
原创 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
119
原创 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
342
原创 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
888
原创 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
725
原创 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
189
原创 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
274
原创 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
1786
原创 freertos基础学习--任务通知
发送通知函数,向对应任务发送不带参数的通知,相当于计数型或二进制信号量。xTaskNotifyGive( xTaskToNotify )xTaskToNotify参数为任务句柄 TaskHandle_t类型,可以从xTaskCreate()创建任务获得,也可以xTaskGetCurrentTaskHandle()获取当前正在运行的任务句柄。对这个任务句柄的任务通知计数+1.uint32_t ulTaskNotifyTake( BaseType_t xClearCountOnExit, TickTy
2020-12-28 00:32:47
481
1
原创 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
113
原创 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
1991
1
原创 交换数据的三种方式
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
409
原创 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
173
原创 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
158
原创 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
988
原创 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
428
原创 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
740
原创 Makefile语法学习
好记心不如烂笔头。这份是个人学习imx6ull 裸机开发开发的makefile文件,参考资料《跟我一起写makefile》每条命令必须以tab键开始,make 命令会为 Makefile 中的每个以 TAB 开始的命令创建一个 Shell 进程去执行。规则:target … : prerequisites …command#后面的内容为注释使用变量 $(name)通配符 “*”,“?”和“[…]” ,同shell语法模式规则 % 表示任意%.o : %.c命令赋值符号的含义自动
2020-11-18 22:14:58
279
原创 字符设备驱动框架
好记性不如烂笔头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
156
原创 结构体带成员初始化
好记性不如烂笔头。受Linux内核驱动以及硬件家园博主博客其启发,最近在32位单片机上比较喜欢使用这种方式写代码,类面向对象的思路,对外只提供一个结构体变量==对象。结构体初始化的时时候带成员初始化,只需要部分初始化特别方便,且不受顺序影响。例:Linux驱动程序中的 file_operations 结构体/* 设备操作函数 */static struct file_operations gpioled_fops = { .owner = THIS_MODULE, .open = led_op
2020-11-18 00:08:33
812
原创 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
2736
原创 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
552
原创 DOS命令常用
/? 查看帮助信息echo 打印字符串@echo off/on 关闭/开启回显命令pause 暂停控制台exit 跳出命令,跳出控制台rem 或者 :: 注释 等同shell #goto 跳转到标签处:xxx 标签xxxstart 启动打开盘符/窗口/文件夹,运行程序...
2020-11-05 00:17:59
84
原创 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
404
原创 DOS目录文件操作命令学习
/? 查看命令的使用,参数介绍等cd 切换目录md 创建目录rd 删除目录ren 目录重命名dir 查看目录copy 复制文件xcopy 复制文件/文件夹
2020-11-04 23:18:04
164
原创 求变量二进制值中1的个数
int function(x) { int flag = 0; while(x) { x = x&(x-1); flag ++; } return flag ; }
2020-08-20 00:22:01
198
原创 linux下查看设备节点 节点号
查看加载的设备ls /dev查看加载设备模块lsmod查看设备号(主设备)cat /proc/devices查看设备树节点ls /proc/device-tree
2020-08-19 22:24:47
11566
原创 189-简单-旋转数组
方法一:暴力解,一次移动一位,直到k位移动完成void rotate(int* nums, int numsSize, int k) { int temp = 0; if (numsSize < 2) { return; } k %= numsSize; while (k--) { temp = nums[numsSize-1]; for (int i = numsSize - 1; i > 0; i--) { nums[i] = nums[i - 1]; }.
2020-08-18 10:52:38
119
原创 389-简单-找不同
方法一:利用数组保存每个字符出现的从次数char findTheDifference(char * s, char * t){ int temp[26] = {0}; int len = strlen(s); for (int i=0;i<len;i++){ temp[s[i]-'a']++; } for (int i=0;i<=len;i++){ temp[t[i]-'a']--; if(temp[t[.
2020-08-15 12:11:30
456
原创 387-简单-字符串中的第一个唯一字符
思路:利用数组保存每个字符出现的次数,再把第一个出现字符次数为1的返回int firstUniqChar(char * s){ int temp[26] ={0}; int len =strlen(s); for (int i=0;i<len;i++){ temp[s[i]-'a']++; } for (int i=0;i<len;i++){ if (1==temp[s[i]-'a']){ ret.
2020-08-15 11:53:32
79
原创 345-简单-反转字符串中的元音字母
方法一:创建一个数组保存所有元音字符下标,然后交换,时间复杂度O(n),费内存char* reverseVowels(char* s) { int len = strlen(s); int j = 0; int *subcript = (int*)malloc(len*sizeof(int)); for (int i = 0; i < len; i++){ switch (s[i]) { case 'a': case 'i': case 'o': case 'e': .
2020-08-14 21:36:11
114
原创 383-简单-赎金信
思路:利用一个数组保存第一个字符串中每个字母使用过的数目,遍历第二个字符串,如果某个字符的数目大于第一个则返回错误bool canConstruct(char* ransomNote, char* magazine) { int temp[26] = {0}; int subcript = 0; int len = strlen(magazine); for (int i = 0; i < len; i++){ subcript = magazine[i] - 'a'; temp[.
2020-08-14 20:47:41
146
iic_slaver.rar
2020-07-15
多按键ad驱动,方便移植,对其他模块依赖小,移植完之后可直接调用
2020-07-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人