中断服务程序

vxworks开发基础

自作多情 提交于 2019-12-06 12:40:44
vxworks开发基础 小狼@http://blog.csdn.net/xiaolangyangyang vxworks开发总体框架 一、RTP开发 RTP应用开发入口: usrAppInit.c -> usrAppInit() 二、wind kernel配置/驱动开发 wind kernel配置头文件: prjComps.h、configAll.h、config.h、prjParams.h wind kernel配置也可以在开发环境中使用可视化界面配置 vxworks添加组件的一般步骤: 选择适当的目录 -> 根据读取顺序为CDF文件取名 -> 组件命名 -> 描述与代码相关的内容 -> 设定组件初始化入口 -> 建立初始化顺序 -> 链接帮助文件 -> 定义依赖关系 -> 定义从属关系 三、BSP开发 vxworks bsp移植一般步骤(参照相似BSP包修改): 修改内存尺寸定义 -> 修改Cache驱动 -> 修改中断控制器程序 -> 修改时钟控制器程序 -> 修改串口程序 -> 添加网络设备驱动 -> 修改人机接口 -> 为其他硬件增加驱动程序 主要在sysLib.c中需要用户实现以下系统调用: 1. sysClkConnect() 为系统时钟中断挂接服务程序 2. sysClkDisable() 关闭系统时钟中断 3. sysClkEnable() 打开系统时钟中断 4.

VxWorks实时操作系统特点介绍

痴心易碎 提交于 2019-12-06 12:37:35
VxWorks 是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。Tornado 是WRS 公司推出的一套实时操作系统开发环境,类似MicrosoftVisual C,但是提供了更丰富的调试、仿真环境和工具。 VxWorks的特点 1、VXWORKS既是一个操作系统、又是一个可以运行的最小基本程序 2、VXWORKS有BSP(可以认为是一种低层驱动),可以减小驱动程序的编写过程 3、VXWORKS具有强大的调试能力,可以在没有仿真器的情况下,通过串口调试。 4、VXWORKS具有软件DEBUG功能,可以对软件部分进行模拟调试。 5、VXWORKS具有丰富的函数库。 6、同时VXWORKS自带TCP/IP协议栈。 最大可能的减小开发者系统软硬件开发的难度,缩小开发周期,提高开发效率。 可以部分的保证软硬件开发的同步进行。 一个好的操作系统的几大特点: ● 多任务和可抢占的 ● 任务具有优先级 ● 操作系统具备支持可预测的任务同步机制 ● 支持多任务间的通信 ● 操作系统具备消除优先级转置的机制 ● 存储器优化管理 ● 操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的。 ● 实时时钟服务 ● 中断管理服务 可靠性 操作系统的用户希望在一个工作稳定,可以信赖的环境中工作

VxWorks基本OS介绍

前提是你 提交于 2019-12-06 12:36:41
这里我就偷点懒,直接复制粘贴文档了。可能会有一些图片无法显示 ,可以直接管我索要文档。 每一个被切换的程序实体就是“任务”。每一个任务都有其自己的上下文——所谓上下文就是指任务在每一次被核心调度时所需要的 CPU环境、系统资源。在上下文的切换过程中,每一个任务的上下文被存在该任务的任务控制块中(TCB )。 ◆ 执行的线程,也就是任务程序计数器; ◆ CPU 寄存器的内容和浮点寄存器中的内容; ◆ 动态变量和程序调用所使用的堆栈; ◆ 标准输入输出的I/O 分配和错误; ◆ 延时计时器; ◆ 时间片计时器; ◆ 核心控制结构; ◆ 信号处理句柄; ◆ 调试和性能监视值。 wind核心中使用了基于优先级抢占式的任务调度策略,但是用户也可以选择优先级轮转调度策略。 1.优先级抢占策略 通过使用优先级抢占策略,每一个任务都会拥有一个优先级,这样内核就会确信将 CPU资源分给了优先级最高的就绪任务。这种方法之所以叫做抢占式的,是指任何运行的任务会被一个变成就绪状态而且优先级更高的任务打断,这时系统会保存当前任务的上下文并立即切换到高优先级的任务上下文,并且开始执行这个任务。在图14.2所示的任务优先级抢占图中给出了优先级抢占的例子,例子中任务t1被优先级较高的任务t2抢占,而更高优先级的任务t3则抢占了t2的执行,当t3执行完后,t2开始继续执行,接下来t1在t2

利用AXI-DMA批量发送数据到DMA

旧街凉风 提交于 2019-12-06 04:55:43
1.1 主函数 int main ( void ) { XGpio_Initialize(&Gpio, AXI_GPIO_DEV_ID); XGpio_SetDataDirection(&Gpio, 1, 0); init_intr_sys(); XGpio_DiscreteWrite(&Gpio, 1, 1); axi_dma_test(); } 1.2 三个简单函数 (1)、XGpio_Initialize(&Gpio, AXI_GPIO_DEV_ID); 本语句对GPIO进行初始化,对实例数据进行配置。 (2)、XGpio_SetDataDirection(&Gpio, 1, 0); 设置GPIO的方向,向通道1写0,0:输出,1:输入。 (3)、XGpio_DiscreteWrite(&Gpio, 1, 1); 设置GPIO的输出为1。 一、 init_intr_sys函数分析 1、DMA_Intr_Init(&AxiDma,0); DMA中断实例化函数,将要配置的DMA信息先lookupConfig再进行CfgInitialize,DMA采用块模式(Block mode),如果是Sg模式,则配置失败。 2、Timer_init(&Timer,TIMER_LOAD_VALUE,0); 定时器初始化函数,传入参数有定时器结构、加载值,设备ID

FreeRTOS----调度器

我们两清 提交于 2019-12-06 02:39:20
FreeRTOS----调度器 调度器的启动流程分析 当创建完任务之后,会调用vTaskStartScheduler()函数,启动任务调度器; void vTaskStartScheduler( void ) { /* 部分代码如下: */ BaseType_t xReturn; xReturn = xTaskCreate( prvIdleTask, configIDLE_TASK_NAME, configMINIMAL_STACK_SIZE, ( void * ) NULL, portPRIVILEGE_BIT, &xIdleTaskHandle ); #if ( configUSE_TIMERS == 1 ) { if( xReturn == pdPASS ) { xReturn = xTimerCreateTimerTask(); } else { mtCOVERAGE_TEST_MARKER(); } } #endif /* configUSE_TIMERS */ if( xReturn == pdPASS ) { #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT { freertos_tasks_c_additions_init(); } #endif portDISABLE_INTERRUPTS(); #if ( configUSE

外部中断实验

旧时模样 提交于 2019-12-05 15:03:29
实验目的:通过板载的4个按键控制板载两个LED的亮灭以及蜂鸣器的发声。 一、STM32的每个I/O口都可以作为中断输入,要把I/O口作为外部中断输入,有以下几个步骤。 ①、初始化I/O口为输入 ②、开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。 ③、开启与该 IO 口相对的线上中断/事件,设置触发条件。 ④、配置中断分组(NVIC),并使能中断。 ⑤、编写中断服务函数。 二、软件设计 exti.c文件 #include "exti.h" #include "led.h" #include "key.h" #include "delay.h" #include "usart.h" //外部中断 0 服务程序 void EXTI0_IRQHandler(void) { delay_ms(10); //消抖 if(WK_UP==1) //WK_UP 按键 { LED0=!LED0; LED1=!LED1; } EXTI->PR=1<<0; //清除 LINE0 上的中断标志位 } //外部中断 9~5 服务程序 void EXTI9_5_IRQHandler(void) { delay_ms(10); //消抖 if(KEY0==0) LED0=!LED0; //按键 0 EXTI->PR=1<<5; //清除 LINE5 上的中断标志位 } //外部中断 15~10

CPU上下文切换详解

二次信任 提交于 2019-12-05 13:54:12
我们都知道CPU上下文切换,会增加系统负载。那什么是CPU上下文,为什么要切换? 什么是CPU上下文 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同,CPU的上下文切换可以分为不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。 进程上下文切换 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。 内核空间(Ring 0)具有最高权限,可以直接访问所有资源;

STM32_ADC

女生的网名这么多〃 提交于 2019-12-04 22:03:56
裸机--ADC 简介 STM32f103 系列有 3 个 ADC,精度为 12 位,每个 ADC 最多有 16 个外部通道。 其中ADC1 和 ADC2 都有 16 个外部通道,ADC3 根据 CPU 引脚的不同通道数也不同,一般都有8 个外部通道。 功能 电压输入范围: ADC 输入范围为:VREF- ≤ VIN ≤ VREF+。由 VREF-、VREF+ 、VDDA 、VSSA、这四个外部引脚决定. 一般把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3V3,得到ADC 的输入电压范围为:0~3.3V。 电压范围变宽 外部电压转换为0-3.3V. 输入通道 外部通道(最多16道) ADCx_IN0~~ADCx_IN15 内部通道 ADC1 的通道 16 连接到了芯片内部的温度传感器,Vrefint 连接到了通道 17。 ADC2 的模拟通道 16 和 17 连接到了内部的 VSS。 ADC3 的模拟通道 9、14、15、16 和 17 连接到了内部的 VSS。 规则通道 注入通道 触发源 ADC控制写0/1 定时器触发 外部IO触发 转换时间 时钟 ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M, 采样时间 采样周期最小1.5个周期 Tconv = 采样时间 +12.5 个周期。当 ADCLK = 14MHZ (最高)

I/O管理杂记

纵然是瞬间 提交于 2019-12-04 20:59:14
  这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,去理解机制而不是纠结于如何具体的实现。即使目的相同,不同的公司或开发者在不同场景下的实现也不尽相同,了解几个例子加深自己的理解、帮助自己构建起知识体系即可(个人观点)。 设备控制器   设备控制器是计算机中的一个实体,其主要职责是 控制一个或多个I/O设 备,以实现I/O设备和计算机之间的数据交换。它是 CPU与I/O设备之间的接口 ,它接收从CPU发来的命令,并去控制I/O设备工作, 以使处理机从繁杂的设备控制事务中解脱出来 。设备控制器是一个 可编址 的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:一类是用于控制 字符设备 的控制器,另一类是用于控制 块设备 的控制器。在微型机和小型机中的控制器,常做成印刷电路卡形式,因而也常称为接口卡,可将它插入计算机。有些控制器还可以处理两个、四个或八个同类设备。   控制器由

2019-2020-2-20175301 20175305 20175318-实验二固件程序设计

非 Y 不嫁゛ 提交于 2019-12-04 18:16:44
实验一 开发环境的熟悉 本小组成员 20175301 20175305 20175318 一、实验步骤 1-MDK 实验要求 1.参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.1-1.5安装MDK,JLink驱动,注意,要用系统管理员身分运行uVision4,破解MDK(破解程序中target一定选ARM) 2.提交破解程序中产生LIC的截图 3.提交破解成功的截图 实验步骤 按照实验指导书上的操作进行软件安装-->运行 uVision4,点 File>>License Management-->复制 CID-->运行keil-MDK注册机(在“Z32开发指南\2.软件资料\keil-MDK 注册机”双击“keil mdk474注册机”)-->粘贴 CID 并选择 ARM。 2-LED 实验要求 1.参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.4” KEIL-MDK 中添加 Z32 SC-000 芯片库,提交安装截图 2.参考云班课资源中“信息安全系统实验箱指导书.pdf “第一章,1.9”完成LED实验,注意“打开Z32的电源开关前,按住Reboot按键不放,两次打开电源开关,Z32即可被电脑识别,进行下载调试。提交运行结果截图 3.实验报告中分析代码 实验步骤 首先先在 KEIL-MDK 中添加 Z32 SC-000 芯片库,操作过程为