SW练习_P1002过河卒_DP

本文介绍了一种解决洛谷P1002问题的算法,通过使用二维动态规划,避免了马棋可能的跳跃路径,计算从起点到终点的所有可能路径数量。代码中使用了Java的BufferedReader和StringTokenizer进行输入处理,展示了如何初始化二维数组并更新其值以反映可达路径的数量。

这个题目,其实挺无聊的

package info.frady.luogu;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class P1002 {
    public static void main(String[] args) throws Exception{
        BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st=new StringTokenizer(reader.readLine());
        int EX=Integer.parseInt(st.nextToken())+2;
        int EY=Integer.parseInt(st.nextToken())+2;//n m 是终点坐标
        long[][] arr=new long[EX][EY];
        arr[1][0]=1;

        int MX=Integer.parseInt(st.nextToken())+1;
        int MY=Integer.parseInt(st.nextToken())+1;//这个是马的坐标
        arr[MX][MY]=-1;
        if(MX-2>=1 && MY+1<=EY){
            arr[MX-2][MY+1]=-1;
        }
        if(MX-1>=1 && MY+2<=EY){
            arr[MX-1][MY+2]=-1;
        }
        if(MX+1<=EX && MY+2<=EY){
            arr[MX+1][MY+2]=-1;
        }
        if(MX+2<=EX && MY+1<=EY){
            arr[MX+2][MY+1]=-1;
        }
        if(MX+2<=EX && MY-1>=1){
            arr[MX+2][MY-1]=-1;
        }

        if(MX+1<=EX && MY-2>=1){
            arr[MX+1][MY-2]=-1;
        }
        if(MX-1>=1 && MY-2>=1){
            arr[MX-1][MY-2]=-1;
        }
        if(MX-2>=1 && MY-1>=1){
            arr[MX-2][MY-1]=-1;
        }


        /*for (int i = 0; i <arr.length ; i++) {
            for (int j = 0; j <arr[i].length ; j++) {
                System.out.print(arr[i][j] +" ");
            }
            System.out.println("");
        }
        System.out.println("");*/
        for (int i = 1; i <arr.length ; i++) {
            for (int j = 1; j <arr[i].length ; j++) {
                if(arr[i][j]!=0){
                    continue;
                }else{
                    if(arr[i-1][j]==-1){
                        arr[i][j]=arr[i][j-1];
                    }else if(arr[i][j-1]==-1){
                        arr[i][j]=arr[i-1][j];
                    }else{
                        arr[i][j]=arr[i-1][j]+arr[i][j-1];
                    }
                }


            }
        }


        /*for (int i = 0; i <arr.length ; i++) {
            for (int j = 0; j <arr[i].length ; j++) {
                System.out.print(arr[i][j] +" ");
            }
            System.out.println("");
        }*/
        System.out.println(arr[arr.length-1][arr[0].length-1]);

        reader.close();
    }
}

 

<think>嗯,用户问的是SW_AP和SW_DP访问的含义、定义、作用以及调试协议。首先,我需要回忆一下ARM Coresight架构的相关知识。根据之前的引用,特别是引用[3]和[4],DP是Debug Port,AP是Access Port。SW可能指的是Serial Wire,也就是SWD协议。 首先,SW_DP应该是指Serial Wire Debug Port,属于DP的一种类型,另一种是JTAG-DPSW_DP使用两线式接口(SWDIO和SWCLK),而JTAG-DP使用传统的JTAG四线接口。SW_DP的作用是通过SWD协议与调试器通信,负责传输命令和数据,管理AP的访问。需要确认引用中的内容,比如引用[5]提到STM32的调试接口JTAG-DPSW-DP,说明这两个是DP的不同实现。 然后,SW_AP可能指的是通过SWD协议访问的AP,比如MEM-AP。AP的类型取决于连接的组件,比如Cortex-M可能使用AHB-AP。根据引用[4],AP的类型区分是基于不同的接口,如Debug APB或AHB-AP。SW_AP可能不是官方术语,而是指通过SW-DP访问的AP。需要解释AP的作用,如MEM-AP用于访问内存,JTAG-AP用于控制JTAG链。 调试协议方面,SWD是主要的,需要说明其帧结构,如起始位、APnDP位、RnW位等,引用[5]中有详细描述。这部分要结合用户提供的命令头结构,比如bit0是Start,bit1是APnDP,bit2是RnW,这些在SWD协议中如何工作。 还要注意用户可能混淆了SW_AP和SW-DP,需要明确区分两者的层次。DP是调试端口,负责与外部调试器通信,而AP是连接到内部总线的接口,负责具体的内存或寄存器访问。SW-DP属于DP的一种,而AP可能有不同类型,如MEM-AP,通过DP进行访问。 需要确保回答结构清晰,分点解释定义、作用、调试协议,并引用提供的参考资料。可能用户的应用场景是在STM32调试中遇到SWD配置问题,或者想了解如何通过SWD访问不同的AP。因此,在回答中加入配置示例或寄存器定义,如引用[2]中的GPIO重映射宏,可以帮助用户理解实际应用。 最后,生成的相关问题需要围绕SWD协议、配置方法、与JTAG的区别以及调试工具的选择,这些是用户可能进一步感兴趣的方面。</think>### SW_AP与SW_Debug Port(SW-DP)的定义与作用解析 #### 一、基本定义 1. **SW-DP(Serial Wire Debug Port)** 是ARM Coresight调试架构中的**调试端口(Debug Port)**,使用**两线式SWD协议**(SWDIO数据线 + SWCLK时钟线)与调试器通信[^5]。其核心作用是通过精简的物理接口实现调试命令传输,并通过**MEM-AP**(Memory Access Port)访问芯片内部资源[^1][^3]。 2. **SW-AP(Serial Wire Access Port)** 并非独立组件,而是指通过SW-DP访问的**AP(Access Port)**。AP是调试组件与芯片内部总线(如AHB/APB)的接口,例如: - **MEM-AP**:用于直接访问内存/寄存器空间[^4] - **JTAG-AP**:用于控制JTAG链上的设备 Cortex-M系列常用**AHB-AP**实现调试访问[^4]。 #### 二、层次化调试架构 调试系统通过三级结构实现访问: ``` 调试器 ↔ SW-DP ↔ AP(如MEM-AP) ↔ 芯片内部总线 ``` SW-DP负责协议解析,AP负责总线适配[^3]。 #### 三、SWD协议关键特性 协议帧结构包含以下关键字段(引用自调试波形分析[^5]): ``` Start | APnDP | RnW | Addr | Parity | Stop ``` - **APnDP位**:区分访问目标是DP寄存器(0)还是AP寄存器(1) - **RnW位**:控制读/写操作 - **地址映射**:通过A[3:2]选择寄存器bank #### 四、典型应用场景 1. **STM32调试接口配置** 通过重映射寄存器选择调试模式(引用代码段[^2]): ```c #define GPIO_Remap_SWJ_Disable 0x00300400 // 完全禁用JTAG+SW ``` 禁用JTAG后可释放GPIO引脚。 2. **AP访问流程示例**: - 通过SW-DP发送APACC命令(APnDP=1) - 选择MEM-AP的CSW寄存器配置总线位宽 - 通过TAR寄存器设置目标地址 - 通过DRW寄存器读写数据[^3] #### 五、调试协议对比 | 特性 | SWD | JTAG | |-----------|-------------------|-----------------| | 引脚数量 | 2线 | 4线+可选TRST | | 协议效率 | 帧结构更紧凑 | 状态机转换复杂 | | 拓扑支持 | 点对点 | 支持多设备链 | | 典型应用 | Cortex-M系列 | Cortex-A/R系列 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值