flask源代码--routing路由管理

本文详细介绍了Flask框架中路由管理的核心概念和技术实现细节,包括werkzeug.routing的Map和Rule的使用方法,以及如何通过装饰器实现路由与视图函数的绑定。

        flask的路由管理主要是依赖于werkzeug.routing的Map和Rule。所以想要理解flask路由管理就要知道这两个东西是怎么操作的。

self.url_map = Map([
    Rule('/', endpoint='new_url'),
    Rule('/<short_id>', endpoint='follow_short_link'),
    Rule('/<short_id>+', endpoint='short_link_details')
])
        在werkzeug tutorial中讲到其使用方法,‘/’是路由路径,而endpoint则是视图函数,所以如果我们制作网站的首页为‘http://www.flaskdev’的话,使用werkzeug可以这样写:

self.url_map = Map([
    Rule(''/), endpoint='index'])

def index():
    pass
        或者这样写:

self.url_map = Map()

def index():
    pass

self.url_map.add(Rule('/'), index)
        我们用面向对象思维的话则可以写成:

class Flask(object):
    add_url_map = Map()
......
    def add_url_map(self, rule, endpoint, **options):
        options['endpoint'] = endpoint
        options.setdefault('methods', ('GET',))
        self.url_map_add(Rule(rule, **options))
        到此距离flask的路由管理就只差最后一步了,就是写个装饰器,flask的源码是这样写的:

</pre><pre name="code" class="python">    def route(self, rule, **options):
        def decorator(f):
            self.add_url_map(rule, f.__name__, **options)
            return f
        return decorator 
        以上就是flask路由管理的分析过程。

<think> 嗯,用户这次想了解ADSP-21565的SRU和SPROT模块。从对话历史看,用户之前应该是在做音频相关的开发,参考过Flash编程和开发板设计的资料。用户可能正在搭建音频处理系统,需要深入理解芯片内部的路由机制。 SRU和SPROT确实是ADSP-21565最核心的片上互连模块,但官方文档对这两个模块的解释比较分散。用户作为开发者,需要的不仅是功能描述,更关注实际应用场景。特别是SRU的配置,对音频流传输至关重要。 注意到用户上次参考过音频回环项目,可以推测ta可能在实现多通道音频路由。需要强调SRU如何连接SPORT、PDM等音频外设。SPROT部分则要提醒安全特性对量产程序保护的重要性。 用户没有具体说明开发阶段,但既然问到"使用方法",应该进入了编程实践环节。需要给出寄存器级别的操作指导,但避免直接贴代码片段——上次回复Flash烧写时已经展示过命令行工具,这次更适合说明配置思路。 特别要注意的是,用户引用的资料里提到这是1:1复刻官方评估板。这意味着所有引脚定义和示例代码都可以直接参考ADI原厂设计,这点要在回答中利用起来。 关于技术细节: SRU部分要突出其作为"音频路由十字路口"的特性,重点说明信号矩阵和时钟同步机制。SPROT则需要区分地址保护模式,用户最可能用到的是代码保护区功能。 考虑到用户可能遇到的痛点: 1 配置SRU时容易遗漏时钟同步设置,导致音频数据错位 2 SPROT区域划分不当可能影响DMA传输 这些都要在回答中预先提醒 </think>ADSP-21565的**SRU**(Signal Routing Unit, 信号路由单元)和**SPROT**(System Protection Unit, 系统保护单元)是其片上互连与安全机制的核心模块,功能如下: --- ### **1. SRU (Signal Routing Unit)** #### **功能** - **数字音频路由枢纽**:在DSP内核、外设(如SPORT、PDM、DPI等)和内存之间提供可编程硬件互连。 - **灵活映射**:将任意外设的输入/输出引脚连接到其他外设或处理单元,无需CPU干预。 - **低延迟传输**:通过硬件直连路径实现音频数据流的零等待传输。 - **时钟与帧同步管理**:为各音频接口提供独立的时钟和帧同步信号配置。 #### **使用方法** SRU通过配置专用寄存器实现路由,典型步骤: 1. **确定信号源/目标**:例如将`SPORT0A`的输出连接到`DPI0`的输入。 2. **设置路由寄存器**: ```c *pREG_SRU_DPI0 = SRU_SRP0A_D0_EN; // 将SPORT0A数据线0路由至DPI0 ``` 3. **配置时钟同步**(关键): ```c *pREG_SRU_CLK_CFG = SPORT0_CLK_EN | DPI_FS_SEL(1); // 启用SPORT0时钟,DPI使用帧同步源1 ``` 4. **启用路由**: ```c *pREG_SRU_EN = SRU_ROUTE_ACTIVE; // 激活所有配置的路由 ``` > **应用场景**:多通道麦克风阵列通过`PDM`接口输入,经SRU路由至`SPORT`发送给编解码器,同时将处理后的音频通过`DPI`输出到数字总线[^2]。 --- ### **2. SPROT (System Protection Unit)** #### **功能** - **内存访问控制**:划分安全域(如内核/外设/DMA),限制非法访问。 - **特权级保护**:区分用户模式与内核模式操作权限。 - **硬件防火墙**:防止关键代码区(如Bootloader)被篡改。 #### **关键寄存器** | 寄存器 | 功能 | |----------------|--------------------------| | `SPROT_LOCK` | 锁定保护配置 | | `SPROT_ACLx` | 定义区域x的访问权限 | | `SPROT_ADDRx` | 设置保护区起始/结束地址 | #### **配置示例** ```c // 保护0xC0000000~0xC00FFFFF的Flash区域 *pREG_SPROT_ADDR0_START = 0xC0000000; *pREG_SPROT_ADDR0_END = 0xC00FFFFF; *pREG_SPROT_ACL0 = (SUPER_WRITE_DENY | USER_READ_DENY); // 禁止用户读/特权写 *pREG_SPROT_LOCK = 0xAA; // 锁定配置 ``` > **注意事项**:错误配置可能导致系统锁死,需通过JTAG解锁[^1]。 --- ### **SRU与SPROT的协同** - **安全音频流**:SRU路由音频数据时,SPROT可确保DMA仅访问合法内存区域。 - **实时性保障**:SRU硬件路由避免CPU中断延迟,SPROT防止高优先级任务破坏路由配置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值