在Windows CE增加自定义中断处理

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

基于S3C2410,Windows CE4.2,BSP是smdk2410。WinCE的中断处理是三个映射关系:

ISQ --> Interrupt ID(逻辑中断号)  --> Event对象。

当中断发生时,ISR(中断服务例程)返回该中断号对应的逻辑中断号,然后尽可能快地返回;随后CE就set该逻辑中断号对应的Event对象(如果有的话),以唤醒在该Event等待的IST(中断服务线程),大部分工作都是由IST来完成。一般来说IST是存在驱动程序里,单其实放在普通的应用程序里也可以,尤其是对应只有一个应用程序使用的特殊硬件更方便。因为对应CE来说其实驱动程序也只是一个普通的DLL,也是运行在用户空间。

为了简单起见我们就直接修改BSP包的ISR部分,IST也直接在应用程序里实现,步骤如下:

1、在BSP的oalintr.h里定义自定义中断的逻辑中断值,如:
            #define SYSINTR_MYINTR  (SYSINTR_FIRMWARE + 10)

2、修改KERNEL/HAL/cfw.c中的以下三个函数,增加对自定义中断的启用禁用代码:
           OEMInterruptEnable(), OEMInterruptDisable(), OEMInterruptDone()

3、修改KERNEL/HAL/ARM/armint.c中的OEMInterruptHandler(),对irq返回逻辑中断号,如:
 else if (IntPendVal == INTSRC_EINT2) // EINT2
    return(SYSINTR_MYINTR);

4、在PlatformBuilder中重新生成nk.bin,下载运行。

现在,内核已经支持我们的自定义中断SYSINTR_MYINT了,我们在应用程序中就可以把这个SYSINTR_MYINT与一个Event对象关联起来,然后在一个线程里等待这个Event就ok了,这个线程就是IST。

5、在IST里用InterruptInitialize()将自定义中断和Event关联起来,并WaitForSingleObject()。注意下面的代码是在一个线程里(即IST):
 hEvent = CreateEvent(NULL, FALSE, FALSE, NULL));
 InterruptInitialize(SYSINTR_MYINTR, hEvent, NULL, 0));     //若没有修改OEMInterruptEnable(),这个调用就会失败
 while ( TRUE )
 {
    WaitForSingleObject(hEvent, INFINITE);
    // do some process...
}

Cheat Engine 和 OllyDBG 实战技巧:从入门到精通 本文详细介绍了Cheat Engine和OllyDBG的实战技巧,从基础的内存修改到高级的调试技术。通过具体案例和实用技巧,帮助读者掌握游戏逆向工程的核心方法,包括基地址定位、断点设置和脚本自动化等关键技能。 阅读详情

相关推荐

CE修改器进阶指南:从内存扫描到代码注入的实战解析

本文深入解析CE修改器的核心功能与高级应用,包括内存扫描、动态地址定位和代码注入技术。通过实战案例演示如何精确修改游戏数值和机制,如《只狼》的躯干值和《饥荒》的生命值锁定,同时提供安全与优化指南,帮助用户高效使用CE修改器进行逆向工程。

weixin_28837817的博客 568

ce6.4过检测

.ce过检测。强大的内存修改工具

嵌入式操作系统Windows CE之架构概述

早期的嵌入式软件基本上是在汇编级开发的,系统的运行不需要操作系统支撑。每增加一种系统功能都需要重新进行开发,这种情况给嵌入式系统的应用和发展带来很大的阻碍。随着嵌入式系统的广泛应用,操作系统的引入也就日益显得重要了。目前比较著名的嵌入式操作系统有嵌入式Linux, μC/OS-II, VxWorks,Palm OS和Windows CE等。Windows CE是Microsoft推出的32位、多任

oceanwin的专栏 2057

WinCE 5.0边做边学(6)

    在学习驱动程序之前,我们还有很多东西要了解。想来想去,可能最重要的还是中断了,所以,这次我们花点时间来了解一下在Windows CE中的中断机制。    凡是学过计算机原理的人都知道中断是什么东西,所以这些基本知识我们就不再详述了,我们下面就先看一下CE中断的整体处理流程,以方便从全局上有个整体的认识

文斌咨询 3243

Visual Studio开发工具----调试技巧-条件断点

3.2 条件断点 如果在应用程序中重现特定状态比较困难或耗时,请考虑使用条件断点。您可以使用条件断点和筛选断点来避免破坏应用程序代码,直到应用程序进入所需的状态(例如变量存储错误数据的状态)。可以使用表达式、过滤器、命中次数等设置条件。 右键单击断点图标(红色球),弹出如下菜单: 选择条件,输入条件语句: 启动调试后,按F5,循环会在index==2时...

charce_you的专栏 869

eclipse设置条件断点

转载自:https://jingyan.baidu.com/article/ed2a5d1f4aa2ce09f6be17d5.html 相信很多码友在调试像spring之类框架代码时都会有过类似的需求:设置的断点在满足一定条件时才停顿,具体方法可以参考下面这篇文章: 打到要设置条件的断点,右击断点。 在弹出的菜单中选中“Breakpoint Properties"菜单项。 ...

johnhuster的专栏 1190

为提高实时性能,设计和优化 Microsoft Windows CE .NET ——转载

为提高实时性能,设计和优化 Microsoft Windows CE .NET 发布日期 : 7/16/2004 | 更新日期 : 7/16/2004Mike ThomsonJason BrowneMicrosoft Corporation适用于:Microsoft Windows CE .NET 和更高版本摘要:本文从技术角度详细描述了为了增强实时性能特征

gooogleman#foxmail.com 1979

Windows CE系统机制中的调度

Windows CE系统机制中的调度 [问题点数:20分,结帖人dnsRRR] dnsRRR 该用户很懒,没设置昵称 等级: 结帖率:71.88% 楼主 发表于: 2009-06-19 01:02:14 Windows CE的陷阱调度是嵌入式系统开发的一个重要内容,陷阱调度的好坏关系到系统的健壮性和稳定度。陷阱调度看起来只有几个常用语句,故有些开发人员常常会对陷阱调度轻视和在使

autumn20080101的专栏 649

Windows CE SH3专用Tiny C编译器安装与应用

本文还有配套的精品资源,点击获取 简介:本压缩包包含一个为Windows CE操作系统定制的Tiny C编译器,特别针对SH3架构进行了优化。SH3是SuperH 3微处理器指令集架构的简称,常见于早期的嵌入式系统和掌上设备。该编译器能为使用SH3处理器的设备提供原生C语言开发支持,有助于开发者在资源受限的嵌入式环境中进行高效的软件开发。用户需解压.cab文件以使用该编译器...

weixin_35903223的博客 1704

Windows CE录屏工具:远程捕获与视频记录

随着嵌入式技术的不断发展,操作系统在小型设备中的应用变得更加广泛。Windows CE作为一款专为嵌入式系统设计的Windows操作系统,其录屏工具的需求也逐渐增加。这类工具主要用于应用程序的测试、错误回溯、用户交互培训以及远程技术支持。

weixin_36431814的博客 732

通向Windows CE(转)

Windows CE的特性指标Microsoft Windows CE是一个紧凑、高效和可扩展的操作系统,适用于各种嵌入系统和产品。它拥有多线程、多任务、确定性的实时、完全抢先式优先级的操作系统环境,专门面向只有有限资源的硬件系...

cuankuangzhong6373的博客 206

嵌入式系统设计和Windows CE - ShowMan的专栏 - CSDNBlog

导读:   新一篇: 在 Visual C++ 中 建 立 MFC 扩 展 DLL | 旧一篇: 认识wince   正是CE和其它全功能的嵌入式系統的時候了。利用相應較高級別的集成、較低的成本來減少任務,以及增加的性能都使得全新的應用成為可能。   在PDA上運行的WindowsCE已經被推出近兩年了,而且與一些大的電子製造商,像Matsushita(Panasonic)和Hitachi

luochengbang的专栏 1700

Windows Embedded CE 中断结构分析

Windows Embedded CE  中断结构分析 关键字:WinCE,中断,体系,结构 摘要:本文主要以WinCE  .NET 5.0 为操作系统平台,ARM为硬件平台,分析了WinCE中断的结构与实现方式 作者:ETDrawer@ARMCE 前言    在嵌入式系统当中,对于中断的处理是非常重要的一部分内容。许多外围设备都需要通 过中断来实现自己的功能或

Wilsonboliu的专栏 1466
上一篇: 继续blog,继续coding......
下一篇: 一个不错的matlab入门教程
BuilderChen
博客等级 码龄26年 23粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值