2440 5.0BSP增加三串口(作者:wogoyixikexie@gliet)

本文详细介绍了如何在WinCE 5.0 BSP环境下配置第三个串口,包括修改源文件和注册表设置等内容。通过对比4.2 BSP与5.0 BSP的不同之处,帮助读者理解配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2440 5.0BSP增加三串口(作者:wogoyixikexie@gliet

 

———————————————————————————————————————————————————————

    以前很多老兄写的增加三串口的方法都是4.2BSP的,现在搞个5.0的BSP,发现好多东西不一样了,现在咱也来弄弄吧。

首先看BSP下的serial文件夹下的sources文件

  1. !if "$(BSP_NOSERIAL)" == "1"//其实根本没有定义BSP_NOSERIAL
  2. SKIPBUILD=1
  3. !endif
  4. WINCEOEM=1                  //据说这个是说明要用到微软下的头文件
  5. TARGETNAME=serial_smdk2440
  6. TARGETTYPE=DYNLINK
  7. RELEASETYPE=PLATFORM        //BSP下的驱动都这样个类型
  8. TARGETLIBS=$(_COMMONSDKROOT)/lib/$(_CPUINDPATH)/coredll.lib /
  9.            $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/ceddk.lib
  10. //MDD所在地方(微软实现,不能改动),从名字看出使用了哪个代码了
  11. //C:/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/SERIAL
  12. SOURCELIBS=$(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/serpddcm.lib /
  13.            $(_SYSGENOAKROOT)/lib/$(_CPUINDPATH)/com_mdd2.lib
  14. DEFFILE=serial.def
  15. DLLENTRY=DllEntry
  16. INCLUDES=$(_TARGETPLATROOT)/src/inc;//BSP下的头文件
  17. SOURCES= ser_smdk2440.cpp /
  18.          pdds3c2440_ser.cpp
  19. //下面两个用来干什么的?
  20. #xref VIGUID {549CAC8D_8AF0_4789_9ACF_2BB92599470D}
  21. #xref VSGUID {0601CE65_BF4D_453A_966B_E20250AD2E8E}

——————————————————————————————————————————

下面来看看这个串口0(com1)的注册表

  1. ;=============== UART0 (physical COM1 connector P1) (Serial) ===============
  2. [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial]
  3.    "DeviceArrayIndex"=dword:0
  4.    "Irq"=dword:1c                          //#define IRQ_UART0    28(0x1c) 
  5.    "MemBase"=dword:50000000                //物理地址  
  6.    "MemLen"=dword:2C
  7.    "InterruptBitsShift"=dword:0 ; UART 0 Interrupt Sub Register shift bit.
  8.    "ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
  9.    "Prefix"="COM"                          //接口函数前缀
  10.    "Index"=dword:1                         //加载顺序
  11.    "Dll"="serial_smdk2440.dll"
  12.    "Order"=dword:0
  13.    "Priority"=dword:0
  14.    "Port"="COM1:"
  15.    "DeviceType"=dword:0                    //?
  16.    "FriendlyName"=LOC_DISPLAYNAME_COM1
  17.    "Tsp"="unimodem.dll"
  18.    "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
  19.    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

现在来看看4.2BSP的uart0_com1注册表

——————————————————————————————————————————————————————

和上面对比,其实只有irq这个东西不同而已,从我前面的文章可以得出,这个是由于5.0BSP和4.2BSP中断架构不同的原因。

所以见怪不怪了。

    现在来看4.2下是如何把红外占用的串口的注册表修改成我们所要的串口的。

 

.修改“/FILES/platform.bib”
用分号注释掉:
irsir.dll        $(_FLATRELEASEDIR)/irsir.dll        NK        SH

 

————————————————————————————————————————————————————

中断等东西和uart0_com1的设置类似,加载顺序有变化(这个在驱动中有对应)

    现在再来看看5.0BSP的红外串口注册表

  1. [HKEY_LOCAL_MACHINE/Drivers/BuiltIn/IRDA2440]
  2.    "DeviceArrayIndex"=dword:1
  3.    "Irq"=dword:f                //#define IRQ_UART2     15 
  4.    "MemBase"=dword:50008000
  5.    "MemLen"=dword:2C
  6.    "InterruptBitsShift"=dword:6 ; UART 2 Interrupt Sub Register shift bit.
  7.    ;"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
  8.    "Prefix"="COM"
  9.    "Index"=dword:4
  10.    "Dll"="serial_smdk2440.Dll"
  11.    "Order"=dword:0
  12.    "Priority"=dword:0
  13.    "Port"="COM4:"
  14.    "DeviceType"=dword:0  ; IRDA modem, 0 -> null modem
  15.    "FriendlyName"=LOC_DISPLAYNAME_RAWIR
  16.    "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
  17.    "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

 

在注册表中,唯独没有出现UART1(#define IRQ_UART1           23),这是因为它被调试串口占用了,即使在驱动实现,会被调试信息干扰,必须任选一个功能才行。其实和4.2注册表也没有多大区别,只是IRQ值不一样而已。好吧,come on。

————由于5.0和4.2下有很多不同,我暂时停止修改,先把串口流程走一遍,再继续了........

 

### 使用Python的urllib库处理URL请求并捕获错误 在Python中,`urllib`库提供了强大的功能来处理URL请求,并能够捕获和处理可能发生的错误。以下是一个完整的示例代码,展示如何使用`urllib.request`发送HTTP请求,同时捕获可能发生的异常并输出状态码或错误信息。 #### 示例代码 ```python import urllib.request import urllib.error url = "http://example.com" # 替换为实际的URL try: # 发送请求 response = urllib.request.urlopen(url) # 如果请求成功,输出响应的状态码和内容 print(f"Status Code: {response.getcode()}") # 输出状态码[^1] print("Response Body:") print(response.read().decode("utf-8")) # 输出响应体内容[^2] except urllib.error.HTTPError as e: # 捕获HTTP错误(如404, 500等) print(f"HTTP Error occurred: {e.code}") # 输出HTTP错误码[^3] print(f"Error Reason: {e.reason}") # 输出错误原因[^3] except urllib.error.URLError as e: # 捕获其他URL相关错误(如网络连接问题) print(f"URL Error occurred: {e.reason}") # 输出URL错误原因[^1] ``` #### 代码说明 - **`urllib.request.urlopen(url)`**:用于发送HTTP请求。如果请求成功,返回一个包含响应数据的对象。 - **`response.getcode()`**:获取HTTP响应的状态码,例如200表示成功[^1]。 - **`response.read().decode("utf-8")`**:读取并解码响应的内容为字符串形式。 - **`urllib.error.HTTPError`**:专门用于捕获HTTP协议相关的错误,例如404、500等[^3]。 - **`urllib.error.URLError`**:用于捕获与URL相关的更广泛的错误,例如DNS解析失败或无法连接到服务器。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值