一些容易忘记的学习标签
下载#scp node@192.168.5.26:/home/node/??/io/color ./
上传#scp /home/node/??/io/color node@192.168.5.26: ./
sudo scp /home/node/lv_port_linux_frame_buffer-master/build/bin/demo root@192.168.64.134:/
sudo scp /home/node/lv_port_linux_frame_buffer-master/build/bin/demo root@192.168.64.134:/
编译#arm-linux-gcc main.c -o main -I ./include -L ./lib ./src/*.c -ljpeg -lm -lfont -pthread
查看进程ps -ef
查看队列 ipcs
shmget、ftok、shmctl、shmat、shmdt、semop、
struct sembuf
{
unsigned short sem_num;
short sem_op;
short sem_flg;
};
day1:子进程fork()返回pid进程id、getpid、system
day2:管道提供4兆空间 (同主机)
匿名管道 pipe(int pipefd[2])pipefd[0]读操作,pipefd[1]写操作 (内部进行fork)
有名管道 fifo mkfifo(,0644);->int fd = open()->read write
day3: 信号(62个信号 标准信号(1~31) ; 实时信号) (同主机)
标准信号(1~31)SIGSTOP、SIGCONT、SIGKILL、SIGUSR1、SIGUSR2、SIGINT
进程收到信号可以选择:屏蔽、忽略、默认、捕获(自定义行为)
捕获->暂停进程->执行进程->恢复进程
void xxx(int signum){}
signal(int num,宏) 异步接收信号,根据信号执行函数
day4: 消息队列 (同主机)
day5: 共享内存 (同主机)
shmget shmat映射 sgmdt解除
信号量 (同主机) semget 0 p v socket (不同主机)
day6: 线程
day7: 同步互斥、读写锁
mainA:pthread_cond_wait
mainB:pthread_cond_signal
信号量组 sem_post sem_wait pv操作
day8: SCHED_OTHER 分时调度策略 针对普通任务 静态优先级=0
SCHED_FIFO 分时调度策略 针对普通任务 静态优先级=0
SCHED_RR 时间片轮询 (种类1:同步)
抢占式调度策略 (种类二:优先级)
day9: 线程池
网络编程
192.168.64. 1
网络号 主机号
255
广播地址(主动发)
0~127
128~191
192~223
shell脚本的管道
sudo find / -name pic.h | xgargs grep "PAGE_SIZE"
---------->找不到
ls | grep [a-c] #找a~c的文件
重定向输出
ps -aus >log.txt 先清空后执行
ls -l >>log.txt 追加后执行
shell命令一
#!/bin/bash
#使用反引号``进行输入可以告诉终端 执行
buf="123 4pwd
"
intbuf=567
#shell中加的是花括号,也可以不加;makfile文件中用的是圆括号
echo ${buf};echo $intbuf
read wrbuf echo $wrbuf #scanf("[0-9]%s",buf) 输入0-9以外的东西就会结束
shell命令二
#!/bin/bash
if [ 表达式 ] #注意:if后面+空格表达式写在[]中,两边必须要+空格
then #执行
...
...
fi #做到这结束
shell命令三
#!/bin/bash
read data
if test $(($data)) -gt 20 ;then echo "大于20" else echo "小于20" fi
移植步骤
一、下载源码包lvgl_v8.3.0 lvgl提供的案例
二、(主源码包+分支 lv_conf.h + lv_drv_conf.h = 合并)
三、修改配置文件 lv_conf.h(图形库的功能的启用,由宏定义决定是否使用 开关)
修改配置文件 lv_drv_conf.h(图形库的驱动的启用,由宏定义决定是否使用 开关)
四、修改makefile
五、编写main.c
六、编译程序 make
七、检查平台 file xxx
八、编写脚本
使用流程
1、首先必须调用 ,lv_init()对LVGL图形库进程初始化
2、初始化硬件设备驱动,例如fbdev_init()、evdev_init()
3、注册显示设备驱动和输入设备驱动(定义结构体变量+初始化结构体+设置结构体成员+注册)
while(1)
{
4、周期性的调用lv_tick_inc(5);
5、周期性的调用lv_timer_handler();
}
回调函数:简述回调函数的作用和意义?(背)
一般作为参数使用,就是需要把一个函数的地址作为另一个函数的参数使用
,当用户调用了回调函数作为参数的那个函数时,回调函数才会执行。
pthread_t id;
pthread_create(&id,NULL,(void )(xxx)(void *),NULL);
硬件
DAY1:
1、DSP:数字信号处理
2、ADC:模数转换器 怎么转?采样量化编码
3、Serial interface:串形接口 比特是以顺序发送
DAY2:
stm32F407ZET6
Z:引脚数量 E:内存容量 CoreteX-M内核 XRAM->192kb 主频->168MHZ
起始地址:0x0800 0000 块->扇区->页->内存 1、MCU自举模式:指的是把外部程序下载到MCU(微控制器)内部到具体哪个位置 来存储,并且自举模式还包含选择从MCU内部的哪个位置来运行程序 2、ROM存储数据掉电不丢失,闪存使用有寿命,黑板原理特点:先擦除后写入,可以反复擦除十万次左右 3、常买:端子线,杜邦线,JLINK下载器 4、GPIO外设 5、51单片机也有I0口,一般8051有40个引脚,其中有1个复位引脚,2个品振引脚,2个电源引脚,3个存储选择引脚,
剩下32个引脚作为IO口,8051也把32个IO口进行分组,分为4个端口,每个端口有8个引脚,端口是以数字03进行区分,每个端口的8个引脚是
以数字0~7进行区分,比如 PO0~PO7 P10~P17 P20P27 P30~P37
DAY3:
步骤
1、命名:定义结构体赋值变量PPP_initTypeDef structure
2、打开外设时钟
3、配置为输出模式
4、对外设初始化PPP_init(PPP,&PPP_Initialized)
概念 时钟相当于外设的开关,不打开时钟则晶振的震荡信号就不发输入到MCU内部的外设中, 所以触发器没办法让寄存器接收。想要控制硬件必须通过寄存器控制 寄存器->触发器->时钟->时钟 面试题: 1、推挽和开漏的区别,推挽可以输出高低电平,而开漏只能输出低电平 2、三极管的作用,方法and开关作用 要背的图有:基极,集电极,发射极 NPN型三极管,基极+高电平 PNP型三极管,基极+低电平 文档查找: 1、STM32F4xx中文数据手册 2、STM32F407数据手册
DAY4:
嵌套向量终端控制器
DAY5:
中断控制器(NVIC)(异常优先级)
DAY6:
外部中断/事件 控制器(EXTI):边沿检测----->发给(NVIC),中断后台程序,执行前台程序;前台程序没有返回值和参数
GPIO-->NVIC启用-->EXTI-->SYSCFG
1、GPIO配置为输出模式四个步骤
2、
3、
4、
freeRTOS F407ZET6
1、编译工程时找不到freeRTOSConfig.h 去demo移植
2、头文件找不到点击魔术棒添加文件夹路径
3、freeRTOSConfig.h中需要指定编译器宏
4、freeRTOSConfig.h关掉不需要的钩子函数
裁剪
1、移植的时候注意三个.c文件
2、裁剪的时候注意宏定义的开启
任务调度
1、FreeRTOSConfig.h 文件中 ----->任务优先级 configMAX_PRIORITIES 数字越小任务优先级越低
2、时间片轮询 (种类1:同步)+抢占式调度策略 (种类二:优先级)=能一起使用
硬件I2C 的频率范围如上所述,可以是标准模式100kHz、快速模式400kHz、快速模式加1MHz,甚至更高。
软件I2C 的频率通常较低,具体数值取决于实现和微控制器性能,但很少有超过快速模式400kHz的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现