D2D画箭头的例子

用处

画流场图的时候需要画出带有箭头的矢量线表示流场

效果图

直接看箭头图效果
效果

代码

void ArrowTo(D2D1_POINT_2F start, D2D1_POINT_2F end, ID2D1HwndRenderTarget* pRTarget, ID2D1SolidColorBrush* pBrush)
{

    double slopy, cosy, siny;
    double length; //length of Arrow 
    length = 0.05 * sqrt((start.y - end.y)*(start.y - end.y) + (start.x - end.x)*(start.x - end.x)); 
    slopy = atan2((start.y - end.y), (start.x - end.x));
    cosy = cos(slopy);
    siny = sin(slopy);
    D2D1_POINT_2F p[3];
    D2D1_POINT_2F start;

    start.x = pstart.x;
    start.y = pstart.y;

    p[0].x = pend.x;
    p[0].y = pend.y;

    p[1].x = pend.x + length * cosy - (length / 2.0 * siny);
    p[1].y = pend.y + length * siny + (length / 2.0 * cosy);

    p[2].x = pend.x + length * cosy + length / 2.0 * siny;
    p[2].y = pend.y - length / 2.0 * cosy + length * siny;

    pRTarget->DrawLine(start, p[0], pBrush);

    pRTarget->DrawLine(p[0], p[1], pBrush);
    pRTarget->DrawLine(p[0], p[2], pBrush);

}

<think>好的,用户现在想了解S3C2440的DMA时序中读写数据上的符号含义。首先,我需要回忆之前的对话,用户之前问过类似的问题,当时我解释了“SS”符号代表源端和目标端均为单次传输模式,并结合了寄存器配置和时序进行了说明。现在用户进一步询问关于读写数据上的具体符号,可能需要更详细的解释。 接下来,查看用户提供的三个引用内容。引用1提到DMA的分析基于S3C2440手册,强调用通俗语言解释。引用2讨论了SD卡读写中的DMA使用,涉及时序问题。引用3则是关于SDRAM的时序参数,如tRCD,这可能和DMA时序中的某些延迟符号有关联。 用户的问题集中在时序中的数据读写符号,比如波浪线、箭头、斜杠等。需要将这些符号与DMA传输的不同阶段对应起来。例如,波浪线可能表示数据总线处于高阻态,箭头可能表示数据传输方向,斜杠可能表示传输次数或突发传输的次数。 考虑到用户可能正在学习或调试DMA配置,需要结合技术手册中的标准符号进行解释,并给出实际应用中的例子,比如内存到外设的传输,如何配置传输模式,以及如何避免总线冲突。同时,用户可能关心如何通过这些符号优化DMA配置,提高效率或减少延迟。 还需要注意用户提到的引用3中的时序参数,如tRCD,这可能影响DMA的时序符号,特别是当涉及到内存访问时。需要解释这些参数如何在时序中体现,比如等待周期或延迟符号。 最后,确保回答结构清晰,分点解释每个符号的含义,并附上示例和配置建议,帮助用户实际应用。同时生成的相关问题要针对可能的后续疑问,如如何优化时序、处理错误等。</think>根据S3C2440芯片手册和DMA时序特性,时序中读写数据上的符号主要用于表示**数据传输状态**和**时序约束条件**,具体可分为以下四类关键符号解析: --- ### 一、**波形符号含义解析** #### 1. **波浪线(~~~~)** - **技术含义**:表示**数据总线处于高阻态(Hi-Z)**或**无效传输周期** - **应用场景**: - DMA控制器未激活时(`XDREQ`未触发) - 总线仲裁期间(CPU与DMA控制器切换总线控制权)[^1] - **时序示例**: ``` XDREQ ______/‾‾‾‾‾‾\_______ Data ~~~~|有效数据|~~~~ ``` #### 2. **双向箭头(↔)** - **技术含义**:标注**数据传输方向** - **组合形式**: - **→**:仅写操作(内存到外设) - **←**:仅读操作(外设到内存) - **↔**:双向传输(需配置`DCON[1]`方向位)[^2] - **寄存器关联**: ```c dma_regs->DCON |= (1 << 1); // 设置传输方向为外设→内存 ``` #### 3. **斜杠与数字(/n)** - **技术含义**:表示**突发传输次数**或**数据包分割** - **典型标注**: - **/4**:单次突发传输4个单元(需配置`DCON[19:0]`传输计数) - **/1**:单次传输模式(SS模式) - **代码实现**: ```c dma_regs->DCON = (4 << 0); // 设置传输总量为4单元 ``` --- ### 二、**关键时序约束符号** #### 1. **tCD 符号(时钟延迟线)** - **技术含义**:`Command Delay`,表示**DMA命令响应延迟** - **参数范围**:通常为2-3个时钟周期(与芯片工作频率相关) - **时序表现**: ``` XDREQ __/‾‾‾\_________ XDACK ____/‾‾‾\_______ // tCD延迟后响应 ``` #### 2. **虚线框(┆┆)** - **技术含义**:**可配置时间段**,具体行为取决于: - `DCON[31]`(自动重载模式) - `DISRCC[1]`(源地址递增模式) - **典型应用**: - 内存块传输时的地址自动递增 - 外设固定地址传输(如UART FIFO) --- ### 三、**符号组合案例分析** #### 案例:外设到内存的突发传输时序 ``` XDREQ __/‾‾‾\_________________ XDACK ______/‾‾‾\_____________ Data ~~~~|D0 D1 D2 D3|~~~~ // 标注↔和/4 ``` - **符号解读**: 1. `↔`表示双向总线准备(实际方向由配置决定) 2. `/4`表示单次突发传输4个数据单元 3. **数据有效窗口**严格对齐`XDACK`有效电平 --- ### 四、**调试与配置建议** 1. **时序匹配检查**: - 通过`CLKCON`寄存器确认DMA时钟分频比 - 验证`tCD`参数满足公式: $$ tCD \geq \frac{1}{f_{HCLK}} \times N_{cycles} $$ 2. **符号异常排查**: - 若出现持续波浪线:检查`XDREQ`触发条件或DMA通道使能位(`DMASKTRIG[1]`) - 若箭头方向错误:重新配置`DCON[1]`方向控制位 --- ### 五、**与SDRAM时序的关联性** 当DMA操作涉及SDRAM时(如引用[3]所述),需特别注意: - **tRCD约束**:DMA控制器发出行地址后,必须等待至少`tRCD`时间再发送列地址 - **时序叠加**:SDRAM的`tCAS`延迟可能表现为数据线上的额外斜杠标注 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值