<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ShallowGreen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ShallowGreen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ShallowGreen]]></copyright><item><title><![CDATA[LVGL的核心结构体 - 动态内存申请链表]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/128616483</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/128616483</guid><author>ShallowGreen</author><pubDate>Mon, 09 Jan 2023 18:06:48 +0800</pubDate><description><![CDATA[动态申请的双向链表，目的在于用一种数据结构，面对多种应用场景。]]></description><category></category></item><item><title><![CDATA[LVGL 界面跳转逻辑的设计与实现]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/127138855</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/127138855</guid><author>ShallowGreen</author><pubDate>Mon, 03 Oct 2022 15:14:21 +0800</pubDate><description><![CDATA[LVGL 中没有关于界面调度相关的接口，这一块需自己定义界面的跳转逻辑，本文章分享的是一种界面跳转的思路与实现。]]></description><category></category></item><item><title><![CDATA[嵌入式日志管理系统的设计与实现]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/127019253</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/127019253</guid><author>ShallowGreen</author><pubDate>Sat, 01 Oct 2022 23:23:49 +0800</pubDate><description><![CDATA[日志应用定位问题、跟踪数据、采集数据等多个方面，比如定位一些时序性较强的 bug、分析系统运行时的性能、对系统产生的数据进行保存分析等等，这些都是在线调试不能解决的。所以日志在一个系统的扮演一个很重要的角色，一般在开发不支持在线调试的单片机是，第一个要实现在功能就是日志了。]]></description><category></category></item><item><title><![CDATA[关于C代码规范，如何制定自己的编码规范]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/127001172</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/127001172</guid><author>ShallowGreen</author><pubDate>Fri, 30 Sep 2022 20:09:00 +0800</pubDate><description><![CDATA[“一个专业的程序员不仅因该能写出有效和正确的代码，他还因该能以一种可能在多年以后，需要维护它的人能够理解的风格编写的代码”。所以不管是自己独立开发的项目，还是与其他人共同开发的项目，都应该做好代码规范，这样开发和维护的过程就也会变得轻松一点。]]></description><category></category></item><item><title><![CDATA[1. LVGL 8.3 在 Visual Studio 2019 模拟器中的环境搭建]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/123042969</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/123042969</guid><author>ShallowGreen</author><pubDate>Sun, 07 Aug 2022 13:30:08 +0800</pubDate><description><![CDATA[Visual Studio 2019 上搭建 LVGL 8.3 的运行环境



]]></description><category></category></item><item><title><![CDATA[C语言常见问题]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122798412</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122798412</guid><author>ShallowGreen</author><pubDate>Sun, 06 Feb 2022 19:57:40 +0800</pubDate><description><![CDATA[C语言常见问题]]></description><category></category></item><item><title><![CDATA[MQTT协议]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122753783</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122753783</guid><author>ShallowGreen</author><pubDate>Sun, 30 Jan 2022 23:39:47 +0800</pubDate><description><![CDATA[MQTT协议（Message Queuing Telemetry Transport，消息队列遥测传输协议），是一种基于发布/订阅（Publish/Subscribe）模式的轻量级通讯协议，MQTT 最大的优点在于可以以极少的代码和有限的带宽，为远程设备提供实时可靠的消息服务]]></description><category></category></item><item><title><![CDATA[3种字符设备驱动编程]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122745649</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122745649</guid><author>ShallowGreen</author><pubDate>Sat, 29 Jan 2022 18:30:05 +0800</pubDate><description><![CDATA[目录

1 杂项字符设备

核心结构体

操作函数

杂项字符设备注册应用

2 早期经典方式注册

操作函数

经典设备注册应用

3 Linux2.6字符设备

核心结构体

操作函数

Linux2.6设备注册应用

Linux系统借鉴了面向对象的思想来管理设备驱动，每一类设备都会有定义一个特定的结构体来描述它，这个结构体包含了设备的基本信息，以及操作设备方法（函数指针）所以，编写程序实际上就是实现核心结构体，然后把这个结构体注册到内核中。

 驱动程序就是向下控制硬件，向上提供接口,这...]]></description><category></category></item><item><title><![CDATA[内核模块化编程]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122744506</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122744506</guid><author>ShallowGreen</author><pubDate>Sat, 29 Jan 2022 17:00:27 +0800</pubDate><description><![CDATA[目录

内核模块的概念介绍

模块化编程框架

模块加载函数

模块卸载函数

模块的开源协议与声明

模块编译 Makefile 模板

单模块的编程步骤

1 编写内核模块文件test.c

2 编写Makefile

3 编译生成test.ko

内核模块的概念介绍

Linux 内核整体结构已经很庞大，包含了很多的组件，而对于我们工程师而言，有两种方法将需要的功能包含进内核当中。
一：将所有的功能都编译进 Linux 内核(静态加载模块)。
二：将需要的功能编译成模块...]]></description><category></category></item><item><title><![CDATA[裸机启动流程]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122735929</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122735929</guid><author>ShallowGreen</author><pubDate>Fri, 28 Jan 2022 20:33:38 +0800</pubDate><description><![CDATA[目录

初识开发板：

1裸机启动流程：

2烧录代码命令

3交叉编译工具

4编译点亮led灯的代码

初识开发板：

核心板：三星exynos4412猎户座系统芯片；CPU主频 1.4GHZ，基于ARM-cortex A9；四核处理器，同时处理四个进程；内部IROM：内部集成的一个存储的 64k；内部IRAM：256k；外部扩充ROM：4G存储空间，RAM：1G的内存空间。

底板：蜂鸣器：1个；UART口：3个；usb：2个；网口：1个；拨码开关：2个（左边控制电源，右边控制启动位置）；IIC：4套]]></description><category></category></item><item><title><![CDATA[8080协议]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122728432</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122728432</guid><author>ShallowGreen</author><pubDate>Fri, 28 Jan 2022 18:57:34 +0800</pubDate><description><![CDATA[目录

8080协议概述

写周期序列

读周期序列

8080协议概述

8080协议是一种并行、异步、半双工通信协议，可用于单片机控制器与LCD驱动芯片之间的通信。8080的通信端包括：


The chip-select CSX (activelow) is used to enable or disable ILI9341 chip. The RESX(active low) is an external reset signal. WRX is theparallel data write st.]]></description><category></category></item><item><title><![CDATA[CAN总线协议]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122683198</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122683198</guid><author>ShallowGreen</author><pubDate>Thu, 27 Jan 2022 22:28:24 +0800</pubDate><description><![CDATA[CAN ： Controller Area Network(控制器局域网络)的缩写（以下称为 CAN），是 ISO*1 国际标准化的串行通信协议，

]]></description><category></category></item><item><title><![CDATA[Linux工程编译、管理和调试]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122709123</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122709123</guid><author>ShallowGreen</author><pubDate>Wed, 26 Jan 2022 23:02:56 +0800</pubDate><description><![CDATA[目录

工程编译

动态库与静态库的制作

静态库

动态库

补充

调试工具gdb

工程管理工具makefile

工程编译

Ubuntu编译C程序采用的是gcc编译器


			gcc xxx.c //编译xxx.c文件，默认输出可执行文件a.out

			gcc xxx.c -o xxx //输出可命名的执行文件
			
		C语言程序编译的四个阶段

1编译预处理：处理伪指令(头文件\宏\条件编译)
			
			gcc -E xxx.c -o xxx.i
			
		2编译：将代码编译为汇]]></description><category></category></item><item><title><![CDATA[Linux vim编辑器]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122708188</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122708188</guid><author>ShallowGreen</author><pubDate>Wed, 26 Jan 2022 21:23:40 +0800</pubDate><description><![CDATA[vim的安装


apt install vim




vim打开文件操作


vim filename (+num)   //直接打开名字为filename的文件,光标显示的的num行


vim的配置文件 /root/.vimrc、/etc/.vimrc

vim的三种模式

命令模式：使用 Vim 编辑文件时，默认处于命令模式。在此模式下，可以使用上、下、左、右键或者 k、j、h、l 命令进行光标移动，还可以对文件内容进行复制、粘贴、替换、删除等操作。

(n) yy
			Y
			(...]]></description><category></category></item><item><title><![CDATA[2.3 进程的同步与互斥]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122664809</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122664809</guid><author>ShallowGreen</author><pubDate>Mon, 24 Jan 2022 20:25:40 +0800</pubDate><description><![CDATA[目录

一、进程同步与互斥的基本概念

二、进程互斥访问临界区算法

1 单标志法

2 双标志先检查法

3 双标志后检查法

4 Peterson算法

三、信号量互斥访问临界区

一、进程同步与互斥的基本概念

在多道程序环境下，进程是并发执行的，不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系，引入了进程同步的概念。我们举一个简单例子帮大家理解这个概念，比如，让系统计算1+2*3，假设系统产生两个进程:一个是加法进程、一个是乘法进程。为了让计算结果是正确的，那么一...]]></description><category></category></item><item><title><![CDATA[2.2 处理机调度与算法]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122650081</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122650081</guid><author>ShallowGreen</author><pubDate>Sun, 23 Jan 2022 23:58:06 +0800</pubDate><description><![CDATA[目录

一、调度的概念

1 概念

2 调度的层次

二、调度的时机、切换、过程与方式

三、调度算法的基本指标

四、典型的调度算法

一、调度的概念

1 概念

当有一堆任务要处理，但由于资源有限，这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序， 这就是“调度” 研究的问题。
在多道程序系统中，进程的数量往往是多于处理机的个数的，这样不可能同时并行地处理各个进程。处理机调度，就是从就绪队列中按照一定的算法选择一个进程并将处理机分配给它运行，以实现进...]]></description><category></category></item><item><title><![CDATA[2.1 进程的概念与详情、线程]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122635598</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122635598</guid><author>ShallowGreen</author><pubDate>Sat, 22 Jan 2022 20:36:11 +0800</pubDate><description><![CDATA[目录

一、进程的概念和特征

1 进程的概念

2 进程的特征

二、进程的状态与转换

三、进程控制

1 进程的创建

2 进程的终止

3 进程的阻塞和唤醒

4 进程的切换

四、进程的组织

1 进程控制块

2 程序段

3 数据段

五、进程的通信

1 共享存储

2 消息队列

3 管道通信

六、线程和多线程模型

1 线程的基本概念

2 线程与进程的比较

3 线程的属性

4 线程的实现方式

5 多线程模型

一、进程的概念和特征

1 进程的概念

在多道程序...]]></description><category></category></item><item><title><![CDATA[二、进程管理]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122630991</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122630991</guid><author>ShallowGreen</author><pubDate>Sat, 22 Jan 2022 12:09:40 +0800</pubDate><description><![CDATA[进程管理、内存管理、文件系统、设备管理、网络系统
]]></description><category></category></item><item><title><![CDATA[SPI协议]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122583635</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122583635</guid><author>ShallowGreen</author><pubDate>Fri, 21 Jan 2022 21:45:09 +0800</pubDate><description><![CDATA[spi
]]></description><category></category></item><item><title><![CDATA[单总线协议]]></title><link>https://blog.youkuaiyun.com/ShallowGreen/article/details/122583656</link><guid>https://blog.youkuaiyun.com/ShallowGreen/article/details/122583656</guid><author>ShallowGreen</author><pubDate>Fri, 21 Jan 2022 17:23:15 +0800</pubDate><description><![CDATA[单总线协议
]]></description><category></category></item></channel></rss>