1.软件篇---uC/OS-II之系统移植
2.快速易上手,统源8个实例方案带你由浅入深学STM系列微控制器
3.TerminateProcess HOOK
4.软件篇---LiteOS之系统移植(鸿蒙系统)
5.VB钩子函数类型值的统源问题
软件篇---uC/OS-II之系统移植
uC/OS-II是一款广泛应用于嵌入式软件开发的轻量级、可裁剪、统源可移植的统源实时操作系统。本文将详细阐述如何进行uC/OS-II的统源系统移植。
系统移植的统源黑马现身指标公式源码横盘步骤主要包括配置文件调整、内核代码适配和端口代码移植。统源
配置文件调整是统源首要任务,它涉及对uC/OS-II配置文件的统源修改,以适应新硬件平台的统源特性。
内核代码适配是统源系统移植的核心部分。内核代码包括任务管理、统源内存管理、统源事件等关键组件,统源需要针对目标硬件进行优化调整。统源
端口代码移植是点击验证源码系统移植的最后一步,它负责将uC/OS-II适配到特定硬件平台,确保系统能够正常运行。
在进行系统移植时,首先需要获取uC/OS-II源码,并在本地建立包含四个类别的文件夹结构:config、core、port、component。将源码中文件按照类别进行分类管理。
内核文件移植需要将源码中的source文件夹下的文件复制到本地的core文件夹中,并对头文件和源文件进行管理。
配置文件移植则需要将源码中Cfg目录下的配置文件复制到本地的config目录下。
端口文件移植则需要找到对应的内核文件,存放在Ports目录下,确保系统能够针对特定硬件平台进行优化。源码安装宝塔
为了提供具体的移植示例,本文以STMFCBT6芯片为例,详细介绍移植过程,包括添加文件至keil工程、修改启动文件等步骤。
系统移植成功的关键在于精确理解硬件特性和uC/OS-II内核需求,进行细致的代码调整和优化。通过实践,不断积累移植经验,提升移植效率和成功率。
快速易上手,8个实例方案带你由浅入深学STM系列微控制器
通过“学中做,做中学”的方式,我们深入STM单片机世界,从浅入深学习STM系列微控制器。ftok函数源码电路城上整理了以下8个实例,带你全面掌握STM的应用。
实例一:遥控智能小车。基于STMf,实现遥控控制、电池电压显示、无线通信、超声波检测等功能。包含完整的电路图、源代码。
实例二:物联网智能家居系统。采用STM单片机,监测温度、湿度、光照强度和土壤湿度,上涨确认源码自动控制风扇、加湿器、水泵和LED灯。具备手机远程控制和云平台支持。
实例三:高速频谱分析仪。STMF为核心,通过FIFO缓存高速信号,进行AD采样、预处理、FFT分析,显示在LCD上,支持任意波形信号的频谱分析。
实例四:家用商用安防智能静音锁。STM8SF3控制,具备断电自动开锁功能,使用DC-DC降压芯片供电,通过门磁、光电开关控制步进电机。
实例五:MPPT控制器。以STMFC4T6为主控,实现~V输入、/V输出、A输出电流,采用BUCK-BOOST拓扑结构。
实例六:智能垃圾桶。STMF控制,通过语音识别和板载RGB灯提示,实现不同垃圾分类与垃圾桶自动开关。
实例七:家用迷你红外相机。使用STMFCBT6+AMG,配备0.寸LCD屏幕,支持温度数据打印和8*8红外像素插值放大。
实例八:数字电源Buck降压模块。基于STMF控制器设计,实现输出恒压限流控制,具备PID与多零极点闭环控制,具备多种保护功能。
TerminateProcess HOOK
å¦ä½ä¿è¯èªå·±çç¨åºä¸è¢«å ³éï¼
å°±ç®æ¯ä¸äºè¿ç¨è½¯ä»¶ä¹ä¸å¯ä»¥å ³é
samba æå¬è¿æ人éç¨ç¨åºäºç¸çæ§çæ¹æ³æ¥è¾¾å°ç®çã
ä½è¿æ ·å°±ä¼å ç¨ç³»ç»èµæºãä¸ä¸ªä¸å ä»ä¹æ§ä»¶ç纯çªä½é½è¦3å ç¨MBå åï¼
å¦æå ä¸ææ¬æ¥çé£ä¸ªç¨åºï¼å²ä¸æ¯è¦å å»åå MBå åï¼è¿å¯¹äºæé£ä¸ªå°ç¨åºæ¥è®²ä¸ä¸å¯å¿åçã
请é®æä»ä¹æ¯è¾å¥½çæ¹æ³å¯ä»¥è§£å³ï¼æè¿æ¹é¢çæ§ä»¶åï¼å è°¢è¿å¤§å®¶äºï¼
---------------------------------------------------------------
å¨WINDOWSæä½ç³»ç»ä¸ï¼å½æ们æ æ³ç»ææè ä¸ç¥éææ ·ç»æä¸ä¸ªç¨åºçæ¶åï¼æè æ¯æå¾å»æ¾âéåºâæé®çæ¶åï¼é常ä¼æâCTRL+ALT+DELâå¼åºä»»å¡ç®¡çå¨ï¼æ¾å°æ³ç»æçç¨åºï¼ç¹ä¸ä¸âç»æä»»å¡âå°±äºäºäºï¼åµåµï¼è½ç¶æç¹ç²é²ï¼ä½å¤§å¤æ°æ åµä¸é½å¾ææï¼ä¸æ¯åï¼
设æ³ä¸ä¸ï¼å¦ææè¿ä¹ä¸ç§è½¯ä»¶ï¼å®æè¦åçå·¥ä½å°±æ¯å¯¹æ个使ç¨è å¨æå°çµèä¸çæ´»å¨ä½ä¸å®çéå¶ï¼èåä¸è½è¢«ä½¿ç¨è éè¿âç»æä»»å¡âè¿ç§æ¹å¼è½»æå°è§£é¤éå¶ï¼é£è¯¥æä¹åï¼æ éæè¿ä¹ä¸ç§æ¹æ³ï¼1.å±è½âCTRL+ALT+DELâè¿ä¸ªçé®çç»åï¼2.让ç¨åºä¸åºç°å¨ä»»å¡ç®¡çå¨çå表ä¹ä¸ï¼3.让任å¡ç®¡çå¨æ æ³ææè¿ä¸ªä»»å¡ã对äºç¬¬ä¸ç§æ¹æ³ï¼è¿æ ·æªå ä¹å¤ªæ®é ·äºï¼ç¨æ¯äºâç»æä»»å¡âè¿ç§æ¹æ³ç人ä¼å¾ä¸ä¹ æ¯çï¼å¯¹äºç¬¬äºç§æ¹æ³ï¼å¨WINDOWS 9Xä¸å¯ä»¥å¾è½»æå°ä½¿ç¨æ³¨åæå¡è¿ç¨çæ¹æ³å®ç°ï¼ä½æ¯å¯¹äºWINDOWS NTæ¶æçæä½ç³»ç»æ²¡æè¿ä¸ªæ¹æ³äºï¼è¿ç¨å¾é¾è身ï¼è½ç¶ä»ç¶å¯ä»¥å®ç°éèï¼ä½å®ç°æºå¶è¾ä¸ºå¤æï¼å¯¹äºç¬¬ä¸ç§æ¹æ³ï¼å®ç°èµ·æ¥æ¯è¾ç®åï¼æçä½åï¼IPGate ç½åè¿æ»¤å¨ å°±æ¯éç¨çè¿ç§æ¹å¼é²æçï¼æ¥ä¸æ¥æå°±æ¥ä»ç»è¿ç§æ¹æ³ã
ä»»å¡ç®¡çå¨çâç»æä»»å¡âå®é ä¸å°±æ¯å¼ºå¶ç»æ¢è¿ç¨ï¼å®æ使ç¨çææéæ¯ä¸ä¸ªå«åTerminateProcess()çWin APIå½æ°ï¼æ们æ¥ççå®çå®ä¹ï¼
BOOL TerminateProcess(
HANDLE hProcess; // å°è¢«ç»æè¿ç¨çå¥æ
UINT uExitCode; // æå®è¿ç¨çéåºç
);
çå°è¿éï¼æ¯ä¸æ¯è§å¾ä¸å¿ å¾ä¸çé½ç¥éæ¥ä¸æ¥è¦åä»ä¹ï¼Hook TerminateProcess()å½æ°ï¼æ¯æ¬¡TerminateProcess()被è°ç¨çæ¶åå å¤æä¼å¾ç»æçè¿ç¨æ¯å¦æ¯æçè¿ç¨ï¼å¦ææ¯çè¯å°±ç®åå°è¿åä¸ä¸ªé误ç å°±å¯ä»¥äºãççæ¯è¿ä¹ç®ååï¼å æåºä¸ä¸ªé®é¢ï¼å¦ä½æ ¹æ®hProcesså¤æå®æ¯å¦æ¯æçè¿ç¨çå¥æï¼çæ¡æ¯ï¼å¨æçè¿ç¨å½ä¸å è·å¾æçè¿ç¨çå¥æï¼ç¶åéè¿è¿ç¨é´é讯æºå¶ä¼ éç»é©åå½æ°ï¼ä¸hProcessè¿è¡æ¯è¾ä¸å°±è¡äºï¼éï¼å 为å¥ææ¯ä¸ä¸ªè¿ç¨ç¸å ³çå¼ï¼ä¸åè¿ç¨ä¸å¾å°çæçè¿ç¨çå¥æçå¼å¨è¿ç¨é´è¿è¡æ¯è¾æ¯æ æä¹çã
æä¹åï¼æ们æ¥èå¯ä¸ä¸æçhProcesså®æ¯å¦ä½å¾å°çãä¸ä¸ªè¿ç¨åªæå®çè¿ç¨IDæ¯ç¬ä¸æ äºçï¼æä½ç³»ç»éè¿è¿ç¨IDæ¥æ è¯ä¸ä¸ªè¿ç¨ï¼å½æ个ç¨åºè¦å¯¹è¿ä¸ªè¿ç¨è¿è¡è®¿é®çè¯ï¼å®é¦å å¾ç¨OpenProcessè¿ä¸ªå½æ°å¹¶ä¼ å ¥è¦è®¿é®çè¿ç¨IDæ¥è·å¾è¿ç¨çå¥æï¼æ¥ççå®çåæ°ï¼
HANDLE OpenProcess(
DWORD dwDesiredAccess, // å¸æè·å¾ç访é®æé
BOOL bInheritHandle, // æææ¯å¦å¸ææè·å¾çå¥æå¯ä»¥ç»§æ¿
DWORD dwProcessId // è¦è®¿é®çè¿ç¨ID
);
èç»æ¸æ¸æ¾ç°ï¼å¨è°ç¨TerminateProcess()ä¹åï¼å¿ å è°ç¨OpenProcess()ï¼èOpenProcess()çåæ°è¡¨ä¸çdwProcessIdæ¯å¨ç³»ç»èå´å å¯ä¸ç¡®å®çãå¾åºç»è®ºï¼è¦Hookçå½æ°ä¸æ¯TerminateProcess()èæ¯OpenProcess()ï¼å¨æ¯æ¬¡è°ç¨OpenProcess()çæ¶åï¼æ们å æ£æ¥dwProcessIdæ¯å¦ä¸ºæçè¿ç¨çID(å©ç¨è¿ç¨é´é讯æºå¶)ï¼å¦ææ¯çè¯å°±ç®åå°è¿åä¸ä¸ªé误ç å°±å¯ä»¥äºï¼ä»»å¡ç®¡çå¨æ¿ä¸å°æçè¿ç¨çå¥æï¼å®å¦ä½ç»ææçè¿ç¨å¢ï¼
è³æ¤ï¼çå¢å ¨é¨æå¼äºãç±Hook TerminateProcess()å°Hook OpenProcess()çè¿ä¸ªè¿ç¨ï¼ä½ç°äºä¸ä¸ªéåæç»´çææ³ãå ¶å®æå½åé»è¿äºTerminateProcess()çæ»è¡åéå天åºä¹ä¸æ¥ï¼ä½æç»è¿æ¯è¹¦åºäºçµæçç«è±ï¼æ³¨æå转移å°äºOpenProcess()ä¸é¢ï¼å®ç°äºè¿ç¨é²æãåæ¦ä¹ä½ï¼å°è¿å¿å¾ä½ä¼æ¿åºæ¥ä¸å¤§å®¶å享ã
---------------------------------------------------------------
è¦ä¸æç»ä½ ææçå¯æ§è¡æ件çæºä»£ç åå¨æè¿æ¥åºåç»ä½ 好äº
å¨æè¿æ¥åºä½ èªå·±å¯ä»¥æ¢æ
å°±æ¯è¦æ³¨å ¥çé£ä¸ª
ï¼æ³¨å ¥å°çç®æ ç¨åºä½ èªå·±è®¾ç½®
---------------------------------------------------------------
åµåµï¼ææåå®ç°äºï¼ï¼
éè¿setwindowshookex建ç«CBTçHookï¼Hook DLLä¸å è½½APIéå®åï¼å°±å¯ä»¥è¾¾å°å ¨å±ææçAPIHOOKææäºï¼è¿è¦å¯¹MapFileæä½ï¼ä»¥ä¾¿ç»ä¸å ¨å±çåæ°
ä¸è½½å°åï¼ponent四类文件夹的目录结构,分别存放配置文件、内核文件、端口文件和组件。系统文件结构清晰,包含arch、components、kernel三个主要部分。
在移植过程中,采用STMFCBT6芯片作为示例,需在工程中添加相关文件。参考代码仓库:lq/keil_sdk,为自己的成长与进步增添动力。每一次的努力都是积累,每一次的付出都带来成长,坚持下去,奇迹就在转角等待你。
VB钩子函数类型值的问题
你的问题解答如下:
一、SetWindowsHookEx的使用
是的,VB挂钩一个窗口用SetWindowsHookEx,最常用的是针对键盘和鼠标。关键参数是:
Private Const WH_KEYBOARD_LL = '键盘
Private Const WH_MOUSE_LL = '鼠标
当然,它也并不是万能的。比如:挂钩IE就不能用SetWindowsHookEx了。
例如:
1、SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0) '表示挂钩键盘
2、SetWindowsHookEx(WH_MOUSE_LL, AddressOf MyKBHook, App.hInstance, 0)'表示挂钩鼠标
从上面可知,第三、四个参数一般都是固定的,不必去追究那么多为什么,只要够用就行:-)
二、MyKBHook的使用
你一旦建立了钩子,Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long中3个参数值都会随着用户的操作不断变化。我们关注的是如何对它的返回作出相应的处理:
如:
1、键盘:wParam表示用户对键盘的按下或弹开动作,lParam表示用户具体按了哪个键。
2、鼠标:wParam表示用户对鼠标的按下或弹开动作,lParam表示对我们用户不太大。
由此可知:ncode用处不大。
为了你具体掌握上述适应听用法,特上传了源代码实现,请下载研究:
/download.ashx?id=rewmoq
附:
如果你对IE监视感兴趣,可以在VB中引用wsock.dll或shdocvw.dll下钩子进行数据的截取。由于内容复杂,会花很多时间讲解。请自行到网上查找有关资料进行研究。