<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[jhb的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jhb222</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jhb222]]></copyright><item><title><![CDATA[神仙GDB调试工具 gdb-dashboard]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/121505530</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/121505530</guid><author>jhb222</author><pubDate>Tue, 23 Nov 2021 23:31:01 +0800</pubDate><description><![CDATA[摆脱IDE的生产力调试工具 GDB-Dashboard]]></description><category></category></item><item><title><![CDATA[GDB终端较小时运行停止等待输入解决办法]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/121029056</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/121029056</guid><author>jhb222</author><pubDate>Fri, 29 Oct 2021 10:12:43 +0800</pubDate><description><![CDATA[在使用gdb进行调试时，我们希望可以自动运行一些脚本命令，但是当打开的终端窗口界面比较小的时候，会出现如下提示，无法继续运行，需要输入c才能继续运行。


--Type &lt;RET&gt; for more, q to quit, c to continue without paging--

查询了GDB官方的文档手册，可以通过相关参数设置修改这个问题

我的解决方法是下面的参数选项：


--batch

gdb --batch

这样就可以让脚本执行一次到头




...]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（六）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120984627</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120984627</guid><author>jhb222</author><pubDate>Wed, 27 Oct 2021 00:46:39 +0800</pubDate><description><![CDATA[以嵌入式工程师的角度来实现一个简单的操作系统！


1. 前言

继上节课的内容之后，我们距离激动人心的目标还剩下一小步了

现在已经实现了有组织的创建任务，何为有组织，就是创建的任务都有迹可循

现在该思考下一个问题？



2. 继续任务调度

下一个问题是什么呢？

就是现在有N个任务在你面前，现在我们假设他们的任务优先级都是相同的，如何实现让他们轮流执行？

也就是有N个有效任务，每次进入中断选出一个任务去执行，最终实现每个任务都可以的到运行，并且运行的时间或机会是相同的。



在这个图片中...]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（五）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120963831</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120963831</guid><author>jhb222</author><pubDate>Tue, 26 Oct 2021 00:47:51 +0800</pubDate><description><![CDATA[以嵌入式工程师的角度来实现一个简单的操作系统！


1. 前言

上一节我们已经实现了非常简单的操作系统任务创建、任务调度、任务切换等。你看出来了吗？

我们在简单的回顾一下这些功能是怎么对应的？


任务创建：



/*创建一个任务*/
task_init(&amp;taska,taska_stack+sizeof(taska_stack),taska_fun);



任务调度与任务切换



/*在定时器中断中，进行任务切换
*现在的调度策略：一共2个任务，轮流执行，每次在定...]]></description><category></category></item><item><title><![CDATA[Gnome shell 主题配置解析]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120943457</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120943457</guid><author>jhb222</author><pubDate>Sun, 24 Oct 2021 23:08:36 +0800</pubDate><description><![CDATA[什么是 GNOME SHELL？

GNOME shell 是 GNOME 桌面的用户界面，是 GNOME 3 的关键技术。它提供了一些基本的用户界面功能，比如切换窗口，启动应用程序或者显示通知。

例如Ubuntu20.04版本操作系统，使用的用户界面就是GNOME3

1. Gnome shell 组成

GNOME shell 用户界面的一些主要组件有：


	顶部菜单栏(top bar)

	屏幕顶部的水平导航栏提供对一些 GNOME shell 基本功能的访问路径，比如“活动概览”，时钟和日历、.]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（四）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120877869</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120877869</guid><author>jhb222</author><pubDate>Thu, 21 Oct 2021 00:08:09 +0800</pubDate><description><![CDATA[一、前言

上一节我们实现了2个在任务中主动调用，实现任务切换的函数接口，其具有一下几个功能：


	从一个循环的任务切换到另一个循环的任务
	
	
	切换回来之后，从切换之前被打断的位置继续执行
	
	
	这是函数调用做不到的，函数调用只能从函数开始位置执行
	
但是一个操作系统，大部分的调用场景会发生在定时器中断处理中，在中断环境下，我们还需要定义并实现中断环境的任务切换。

中断环境除了要保存任务的状态以外，中断本身也需要保存一些现场状态，因为中断对正常执行的程序来说，可能会发生在任意一个指令之间..]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（三）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120818569</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120818569</guid><author>jhb222</author><pubDate>Mon, 18 Oct 2021 00:11:09 +0800</pubDate><description><![CDATA[实现2个以上的任务互相切换


​ 目标与计划：

使用最简单的操作，最低的效率，最笨的方法，实现一个操作系统
	计划支持任务切换、任务调度、内存管理、任务间同步机制、任务间通信机制
	修改实现方式、提升性能与效率


一、任务切换的程序

​ 今天继续学习任务切换的coding，在这之前，我阅读了rtthread的代码中qemu-arm-v9平台以及aarch64平台的部分任务切换相关的程序，并且使用单步调试跟踪了代码，有了一些基本的理解和掌握。现在就根据自己的理解，在现在的软件代码平台进行相关的实现。
]]></description><category></category></item><item><title><![CDATA[芯片与寄存器]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120755793</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120755793</guid><author>jhb222</author><pubDate>Thu, 14 Oct 2021 01:11:25 +0800</pubDate><description><![CDATA[芯片与寄存器

作为一个嵌入式开发人员，从接触第一块单片机的时候，就一定会听到一个此，叫做寄存器。

单片机的很多功能都是通过配置修改寄存器来实现的。我们了解寄存器，也读写过很多的寄存器



一、操作过得寄存器

先回顾一下我们以前操作过得寄存器：


这是一段51单片机初始化定时器的代码



void TIME_Init()
{
    TMOD = 0x11;         
    TL0 = 0;          
    TH0 = 0;
    TL1...]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（二）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120734217</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120734217</guid><author>jhb222</author><pubDate>Tue, 12 Oct 2021 22:56:22 +0800</pubDate><description><![CDATA[使用最简单的操作，最低的效率，最笨的方法，去做出一个像是操作系统一样的东西

然后在一步一步去改善性能，完善功能

我是一名嵌入式软件开发者，从很早之前上学开始就已经了解过一些rtos的操作系统，但是因为种种原因没能深入学习下去，现在重新出发，通过已经积累的知识，参考已有的RTOS等等系统，从一个小白的思考一步步做下去


本节主题：嵌入式操作系统的任务与任务切换

一、前言

在上一篇文章中，零零散散介绍了操作系统为什么要以任务来划分，操作系统与裸机运行的区别以及带来的优势。现在重新再回回顾一下。
...]]></description><category></category></item><item><title><![CDATA[ubuntu 为通过源码安装的软件添加图标]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120714215</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120714215</guid><author>jhb222</author><pubDate>Mon, 11 Oct 2021 23:31:46 +0800</pubDate><description><![CDATA[一、图标描述文件

1、当我们通过源码安装一个软件时候，无法通过点击图标打开该软件，在程序菜单中不会出现该程序

2、我们可以自己添加一个图标描述文件为应用添加启动图标

3、Ubuntu程序的默认启动图标描述文件存放在/usr/share/applications目录中，我们可以在这个目录下看到很多后缀为desktop的文件，就是对应一个个图标



二、定义自己的描述文件

我们新建一个图标描述文件typora.desktop

在文件内添加如下描述


[Desktop Entry]
Version=]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（一）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120692743</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120692743</guid><author>jhb222</author><pubDate>Sun, 10 Oct 2021 21:32:57 +0800</pubDate><description><![CDATA[操作系统中的任务与任务切换

1. 为什么要有任务？


我们常常见到操作系统，也常常要学习操作系统，从一个小白的角度看，任何事情都有其对立的东西，或者说事务都是一步步发展的，既然有操作系统这个东西，那么也必然有无操作系统的软件。

如果大家都有学习把玩过单片机，比如51单片机或者是STM32单片机，那么应该是都有无操作系统时代这样的经历。无操作系统时代，可以看作是有一个任务的操作系统。无操作系统时，软件的流程是怎么样子的？



无操作系统，裸机环境



/*
*无操作系统：
...]]></description><category></category></item><item><title><![CDATA[vscode arm/aarch64架构交叉调试GDB调试配置]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120691959</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120691959</guid><author>jhb222</author><pubDate>Sun, 10 Oct 2021 20:46:30 +0800</pubDate><description><![CDATA[vscode arm/aarch64架构交叉调试GDB调试配置

在ubuntu环境下使用qemu进行armv8架构处理器调试开发时候，可以使用vscode配合gdb进行在线调试，查看变量和寄存器。

一. 调试配置方法


	在vsocde软件左侧导航界面点击 run and debug 按钮，进入到调试配置，选择创建launch.json，创建调试配置文件
	
	
	vscode工具会自动创建默认的调试文件，我们需要根据实际情况修改相关内容
	

{
  // 使用 IntelliSense 了解相..]]></description><category></category></item><item><title><![CDATA[嵌入式工程师实现一个简单的操作系统（引言）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/120570416</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/120570416</guid><author>jhb222</author><pubDate>Thu, 30 Sep 2021 17:41:12 +0800</pubDate><description><![CDATA[一、嵌入式工程师学习操作系统的准备之路
​		本人是从事嵌入式软件方面，日常的软件工作都会和具体的处理器，电路板相结合。所以在思考以及去做一个操作系统的时候，除了学习操作系统本身的算法或者逻辑之外，还需要耗费很大的精力去做一些硬件的准备工作。毕竟我也更喜欢实践，希望自己的逻辑可以跑起来，看看实际的效果。
1、准备一个合适的开发板
硬件的准备工作需要耗费很多的资源，首先你要购买开发板，还要购买下载器。开发板还有考虑使用什么性能的，是CONTEX-M3 这种单片机，还是CONTEX-A7等一些待遇MMU、CAC]]></description><category></category></item><item><title><![CDATA[树莓派 pico pio 可编程io]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/116779096</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/116779096</guid><author>jhb222</author><pubDate>Fri, 14 May 2021 08:30:50 +0800</pubDate><description><![CDATA[3.2. 开始使用PIO
3.2.1. 第一个PIO程序
在了解pio汇编语言的所有细节之前，我们需要花点时间看一下这件简短但是完整的应用过程：
​	1、加载程序到pio的指令内存
​	2、设置pio状态机运行程序
​	3、当状态机运行起来之后，与他进行互动
这些操作主要需要已下几个内容：

一个 PIO 程序
一些 c 程序
cmake file描述文件，描述这两个部分如何组成一个程序镜像然后加载到RP2040开发板

3.2.1.1 PIO 编程
第一个pio程序，使用pio 汇编语言
.program]]></description><category></category></item><item><title><![CDATA[记录一次使用STM32L4ER9 开发板遇到的问题]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/89928824</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/89928824</guid><author>jhb222</author><pubDate>Tue, 07 May 2019 20:31:47 +0800</pubDate><description><![CDATA[使用 stm32 L4R9 系列单片机 如果使用可PG得IO 一定记得打开VDDIO2电源 否则引脚不工作 好多东西无法正常运行
]]></description><category></category></item><item><title><![CDATA[记录一次从stm32F1向F4移植模拟iic的困惑]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/81012096</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/81012096</guid><author>jhb222</author><pubDate>Thu, 12 Jul 2018 11:15:23 +0800</pubDate><description><![CDATA[通讯的IC 是FDC2214 ,在F1运行时通讯正常，移植到F4时只需要修改下引脚IO的初始化，以及输入输出方向。但是在测试时候发现了一个问题，在向FDC2214写入数据时，MSB的最高位始终无法写入 。这里是对使用F103和f407对寄存器进行读写操作的测试结果。读取寄存器数值寄存器F407F103写入初值RCOUNT_CH0347B34FB34FBSETTLECOUNT_CH0001B001B...]]></description><category></category></item><item><title><![CDATA[ucos源码分析（一）]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/79179365</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/79179365</guid><author>jhb222</author><pubDate>Sat, 27 Jan 2018 11:52:59 +0800</pubDate><description><![CDATA[时间:2018.01.27 本人目前是大三学生　电子信息工程专业，在大学前俩年的时间，一直在使用和学习单片机，不过也仅仅是从５１到３２，马上要面临就业，最近开始学习linux ，驱动方面知识，看了几天视频，感觉看不下去了，昨晚突发奇想，下载了ｕｃｏｓ的源码，想要分析一下这个小的嵌入式系统。本人将从头开始，通过调试追踪，对源代码进行细致分析。　
希望自己可以坚持下去。开发环境是linux+ecli]]></description><category></category></item><item><title><![CDATA[mini2440蜂鸣器冲突]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/79143285</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/79143285</guid><author>jhb222</author><pubDate>Tue, 23 Jan 2018 18:59:59 +0800</pubDate><description><![CDATA[使用友善之臂的ｍｉｎｉ２４４０开发板时　　在学习韦东山老师的二期视频在ｌｃｄ实验会有蜂鸣器一直响
原因是应为在硬件设计时的不同　　导致引脚冲突
解决方法：找到内核的　　/driver/video/s3c2410fb.c 文件　去掉与gpb0相关代码]]></description><category></category></item><item><title><![CDATA[ESP32 MAKE MONITOR]]></title><link>https://blog.youkuaiyun.com/jhb222/article/details/78099545</link><guid>https://blog.youkuaiyun.com/jhb222/article/details/78099545</guid><author>jhb222</author><pubDate>Tue, 26 Sep 2017 16:12:06 +0800</pubDate><description><![CDATA[ESP 32  ubuntu  配置环境以后　无法启动make monitor 
解决办法：重新安装pyserial 　　原来版本过低]]></description><category></category></item></channel></rss>