自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jiang_2018的博客

flag置起来

  • 博客(179)
  • 资源 (3)
  • 收藏
  • 关注

原创 8080接口

8080接口是由英特尔设计,是一种并行、异步、半双工通信协议,作用是用于外扩RAM、ROM,后面也用于LCD接口先拉低选中器件,如果要写入数据RS=1,写入命令RS=0,再把WR=0,向D[0:15]准备好数据,在WR上升沿,把数据写入器件,最后CS=1,释放器件,RD始终保持高电平写数据伪代码RS=1;CS=0;D[0:15]=data;WR=0;WR=1;CS=1;写命令伪代码RS=0;CS=0;D[0:15]=data;WR=0;WR=1;CS=1;拉低CS选中器件,如果要

2022-06-13 17:55:22 2679 1

原创 GDB格式化打印结构体

参考GDB pretty-printset print pretty onGDB 打印数组索引set print array-indexes on例子#include <stdio.h>#include <stdlib.h>typedef struct{ int a; char*str; int b;}t1_t;typedef struct{ int a; int b; char*str1; int c; int arr1[10]; in

2022-05-20 17:04:09 2938

原创 GDB调试宏

参考GDB需要调试宏只需用-g3选项编译-g 默认选项,同-g2-g0 不生成任何调试信息,和编译时不加“-g”是一样的。-g1 生成最少量的调试信息,这些信息足够用来通过backtrace查看调用栈符号信息。主要包括了函数声明、外部变量和行号等信息,但是不包含局部变量信息。这个选项比较少用。-g2 生成足够多的调试信息,可以用GDB进行正常的程序调试,这个是默认选项。-g3 在-g2的基础上产生更多的信息,如宏定义。...

2022-05-20 16:34:28 745

原创 GDB动态打印

参考GDB Dynamic Printf在不修改程序源码的情况下,随时在程序的任何地方添加格式化打印格式dprintf location,format string,arg1,arg2,...例子#include <stdio.h>#include <stdlib.h>int main(int argc,char *argv[]){ int i,a,b; a = 1; b = 2; for(int i=0;i<5;i++) { a

2022-05-20 16:05:33 250

原创 GDB自定义命令,打印链表

参考gdb打印链表时需要自己一个一个打印比较麻烦,可以写个命令自动打印,提高效率例子list.c#include <stdio.h>#include <stdlib.h>typedef struct test_type{ int value; char str[64]; struct test_type *next;}type_t;type_t *type_new(int value){ type_t *type = (type_t*)malloc(s

2022-05-20 15:10:03 667

原创 ozone调试

对于keil编译的工程没法用gdb调试(我没发现方法),那就用Ozone调试,官网https://www.segger.com/products/development-tools/ozone-j-link-debugger/下面演示怎么建工程1 创建新工程2.选择设备3.选择jlink4.选择axf文件也可以手动输入Reset的pc和sp的值5,如下警告是发现了你连接的设备运行在FreeRTOS但是没找到插件,先直接继续6.保存工程7.编辑后缀.jdebug的文件,把F

2022-05-11 16:06:15 3015 1

原创 jlink_gdb_server

gdb、gdb_server、jlink关系如下原文https://blog.csdn.net/qq_40833810/article/details/1067134621 windows端打开segger jlink GDB Server,如下设置此时jlink已经连上,gdb等待连接2.在wsl中,如下命令,连上gdb3 命令c使程序继续往下运行,直到再次遇到断点或程序结束ctrl + c使正在运行的程序停下俩b设置断点,例如b 行号/函数名info b查看断点in

2022-05-10 15:23:39 2524

原创 FreeRTOS任务通知实现步骤

任务通知数据结构任务通知不用创建,本身就在TCB中,如下分别是通知值和通知状态,状态有如下3种等待通知step1.关中断step2.如果ucNotifyState !=taskNOTIFICATION_RECEIVED ulNotifiedValue 清除 ulBitsToClearOnEntry ucNotifyState设置成taskWAITING_NOTIFICATION 如果xTicksToWait>0 把自己移到DelayedList阻塞

2022-05-02 13:00:00 412

原创 FreeRTOS事件组实现步骤

文章目录事件组数据结构等待事件组设置事件组中断中设置事件组事件组数据结构可以看到事件组结构体比队列占用资源少多了等待事件组step1.关调度器step2.判断uxEventBits是否满足条件,满足step3 不满足 uxBitsToWaitFor==0,开调度器,返回ERR uxBitsToWaitFor!=0,用xTasksWaitingForBits列表记录当前TCB,并把当前TCB从xReadyTasksLists移调到xDelayedTaskList

2022-05-02 11:15:00 333

原创 FreeRTOS消息队列、信号量、互斥量、递归互斥量实现步骤

消息队列消息队列结构由消息队列控制块+消息存储buffer组成,是全局变量,结构如下消息队列控制块中的链表 List_t xTasksWaitingToSend; //记录发送阻塞的TCB List_t xTasksWaitingToReceive;//记录接收阻塞的TCB读队列步骤 step1.关中断 step2.如果buffer中有数据,goto step3 如果buffer中没数据, 如果xTicksToWait=0,开中断,返回ERR

2022-05-02 10:45:00 809

原创 RTOS临界段如何实现嵌套

存在的问题f1(){ disable_int do_something enable_int}f2(){ disable_int f1(); do_something enable_int}如上代码存在临界段嵌套问题,f1执行完后就打开中断了,所以f2的do_something不处于临界段中解决方法以FreeRTOS为例子非中断中,增加全局变量记录嵌套次数,只有为0时才使能中断中断中,通过备份basepri来实现嵌套,如果存在嵌套,则嵌套中写入basepri的是上

2022-04-19 19:34:49 615

原创 __aeabi_memcpy __aeabi_memcpy4 __aeabi_memcpy8

armcc下memcpy存在字节对齐问题,如果变量地址不对齐但是采用__aeabi_memcpy4、 __aeabi_memcpy8则会hardfault如下代码反汇编armcc解决方式如下How do the ARM Compilers handle memcpy()?Applies to: ARM Developer Suite (ADS), RealView Developer Kit (RVDK) for OKI, RealView Developer Kit (RVDK) for S

2022-04-19 19:32:54 2523

原创 内存泄漏检测

目的实际项目中容易存在内存泄漏问题,为了更快检测出内存泄漏的点,以FreeRTOS heap_4的内存堆策略为例子,加以改进。在debug模式下,每次进行分配释放都进行检测,确保及时发现内存泄漏heap_4原始堆视图节点数据类型如下/* Define the linked list structure. This is used to link free blocks in orderof their memory address. */typedef struct A_BLOCK_LIN

2022-04-16 23:31:57 747

原创 软件看门狗怎么设计

有几个看门狗主控内部有条看门狗,叫做内部狗,有的产品外部有充电ic,也能起到看门狗的作用,一般和主控采用IIC通讯,叫做外部狗。环境以RTOS为例子,介绍看门狗设计设计目的能监控到每个线程是否有执行,并且能细化每个线程的喂狗超时时间设计介绍...

2022-04-16 21:48:20 984

原创 cortex-m3/m4栈回溯

目的更好分析hardfault等问题,需要理解m3、m4的栈是怎样的,更快的定位问题。预备知识内核有如下寄存器:R0~R12,SP(R13),LR(R14),PC(R15),xPSR,在进入异常时内核会自动保存R0 ~ R3,R12,LR,PC,xPSR,对于m4,如果在进入异常前使用了浮点计算还会保存S0 ~ S15,FPSCR寄存器,栈帧如下SP(R13):cortex有2个栈指针,复位后默认使用msp主栈指针,中断中使用的是msp;psp线程栈,rtos中各个任务中就是使用psp。LR

2022-04-09 16:36:34 2155

原创 LVGL lv_chart图标控件(24)

lv_chart表格控件由背景、水平垂直分割线、数据线组成样式例子效果

2021-06-06 18:51:25 2735 8

原创 LVGL lv_page页面控件(23)

lv_page页面控件,是由2个lv_cont容器控件构成,其中一个容器作为lv_page页面控件的背景层,另一个容器作为lv_page页面控件的载体,此载体存放其他任何子对象,当此载体大小超过了lv_page控件自身大小,就可以在水平和垂直方向上滚动,把此容器或此载体简称为scrl。样式例子...

2021-05-11 14:08:18 2806 1

原创 ambiq的apollo链表操作

看ambiq的apollo代码觉得这个链表操作比较方便,记录下。代码思想:如上图,定义一个全局变量结构体,结构体中为指向链表的头指针和尾指针,这样比较方便的向头插入(利用pHead)、向尾插入(利用pTail),可以方便的模拟一个fifo,当向非头尾节点即中间的某个节点插入新节点时则从头节点开始遍历,找到此节点(pPrev)把这个新节点插入到pPrev的后面。应用场合是做升序排列,删除是同样道理。//filename : wsf_queue.h#ifndef WSF_QUEUE_H#define

2021-03-23 19:41:31 477

原创 LVGL lv_msgbox消息对话框(22)

lv_msgboxlv_msgbox由lv_cont容器、lv_label标签、lv_btnmatrix矩阵按键构成样式

2021-03-17 20:45:50 3469

原创 LVGL lv_calendar日历(21)

lv_calendar日历主要由上下2部分组成,上部分叫HEADER,下部分叫BODY样式/** Calendar parts*/enum { LV_CALENDAR_PART_BG, /**< Background and "normal" date numbers style */ LV_CALENDAR_PART_HEADER, /** Calendar header style */ LV_CALENDAR_PART_DAY_NAMES, /** Day nam

2021-03-17 20:45:33 822

原创 LVGL lv_gauge仪表盘(20)

lv_gaugelv_gauge仪表盘是lv_linemeter控件外加标签、指针、中心原点组成,标签个数、指针个数可设置,lv_linemeter中的非活跃刻度线变成了关键数值点。样式/*Styles*/enum { LV_GAUGE_PART_MAIN = LV_LINEMETER_PART_MAIN, LV_GAUGE_PART_MAJOR = _LV_LINEMETER_PART_VIRTUAL_LAST, LV_GAUGE_PART_NEEDLE, _LV_

2021-03-17 20:45:06 2596 2

原创 LVGL lv_linemeter刻度指示器(19)

lv_linemeter刻度指示器分为活跃刻度线和非活跃刻度线,利用可以设置为不同颜色,其中活跃刻度线还能设置渐变效果。样式/*Styles*/enum { LV_LINEMETER_PART_MAIN, _LV_LINEMETER_PART_VIRTUAL_LAST, _LV_LINEMETER_PART_REAL_LAST = _LV_OBJ_PART_REAL_LAST,};typedef uint8_t lv_linemeter_part_t;例子int v

2021-03-17 20:43:18 1429

原创 LVGL lv_btnmatrix矩阵按键(18)

lv_btnmatrixlv_btnmatrix不是真正的lv_btn按钮对象,但是有和lv_btn一样的点击效果,绘出相同按钮下比lv_btn占用内存小。

2021-03-17 20:42:47 2845 2

原创 LVGL lv_switch开关(17)

lv_switchlv_switch本质是lv_slider,先关API在lv_switch.h样式其实和lv_slider一样/** * Switch parts. */enum { LV_SWITCH_PART_BG = LV_BAR_PART_BG, /**< Switch background. */ LV_SWITCH_PART_INDIC = LV_BAR_PART_INDIC, /**< Switch

2021-01-13 10:49:38 1510 2

原创 LVGL lv_slider滑块(16)

lv_sliderlv_slider是由lv_bar进度条和外加旋钮的东西构成,当滑块被点击或拖拽导致进度值变化时会产生LV_EVENT_VALUE_CHANGED事件,若被持续的拖拽,那么LV_EVENT_VALUE_CHANGED也会持续产生,如果希望只获得最后进度值,则监听LV_EVENT_RELEASED事件来获得,相关API在lv_slider.h样式/** Built-in styles of slider*/enum { LV_SLIDER_PART_BG, /** Slide

2021-01-13 10:49:25 1389 3

原创 LVGL lv_line线条(15)

lv_line相关API在lv_line.h,默认原点在左上角,通过 lv_line_set_y_invert(line, true)接口来反转 y 轴,从而使左下角变为原点.例子static void task_cb(lv_task_t* task){ lv_obj_t * *dat = (lv_obj_t **)task->user_data; lv_line_set_y_invert(*dat, !lv_line_get_y_invert(*dat));}void lv_ex_l

2021-01-13 10:49:07 2761 1

原创 LVGL lv_checkbox复选框(14)

lv_checkbox复选框由背景、左边的按钮btn、右边的文本组成,相关API在lv_checkbox.h中样式/** Checkbox styles. */enum { LV_CHECKBOX_PART_BG = LV_BTN_PART_MAIN, /**< Style of object background. */ _LV_CHECKBOX_PART_VIRTUAL_LAST, LV_CHECKBOX_PART_BULLET = _LV_BTN_PART_RE

2021-01-13 10:25:13 1305

原创 LVGL lv_bar进度条(13)

lv_bar进度条包括背景和指示器(INDIC),高和宽决定是水平还是竖直进度条样式/** Bar parts */enum { LV_BAR_PART_BG, /** Bar background style. */ LV_BAR_PART_INDIC, /** Bar fill area style. */ _LV_BAR_PART_VIRTUAL_LAST};typedef uint8_t lv_bar_part_t;例子void lv_ex_bar_1(v

2021-01-13 10:24:22 1205

原创 LVGL lv_arc弧形(12)

lv_arclv_arc,3点方向为0度,6点方向为90度,总共范围0~360度,相关API在lv_arc.h圆弧类型enum { LV_ARC_TYPE_NORMAL, LV_ARC_TYPE_SYMMETRIC, LV_ARC_TYPE_REVERSE};typedef uint8_t lv_arc_type_t;样式有3部分样式/*Parts of the arc*/enum { LV_ARC_PART_BG = LV_OBJ_PART_MAIN,

2021-01-02 20:01:50 988

原创 LVGL lv_led指示灯(11)

lv_led相关API在lv_led.h,亮度0~255样式/*Parts of LED*/enum { LV_LED_PART_MAIN = LV_OBJ_PART_MAIN,};typedef uint8_t lv_led_part_t;例子void lv_ex_led_1(void){ /*Create a LED and switch it OFF*/ static lv_style_t led1_style; lv_style_init(&led1

2021-01-02 17:01:52 975 1

原创 LVGL lv_event事件(10)

lv_eventsLVGL 中任何对象都可以注册事件,相关类型在lv_obj.h中枚举enum { LV_EVENT_PRESSED, /**< The object has been pressed*/ LV_EVENT_PRESSING, /**< The object is being pressed (called continuously while pressing)*/ LV_EVENT_PRESS_LOST

2021-01-02 16:30:37 5534

原创 LVGL lv_btn 按钮(9)

lv_btnlv_btn按钮其实是lv_cont的复杂变体,可以包含子对象,常见的子对象是lv_label标签,相关API在lv_btn.h,lv_btn有6种状态/** Possible states of a button. * It can be used not only by buttons but other button-like objects too*/enum { LV_BTN_STATE_RELEASED, LV_BTN_STATE_PRESSED, L

2021-01-02 14:50:08 3776

原创 LVGL lv_cont 容器(8)

lv_contlv_cont作用是用来解决变化的子对象布局问题,比如父对象中的子对象增加或者减少时原先的布局为了美观其他子对象位置可能需要改变,手动调用lv_set_pos比较繁琐。所以lv_cont主要有Layout和Auto fit 2个特性来解决这个问题。相关API在lv_cont.hlayout 设置类型/** Container layout options*/enum { LV_LAYOUT_OFF = 0, /**< No layout */ LV_LAYOUT

2021-01-01 23:27:03 1406

原创 LVGL lv_font字体(7)

lv_fontfont的声明在lv_font.h中,lvgl自带了很多大小字库就是在这里声明,比如#define LV_FONT_DECLARE(font_name) extern lv_font_t font_name;#if LV_FONT_MONTSERRAT_8LV_FONT_DECLARE(lv_font_montserrat_8)#endif其中LV_FONT_MONTSERRAT_8在lv_conf.h来控制是否包含进去图标字体如下是lvgl自带图标字体,在lv_symbol

2021-01-01 20:51:18 11103 1

原创 LVGL lv_style样式(6)

lv_style每一个基础对象都会有一个lv_style样式,对于复杂些的对象,比如lv_btn按钮就会有多个样式,因为它是由多个基础对象组合而成。利用样式对对象进行重绘来达到UI设计效果,不同的样式来形成主题Theme,相关API在lv_obj_style_dec.h。例子lv_examples\src\lv_ex_style下有11个例子,其中第10个例子/** * Using the transitions style properties 过渡效果样式 */void lv_ex_st

2020-12-29 17:04:14 7424 4

原创 LVGL lv_label标签控件(5)

lv_label相关API在lv_label.h中文本模式enum { /*实时自动扩展标签对象大小来包裹文本内容*/ LV_LABEL_LONG_EXPAND, /**< Expand the object size to the text size*/ //标签对象宽度不变,当文本内容超过标签对象宽度,自动换行文本内容 LV_LABEL_LONG_BREAK, /**< Keep the object width, break the too l

2020-12-26 11:53:21 2735 4

原创 LVGL lv_obj基础对象(4)

lv_obj相关函数在头文件lv_obj.hlvgl所有专用控件(按钮,标签等)都是在lv_obj基础上再添加特性衍生出来,所以所有的对象都有一些共同的属性,如所有对象的删除都如下void lv_obj_del(lv_obj_t * obj);屏幕对象创建屏幕对象lv_obj_t * screen1 = lv_obj_create(NULL, NULL);获取当前活跃的屏幕对象static inline lv_obj_t * lv_scr_act(void)设置为当前活跃的屏幕对

2020-12-23 09:41:37 3452

原创 LVGL task任务系统(3)

lv_task.hlvgl自带任务管理系统,类似于软件定时器,并且支持优先级,相关API在lv_task.h中例子创建任务task,周期1000ms,优先级LV_TASK_PRIO_MID,回调里变量自加,加到10删除此任务。uint8_t test_data = 0;static void task_cb(lv_task_t* task){ uint8_t *dat = (uint8_t*)task->user_data; printf("tick: %d test_data %d\

2020-12-22 14:27:54 6500 3

原创 LVGL 移植记录(2)

准备代码之前clone下来的3份代码说明如下修改lv_conf.h和lv_ex_conf.h1.把lvgl目录下lv_conf_template.h和lv_examples目录下lv_ex_conf_template.h复制到如下路径并去掉文件名的_template2.把这2个文件中的#if 0改成#if 1lv_conf.h是对lvgl组件进行配置lv_ex_conf.h是对lvgl提供的例子进行配置,不是很重要其中lv_conf.h需要配置如下设置屏幕尺寸#define LV_HO

2020-12-22 11:15:08 1902

原创 LVGL PC模拟器(1)

最近要找个GUI,最终选择了LVGL,这里做下记录下载代码选择用visual studio IDE,去下面clonehttps://github.com/lvgl/lv_sim_vscode_sdl.gitclone下来目录如下(忽略si文件夹)visual_studio_2017_sdl文件下目录如下其中方框中的文件夹是空的(如果clone时没用–recursive),直接删掉分别去如下地址clonehttps://github.com/lvgl/lvgl.githttps://g

2020-12-17 16:58:04 3527 2

emq.conf emq配置文件

emqttd-windows10-v2.3.11.zip的tls配置文件、双向认证、单项认证、EMQ Configuration R2

2019-12-04

备份emqttd-windows10-v2.3.11.zip

emqttd-windows10-v2.3.11.zip

2019-12-04

TLS单、双向认证资料

TLS单向认证、双向认证wireshark抓包、单、双向认证客户端log、证书生成脚本、TLS客户端、服务器创建脚本

2019-11-27

空空如也

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

TA关注的人

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