巴特西
首页
Python
Java
PHP
IOS
Andorid
NodeJS
JavaScript
HTML5
rt thread内核基础
RT-Thread--内核基础
内核介绍 内核处于硬件层之上,内核部分包括内核库.实时内核实现. 实时内核的实现包括:对象管理.线程管理及调度器.线程间通信管理.时钟管理及内存管理等等,内核最小的资源占用情况是 3KB ROM,1.2KB RAM. 线程调度 线程是 RT-Thread 操作系统中最小的调度单位,线程调度算法是基于优先级的全抢占式多线程调度算法,即在系统中除了中断处理函数.调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身. 支持 256 个线程优先级(也可通
RT Thread 通过ENV来配置SFUD,操作SPI Flash
本实验基于正点原子stm32f4探索者板子 请移步我的RT Thread论坛帖子. https://www.rt-thread.org/qa/forum.php?mod=viewthread&tid=422726&page=1&extra=#pid469704 下一步有多个选项: 1.精读生成的keil工程代码 2.可在此基础上去使用文件系统,参考文章:
Windows内核基础知识-8-监听进程、线程和模块
Windows内核基础知识-8-监听进程.线程和模块 Windows内核有一种强大的机制,可以在重大事件发送时得到通知,比如这里的进程.线程和模块加载通知. 本次采用链表+自动快速互斥体来实现内核的主要架构. 进程通知 只要在内核里面注册了进程通知那么创建进程就会反馈给内核里面. //注册/销毁进程通知函数NTSTATUS PsSetCreateProcessNotifyRoutineEx( PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,//回
linux内核基础(系统调用,简明)
内核基础(系统调用) 在说系统调用之前.先来说说内核是怎么和我们交互的.或者说是怎么和我们产生交集的. 首先,内核是用来控制硬件的仅仅有内核才干直接控制硬件,所以说内核非常重要,假设内核被控制那么电脑的一切都被控制了,所以我们须要把内核保护起来.所以SHELL 就诞生了,我们绝大多数情况下是在和SHELL 交互,应用程序也执行与SHELL之上.当执行一些进程时.进程会切换进程上下文.这时进程从用户态切换到内核态,也就是常说的内核代表进程执行.可是就算如此内核依旧是被保护起来的.我们始终不能和内核
Linux内核基础优化
Linux内核基础优化 net.ipv4.ip_forward = 1 #开启网络转发 net.ipv4.conf.default.rp_filter = 0 #开启代理功能 net.ipv4.conf.all.rp_filter = 0 #开启代理功能 net.ipv4.conf.eth0.rp_filter = 0 #开启代理功能 net.ipv4.ip_local_port_range = 60999 #限制本地开启的端口号 kernel.pid_max = 1000000 #本地进程数
Windows内核基础知识-1-段寄存器
Windows内核基础知识-1-段寄存器 学过汇编的应该都知道段寄存器,在Windows里段寄存器有很多,之前可能只接触了ds数据段,cs 代码段这种,今天这个博客就介绍Windows一些比较常用的段寄存器. 段:Segment,段寄存器肯定是以s结尾的.通过olldydbg软件可以看到这六个常用的段寄存器 寄存器 描述 ES expand segment扩展段 CS code segment代码段 SS stack segment栈段 DS data segment数据段 FS 取teb的时候
Windows内核基础知识-2-段描述符
Windows内核基础知识-2-段描述符 比如: ES 002B 0(FFFFFFFF) 意思就是es段寄存器,段选择子/段选择符 为002B, 起始地址base为0, 限制范围Limit地址最大能寻找的长度为:FFFFFFFF,表示的是一个范围.从.base到最后最长的地址的相对值. 简单来说就是偏移地址的范围.地址=段寄存器基址base+偏移地址,这个limit可以理解为偏移地址的范围 可以看到所有的段寄存器除了FS别的都是一样的. 获取段寄存器的信息: 如果你正常在调试,用什么WinDbg
Windows内核基础知识-5-调用门(32-Bit Call Gate)
Windows内核基础知识-5-调用门(32-Bit Call Gate) 调用门有一个关键的作用,就是用来提权.调用门其实就是一个段. 调用门: 这是段描述符的结构体,里面的s字段用来标记是代码段还是数据段还是系统段,前面解析的时候讲的是 S==1的情况,也就是Code or data的情况,这次的调用门就是当s==0时的情况. 当s==0时,type的内容如下: 那么调用门其实就是 type为12的情况下的一个段寄存器. 32-Bit Call Gate.32位情况下的一个调用门. 就是一个
windows内核基础与异常处理
前两日碰到了用异常处理来做加密的re题目 所以系统学习一下windows内核相关 windows内核基础 权限级别 内核层:R0 零环 核心态工作区域 大多数驱动程序 应用层:R3 用户态工作区域 只能使用win32 api与系统交互 R0与R3的通信 调用流程 当用户调用一个有关I/O的API时 该API封装在一个用户层的DLL文件中(如kernel32.dll或user32.dll) 此dll函数的更底层函数被包含在ntdll.dll中 即用户调用的系统API在ntdll.dll均有对应 (
STM32 + RT Thread OS 学习笔记[二]
串口通讯例程 通过上面的练习,对STM32项目开发有了一个直观印象,接下来尝试对串口RS232进行操作. 1. 目标需求: 开机打开串口1,侦听上位机(使用电脑串口测试软件)发送的信息,然后原样输送到串口1. 2. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因此,在运行scons命令生成项目文件之前,修改rtconfig.h,禁用这两项.(下图
STM32 + RT Thread OS 串口通讯
1. 创建项目 a) 禁用Finsh和console b) 默认情况下,项目文件包含了finsh,它使用COM1来通讯,另外,console输出(rt_kprintf)也使用了COM1.因此,在运行scons命令生成项目文件之前,修改rtconfig.h,禁用这两项.(下图L65, L70) c) 生成项目文件 运行scons --target=mdk4 –s 打开生成的项目文件,可以看到,文件组finsh已经不再被包含进来了. d) 创建echo.c 新建一个C文件echo
JUC学习笔记--Thread多线程基础
实现多线程的两种方法 java 实现多线程通过两种方式1.继承Thread类 ,2.实现Runnable接口 class Newthead extends Thread{ public void run(){ System.out.println("thread run"); } } class Newthead implements Runnable{ @Override public void run(){ System.out.println("thread run&q
线程Thread的基础知识学习
一.线程的基本概念 1.线程是一个程序内部的顺序控制流. 2.Java的线程是通过java.lang.Thread类来实现的. 3.VM启动时会有一个由主方法{public static void main(Args[] String)}所定义的线程. 4.可以通过创建新的Thread实例来创建新的线程. 5.每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体. 6.通过调用Thread类的start()方法来启动一个线程. 注意:多进程(在
Linux内核基础--事件通知链(notifier chain)
转载: http://blog.csdn.net/wuhzossibility/article/details/8079025 http://blog.chinaunix.net/uid-27717694-id-4286337.html 内核通知链 1.1. 概述 Linux内核中各个子系统相互依赖,当其中某个子系统状态发生改变时,就必须使用一定的机制告知使用其服务的其他子系统,以便其他子系统采取相应的措施.为满足这样的需求,内核实现了事件通知链机制(notificationchain). 通知
深入理解linux网络技术内幕读书笔记(七)--组件初始化的内核基础架构
Table of Contents 1 引导期间的内核选项 2 注册关键字 3 模块初始化代码 引导期间的内核选项 linux运行用户把内核配置选项传给引导记录,然后引导记录再把选项传给内核. 在引导阶段,对parse_args调用两次,负责引导期间配置输入数据. 注册关键字 内核组件可以利用定义在include/linux/init.h中的__setup宏, 注册关键字和相关联的处理函数.以下是其语法: 1: __setup(string, function_handler) string是关
【C#多线程】C#多线程 Thread 开发基础
引用 using System; using System.Threading; 多线程代码 Thread mainthread = new Thread(ExecuteThread); mainthread.IsBackground = true; mainthread.Start(); 线程与进程的异同 地址空间:进程拥有自己独立的内存地址空间:而线程共享进程的地址空间:换句话说就是进程间彼此是完全隔绝的,同一进程的所有线程共享(堆heap)内存: 资源拥有:进程是资源分配和拥有的单位,同
STM32 + RT Thread OS 学习笔记[四]
1. 补注 a) 硬件,打通通讯通道 若学习者购买了学习板,通常可以在学习板提供的示例代码中找到LCD的相关驱动代码,基本上,这里的驱动的所有代码都可以从里面找到. 从上面的示意图可见,MCU要在LCD上显示内容,需要经过: 1. Core 2. Dbus,SystemBus 3. Bus Matrix 4. FSMC 5. SSD1963 6. LCM 驱动LCD,就要相应地将这些通道开启,初始化,只要其中一个环节未打通,就不可能成功点亮LCD屏. 首先是到SSD196
Linux内核基础
Linux系统运行的应用程序通过系统调用来与内核通信.应用程序通常调用库函数(比如C库函数)再有库函数通过系统调用界面,让内核带其完成各种不同的任务. 下面这张图显示的就是应用程序,内核和硬件之间的关系: 在任何时间点上我们都可以将每个处理器的活动概括为以下三者之一: 1.运行于用户空间,执行用户进程 2.运行于内核空间,处于进程上下文,代表某个特定的进程执行 3.运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断 以上所列几乎包括所有的情
深入理解Linux网络技术内幕——内核基础架构和组件初始化
引导期间的内核选项 Linux允许用户把内核配置选项传给引导记录,再有引导记录传给内核,以便对内核进行调整. start_kernel中调用两次parse_args,用于引导期间配置用户输入数据. parse_param是一个函数,用于解析输入的内核配置选项的参数字符串.字符串的格式为:name_variable=value.寻址特定关键字,并调用对应的函数. 注册关键字: 用宏进行定义: __setup(string, fn) string表示关键字,fn表示关
转:Linux设备驱动开发(1):内核基础概念
一.linux设备驱动的作用 内核:用于管理软硬件资源,并提供运行环境.如分配4G虚拟空间等. linux设备驱动:是连接硬件和内核之间的桥梁. linux系统按个人理解可按下划分: 应用层:包括POSIX接口,LIBC,图形库等,用于给用户提供访问 内核的接口.属于用户态,ARM运行在用户模式(usr)或 者系统模式(sys)下. 内核层:应用程序调用相关接口后,会通过系统调用,执行SWI指 令切换ARM的工作模式到超级用户(svc)模式下,根据用 户函数的要求执行相应的操作. 硬件层:硬件设
RT thread 设备驱动组件之USART设备
本文以stm32f4xx平台介绍串口驱动,主要目的是:1.RTT中如何编写中断处理程序:2.如何编写RTT设备驱动接口代码:3.了解串行设备的常见处理机制.所涉及的主要源码文件有:驱动框架文件(usart.c,usart.h),底层硬件驱动文件(serial.c,serial.h).应用串口设备驱动时,需要在rtconfig.h中宏定义#define RT_USING_SERIAL. 一.RTT的设备驱动程序概述 编写uart的驱动程序,首先需要了解RTT的设备框架,这里以usart的驱动来具体
热门专题
spring boot scheduled 集群
http请求时,客户端向服务器发送什么
SELinux、iptables、firewall详细配置
unity获取游戏运行时间
allegro17.2跑db出现错误对话枢有问题么
oc 动态使用 Class
stm32f103GPIO控制LED灯
编辑audit.rule配置永久生效
shell读取某一行有多少单词
正则表达式截取后三位
electron去除标题栏无法移动
unity shader怎么编译
sd_fusing_exynos4x12.sh 从哪里下载
2016的vivdo连接不到开发板
CVE-2021-3129 复现
swift URLSession下载文件
solidworks如何导成html
Vue 页面悬浮组件
oracle 单行查询有多条数据 报错
tail -f 会影响日志文件