- 博客(61)
- 资源 (21)
- 收藏
- 关注
原创 MicroPython 片上psrom的支持,并将多个bin合成为一个bin
4、执行 make clean 然后 make BOARD=ESP32_GENERIC_S3,这里一定clean一下,以前没这一下总是编译失败,编译完后会生成build-ESP32_GENERIC_S3文件夹。版本1.20.0,怎么配置都无法开启片上psrom的支持,折腾了一周,都自我怀疑了,最后更新版本为1.23.0一编译直接就过了。这些执行后三个bin就合成到micropython_end.bin了,到时候直接在0地址下载micropython_end.bin到芯片就可以了。
2024-09-14 11:29:52 507
原创 构建 Linux 内核指南
dir/file.lst - 仅构建指定混合源/汇编目标(需要较新的 binutils 和较新的构建 (System.map))。headers_install - 将清理过的内核头安装到 INSTALL_HDR_PATH(默认: ./usr)。kselftest-merge - 将 kselftest 的所有配置依赖项合并到现有的 .config 文件中。kernelversion - 输出存储在 Makefile 中的版本(与 make -s 一起使用)。make help"
2024-06-18 09:27:11 436
原创 micro python 编译流程和方法,以及一部分问题解决
然后执行source export.sh就可以成功了,这里需要根据你的click版本决定,不是瞎改的。Python 3.3+、gmake、bash、gcc版本以上,没有的记得自己安装一下。micro python官网https://micropython.org/的源码,因为后面编译会核对模块,所以建议还是通过。成功后打开export.sh文件将这里修改一下。点击对应的芯片,我这里是ESP32-S3。运行./install.sh all。拉取成功后,失败的话多拉去几次。编译成功,固件就在如下目录下。
2023-09-04 13:17:32 924
原创 小程序使用MQTT链接
上面的链接使用小程序编译后不能链接到mqtt服务器,原因是MQTT.js文件过于老旧了,使用新版本替换即可,详细参考下面的这个链接。
2022-09-28 18:51:18 1099 1
原创 makefun颜色识别模块一些总结(假ZC-CLS381)
发出开始转换指令后一定要第一时间读取颜色寄存器值,这里推测读取的是上一次的颜色值,不读取的话新转换的值更新不进去,然后就是读取完之后,一定要有足够的时间等待转换结束,否则数值不更新。for(j = 0;//不同的采样要有不同的延时。模块号称使用ZC-CLS381芯片识别颜色,但其实不是(其实是TCS34721/TCS34725)recvbuff[0] = 0x01 | 0x80;连模块地址都不一样。...
2022-08-09 09:45:14 805 3
原创 内核GPU显卡驱动
在 Linux 5.2 发布的时候合并到了 mainline 中: 针对 Mali-400/Mali-450 的驱动叫做 lima,针对 Mali-T6xx / Mali-T7xx / Mali-T8xx GPU 和 GXX 系列的叫做 panfrost。Usersacpe 部分的开源库叫做 mesa,对 mali gpu 的支持从 mesa 19.2 开始。...
2022-07-15 16:02:45 1622
原创 修复PHY62XX_SDK_3.1.1 ADC采样单次触发死机问题
复制如下文件,覆盖对应adc.c和adc.h即可每次采样需要重新配置: hal_adc_config_channel(myadc, my_adc_Hdl_t); hal_adc_start();-------------------------------------------------------------------------------------------/************************************
2022-06-21 10:13:53 1323 2
原创 修复之前写的模拟I2C程序,增加多总线,时序更精确操作
C文件:-------------------------------------------------------------------------------------#include"Si2c.h"//Bus driver implementationSi2c_device Si2c_device_nu[MY_SI2C_DEVICE_NU];enum Si2c_err MY_Si2c_err;void Si2c_delay( unsigned int dy ) { u
2022-06-20 21:46:34 218
原创 删除kernel和uboot下未编译的文件
删除kernel和uboot下未编译的文件,方便之后的文件分析,排除多余的干扰项目代码如下测试可以#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dirent.h>#include <unistd.h>int readFileList(char *basePath){ DIR *dir; struct dirent *ptr...
2022-04-16 15:28:42 252
原创 PHY6252开发法基础概括
资料地址: 欢迎使用PhyPlus Wiki! [PHYPLUS Wiki]SDK 3.x.x 应用于 PHY6222/PHY6252SDKs [PHYPLUS Wiki]实际SDK下串口AT透传例程为PHY62XX_SDK_3.1.1\release_bbb_sdk-PHY62XX_SDK_3.1.1\example\ble_peripheral\bleUart_AT其中OSAL与射频部分是不开源的,开发有一定难度用Keil打开后////bleUar
2022-04-01 10:33:35 5348 1
原创 CRC16 XMODEM
const unsigned short crc16_tab[] = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9...
2021-09-30 16:04:51 1014
原创 BCD码与十进制相互转换
#include "stdio.h"char BCD2DEC(unsigned char *bcd){ unsigned char tmp = 0; if(*bcd>0x99) return -1; tmp = ((*bcd>>4)*10)+(*bcd&0x0F); *bcd = tmp; return 0;}char DEC2BCD(unsigned char *dec){ unsigned char t...
2021-08-26 15:22:19 2295
原创 工作队列workqueue
工作队列 <linux/workqueue.h>工作队列类似 taskets,允许内核代码请求在将来某个时间调用一个函数,不同在于:(1)tasklet 在软件中断上下文中运行,所以 tasklet 代码必须是原子的。而工作队列函数在一个特殊内核进程上下文运行,有更多的灵活性,且能够休眠。(2)tasklet 只能在最初被提交的处理器上运行,这只是工作队列默认工作方式。(3)内核代码可以请求工作队列函数被延后一个给定的时间间隔。(4)tasklet 执行的很快, 短时期, 并且在原子.
2021-08-10 19:37:07 306
原创 Tasklets
Tasklets #include <linux/interrupt.h>它类似内核定时器:在中断时间运行且运行同一个CPU上,并接收一个 unsigned long 参数。不同的是:无法要求在一个指定的时间执行函数,只能简单地要求它在以后的一个由内核选择的时间执行。它对于中断处理特别有用:硬件中断必须尽快处理, 但大部分的数据管理可以延后到以后安全的时间执行。实际上,一个 tasket,就象一个内核定时器,在一个"软中断"的上下文中执行(以原子模式)。软件中断是在使能硬件中断时执行异步..
2021-08-10 19:20:42 165
原创 时间、延时、延缓操作
<linux/param.h>可通过定义的CPUHz值判断时间使用 jiffies 计数器这个计数器和用来读取它的工具函数包含在,通常只需包含 ,它会自动放入linux/jiffies.hjiffies和jiffies_64必须被当作只读变量#include <linux/jiffies.h>unsigned long j, stamp_1, stamp_half, stamp_n;j = jiffies; /* 读取当前时间值 */stamp_1 = j + H
2021-08-09 20:57:24 238
原创 高级字符设备的一些补充
<linux/fs.h>loff_t (*llseek) (struct file *, loff_t, int);llseek方法实现了lseek和llseek接口方法如果没定义这个方法的话默认修改filp->f_pos(当前读写位置)如果定位操作对应物理操作则必须实现llseek方法例子:loff_t (*llseek) (struct file x, loff_t off , int y){ struct scull_dev *dev = filp->p..
2021-08-09 19:28:22 109
原创 非阻塞IO
非阻塞IO头文件<linux/poll.h>pollselectepoll (2.5.45引入)(千个文件描述符)三个方法都通过unsigned int (*poll) (struct file *, poll_table *)驱动调用主要为2步处理1.在一个或多个可指示poll状态变化的等待队列上调用poll_wait如果当前没有文件描述符可用来执行IO,则内核将使进程传递在文件描述符的等待队列上2.返回一个用来描述操作是否可以立即无阻塞执行的位掩码传递给poll方法
2021-08-02 20:45:19 229
原创 幻数魔数
魔数幻数为了不与系统其他设备宏定义冲突,造成错误调用后能正常Linux 第一个版本使用了16位整数,(幻)高8位与设备相关,(魔)低8位是序列号码ioctl-number.txt内罗列了内核设备所使用的幻数<linux/ioctl.h><asm/ioctl.h>type幻数number魔数 序数,顺序编号direction数据传输方向 _IOC_NONE(没有数据传输) _IOC_READ(读取)size所涉及的用户数据大小#define _...
2021-06-16 22:29:25 300
原创 kernel 并发和竞争
信号量和互斥体kmalloc可能会引发睡眠信号量(减少信号量值获取锁定状态)信号量就是一种睡眠锁如果一个任务试图获取一个已经被占用的信号量,他会被推入等待队列,让其进入睡眠。此刻处理器重获自由,去执行其他的代码。当持有的信号量被释放,处于等待队列的任务将被唤醒,并获取到该信号量。<asm/semaphore.h>初始化信号量方法1struct semaphore sem;sema_init(&sem, val);初始化信号量方法2DEFINE_SEMAPHORE(
2021-05-23 19:06:10 142
原创 字符驱动
<linux/cdev.h>struct cdev { struct kobject kobj; //内嵌的内核对象 struct module *owner;//内核模块的对象指针 const struct file_operations *ops;//向上提供的接口 struct list_head list;//已经向内核注册的所有字符设备形成链表 dev_t dev;//设备号 unsigned int count;//次设备号个数}...
2021-05-23 17:33:50 264
原创 linux 传参解析过程
bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrcrootfstype=ext3console=ttySAC2,115200 控制台使用串口2,波特率115200.root=/dev/mmcblk0p2 rw根文件系统在SD卡端口0设备(iNand)第2分区,根文件系统是读可写的init=/linuxrc linux的进程1(init进程)的路径rootfstype=ext3 根文件系统的类型是ext...
2021-04-11 17:01:03 484
原创 Linux内核简单启动流程以及功能描述
/arch/arm/kernel/head.Ssvc mode irqs disabledget processor id/arch/arm/kernel/head-common.S\arch\arm\include\asm\procinfo.h\arch\arm\kernel\asm-offsets.c__lookup_processor_type CPU信息的定义都放到.proc.info.init段中CONFIG_XIP_KERNEL 是否片内执行\arch\arm\kernel\.
2021-04-11 15:53:08 206
原创 GCC使用说明
GCC代表“GNU编译器合集”可编译C、C++、Objective-C、 Objective-C++、 Java、 Fortran、 Ada、GoGCC语言标准:C89、C90 指令-》 -ansi -std=c90C99 指令-》 -std=c99C11 指令-》 -std=c11GNU拓展C90 指令-》 -std=gun90GNU拓展C99 指令-》 -std=gnu99GNU拓展C11 指令-》 -std=gnu11c++ 98 (export是一个明显的例外)和c++ 03..
2021-03-28 21:37:30 1413
原创 GD32 RTC
部分GD32RTC只有一个存储寄存器,官方例程也只能存储时分秒,故此特别编写UTC时间,兼容上年月日周时分秒-----------------------------------------------------------------------------------------------------------------C----------------------------------------------------------------------------...
2021-01-25 15:14:58 1922 3
原创 CS1237 STM32控制程序以及原理图需要注意事项
CS1237供电为5V的时候STM32是3.3V这时候应该加不小于5.1K的上拉电阻,不然CS1237跟32通信不上,32设置为OD驱动,同时不需要设计通信引脚的限流电阻就可以下面是驱动程序----------------------------------------------------------MAIN----------------------------------------------------------/* USER CODE BEGIN Header *//**.
2020-12-12 18:26:47 7435 3
原创 GD32 2.4寸8080协议16bit屏幕驱动
#include "my_oled.h"_lcd_dev lcddev;/*static void LCD_WR_REG(uint16_t reg){ LCD_RS_CLR; LCD_CS_CLR; DATAOUT(reg); LCD_WR_CLR; LCD_WR_SET; LCD_CS_SET;}*/__asm static void LCD_WR_REG(uint16_t reg){ PUSH {r4-r6,lr}...
2020-12-02 10:57:25 1423
原创 AVR 模拟I2C
//IIC.c#include "jpheat.h"#include "delay.h"//4M晶振, pDelayNus(3)为6us#define I2C_Delay() pDelayNus(15)#define I2C_SCL PA3 #define I2C_SDA PA2 #define I2C_DDR DDRA#define I2C_POTR ...
2020-11-07 13:25:20 594
原创 FFT的C语言实现,对照MATLIB
%测试程序clear; %清屏clc;Fs = 100; % Sampling frequencyt = -1:1/Fs:1; % Time vectorL = length(t); % Signal lengthxn=2/(4*sqrt(2*pi*0.01))*(exp(-t.^2/(2*0.001))); %要转换的序列n = 2^nextpow2(L);M=nextpow2(L); ...
2020-10-20 13:49:09 603
原创 C语言,复数运算,测试过直接用
#include "stdio.h"#include "math.h"typedef struct plural{ double shi; double xv;};//复数加法plural complexAdd(plural a, plural b){ plural result; result.shi = a.shi + b.shi; result.xv =...
2020-10-19 19:30:42 462
原创 CRC7 测试过,直接用
#include "stdio.h"/*得到对照表 TAB_LEN 对照表长度 ALPHA 多项式系数*/#define TAB_LEN 256#define ALPHA 0x09int table_gen8(unsigned char *buf){ unsigned int alpha = ALPHA; //x^7+x^3+1 int i,j; unsigned char tmp; for(i=0;i<TAB_LEN;i++){ t...
2020-10-09 16:25:05 622
原创 模拟I2C程序,带多字节连收、多字节连发,适用于各个平台
-------------------------------------------------------------------------------- C --------------------------------------------------------------------------------------#include"simulation_i2c.h"GPIO_InitTypeDef mGPIO_InitTypeDef;unsigned long Delayco
2020-09-29 16:37:18 1475
原创 SPI四种模式代码
#include "stdio.h"/***************************************************Mode0:CPOL=0,CPHA=0 常用 空闲SCK=0 数据采样是在上升沿Mode1:CPOL=0,CPHA=1 空闲SCK=0 数据采样是在下降沿Mode2:CPOL=1,CPHA=0 空闲SCK=1 数据采集是在下降沿Mode3:CPOL=1,CPHA=1 常用 空闲SCK=1 数据采样是在上升沿***...
2020-09-28 22:40:51 2211
原创 C语言,有宏定义,没有实现的实体
C语言,有宏定义,没有实现的实体在编译的时候调用不会报错比如: #define mtCOVERAGE_TEST_MARKER()这样可以预留后期实现变更,编译的时候也相当于没调用 else { mtCOVERAGE_TEST_MARKER(); }...
2020-09-20 18:24:27 908
原创 单片机非调试模式下死机如何定位错误
一、 Hard fault 产生原因硬件方面常见原因:1. 电源设计有错误,造成器件供电不稳;2. 电源质量不好,文波,噪声过大;3. 器件接地不良;4. 对于带有 Vcap 引脚的器件,管脚处理不当;5. 电路中有强干扰源,对器件造成干扰;软件方面常见原因:1. 使用了空指针;2. 对地址偏移量的计算有误;3. 数组越界导致程序出错;4. 动态内存使用不当,导致访问了已释放的内存地址;5. 通过地址访问了已失效的局部变量;一般因为硬件造成 Hard Fault 错误的可能性较低.
2020-09-15 13:28:09 828 1
原创 单片机硬错误排查方法
HardFault 错误调试定位方法1、首先更改 startup.s 的启动文件,把里面的 HardFault_Handler 代码段换成下面的代码:HardFault_Handler\PROCIMPORT hard_fault_handler_cTST LR, #4ITE EQMRSEQ R0, MSPMRSNE R0, PSPB hard_fault_handler_cENDP2、然后把 hard_fault_handler_c 函数放在 c 文件的代码中。代码如下:void.
2020-09-15 13:17:44 1479
原创 UTC转换时间,测试过直接使用
#include "stdio.h"typedef struct{ unsigned char my_seconds; unsigned char my_minutes; unsigned char my_hour; unsigned char my_day; unsigned char my_month; unsigned char my_week; un...
2020-08-27 14:49:00 313
原创 CRC16-MODBUS 已经测试ok拿来就用
#include "stdio.h"unsigned short MY_CRC16_MODBUS(unsigned char *buff,unsigned int size){ unsigned short tmp = 0xffff; unsigned short ret1 = 0; unsigned short n=0,i=0; for(n = 0; n < size; n++){ tmp = buff[n] ^ tmp; f...
2020-08-17 16:04:13 163
原创 浮点转字符串,拿来就用
void float_to_str(char *str,double num){ int high;//float_整数部分 double low;//float_小数部分 char *start=str; int n=0; char ch[20]; int i; double tp = 0.1; high=(int)num; low=num-high; while(high>0){ ...
2020-07-14 19:53:55 176
原创 再谈ADC过采样
在大多数情况下,10位的分辨率就足够了。但在某些情况下需要更高的精度。采用特殊的信号处理技术可以提高测量的分辨率。通过使用一种称为“过采样和抽取”的方法,可以实现更高的分辨率,而不使用外部ADC。此应用程序说明说明了该方法,以及需要满足哪些条件才能使该方法正常工作。下面的例子和数字是为自由运行模式下的单端输入计算的。没有使用ADC降噪模式。这种方法在其他模式中也是有效的,尽管下面例子中的数字会有所不同。ADC参考电压和ADC分辨率定义ADC步长。ADC的参考电压VREF可以选择为内部2...
2020-07-13 20:59:48 17685 7
原创 linux内核SPI总线驱动(二)
上一节讲到了spi_register_master注册SPI控制器驱动这一节描述调用spi_register_driver注册spi_driver,通过与device匹配驱动设备。使用m25p10a举例spi_register_driver功能跟名称一样根据传入的spi_device参数,可以找到对应的spi_master。接下来就可以利用spi子系统为我们完成数据交互了。定义了prob函数在prob里向上提供接口即可spi_de...
2020-07-05 13:48:01 704
SDIO协议.rar
2020-08-10
man-pages-5.07.tar.gz
2020-06-14
Cortex-A53官方文档集合.rar
2020-05-31
linux内核反汇编文件
2020-05-17
Cortex-M0 +官方全部手册.rar
2020-05-06
老师不会讲的——高手的开关电源设计心得.docx
2019-09-08
电源基本原理知识问答.docx
2019-09-08
11个提高开关电源效率的小技巧.docx
2019-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人