大数据 做网站流量统计开一家网络公司做网站前景如何

news/2025/9/23 16:06:55/文章来源:
大数据 做网站流量统计,开一家网络公司做网站前景如何,百度的相关搜索,惠州网站搭建找谁本文是对rust嵌入式开发的补充#xff0c;就当时遗留的一些问题进行增补与修正。 RTIC中的任务处理 在上篇文章中还不是很理解rtic的工作机制。但写东东进行总结的好处就体现出来了#xff0c;在上篇文章中提到了rtic的app入口本就是一个进程宏#xff0c;所以在写完文章后…本文是对rust嵌入式开发的补充就当时遗留的一些问题进行增补与修正。 RTIC中的任务处理 在上篇文章中还不是很理解rtic的工作机制。但写东东进行总结的好处就体现出来了在上篇文章中提到了rtic的app入口本就是一个进程宏所以在写完文章后就想那就看看这个宏到底干了些什么吧。 想到就干。执行 cargo expand src/app.rs然后在main.rs中引用一下【这样在vscode中读代码的时候就可以随时跳转来来看源码】 mode app;经过对扩展了宏之后的代码的研读搞清楚了几个问题 RTIC的任务分发 rtic不是一个RTOS它只是一个基于中断的任务分发系统。 所以上篇文章中有很多概念就都错了因为那还是基于一个OS中多任务【或线程】的认识。 在rtic中不管是中断处理还是用户的任务函数如live、mytask等在rtic中都是一视同仁全部都是在中断响应函数调用我们自己编写的任务函数。 而rtic所提供的标准的中断响应函数都是一样的 设置优先级由程序员以priority指定为用户任务函数准备参数核心就是local和shared两个结构调用程序员所写的用户任务函数 所以dispatchers的作用就是选一个没有实际使用到的硬件中断源然后在实际的硬件中断响应函数中调用用户任务函数的spawn()时rtic就会将这个调用放入到一个任务队列中然后以软件触发的方式触发这个中断。 同时rtic会接管这个硬件中断的响应函数然后在这个中断响应函数中从任务队列中逐次提取相应的用户任务函数来执行。 所以使用了rtic后根本不需要再自己实现时钟任务或空闲任务队列来自己做多任务的调度了。只需要和硬件中断一样编写好自己的用户任务然后在相应的硬件中断响应任务中spawn()即可。 所以如上篇文章中就需要三个用户任务函数分别在两个硬件中断中进行触发 tick函数【TIM1_UP硬件中断的响应函数】中触发mytask和live //用户任务 mytask::spawn().unwrap(); //用板载led做个呼吸灯直观表示还活着 live::spawn().unwrap();uart1函数【USART1硬件中断的响应函数】中触发uart1_recv //串口1接收到数据 if new_data {//将接收到的数据放入用户空间cx.shared.buff_uart1_recv.lock(|buff_uart1_recv| {*buff_uart1_recv Some(buff);});uart1_recv::spawn().unwrap(); }也就是说rtic中有两种任务一种是硬件中断的处理函数由rtic内置的硬件中断响应函数进行触发一种是用户的任务处理函数必须在前一种的硬件中断处理函数中以spawn()进行触发然后rtic以软中断的方式触发dispatchers的中断然后在此中断的响应函数中进行调度来执行用户的任务处理函数。 即rtic中的任务其最终来源都是指定的硬件中断。 RTIC的任务处理 rtic中所有的任务函数都等价于硬件中断响应函数。所以就有两个问题需要考虑中断处理数据安全。 中断处理 由于所有的任务函数都是中断响应函数所以我们不得不研究一下rtic中对中断的处理方式。回答是没有任何特殊的处理主要依靠MCU芯片的中断处理机制。 arm芯片本身有其强大的中断处理机制简单的说就是高优先级的中断可以抢占低优先级的中断。其也没有核心数据的概念也就不需要特殊的中断保护机制。 所以rtic的中断处理非常简单 在初始化时只允许用户绑定的那几个硬件中断以及作为dispatchers源的那个硬件中断其它中断全部关闭所有的任务函数全部根据优先级由MCU芯片来执行中断的响应调度rtic唯一要做的就是在用户任务spawn()时按优先级排队放入任务队列然后在dispatchers时依次调度 数据安全 arm不管有没有核心数据只根据优先级进行中断处理函数的抢占与调度。但rtic则必须提供相应的数据安全保护。 因此在rtic视角就存在三种数据 rtic系统数据用于保存所有的系统数据和用户数据任务的本地数据只用于某个任务函数的数据任务的共享数据可在两个以上的任务函数间共享的数据 由于rust有强大的借用约束所以系统数据和任务数据的隔离非常简单所有的数据都由rtic拥有并管理在需要调度任务函数执行【不管是硬件中断函数还是用户任务函数】时rtic从用户数据区中引用【借出】该函数所指定的数据然后创建相应的上下文然后作为参数交给该函数执行。 也就是说任务函数所需要的数据不管是local的还是shared的都来自rtic数据区中相应数据的引用【借用】然后创建一个局部的上下文将这些数据引用复制进来。 这也是rtic中的闭包无法跨线程使用的原因因为rtic任务函数中的上下文是一个栈上的局部变量其将随着任务函数的执行结束而被销毁所以想如java或go中以闭包的方式将一些处理推入任务队列以在时钟任务队列或空闲任务队列中异步执行是根本不可能的 展开说即java或go中可将闭包所使用的数据不从栈上分配而是在堆中分配则当闭包执行完毕时对这块数据区的引用为0就可以通过gc进行回收了。 但rust没有这样的机制如果引用了上下文中的数据就需要将这些数据自己copy到堆上即创建一个Box然后将上下文中的数据保存进去然后将相应的函数指针和Box一起保存到时钟任务队列上然后在需要的时候调用。但又何必使用闭包呢 而这正好也就是rtic对local和shared两种数据的处理方式在栈上创建对应的上下文数据结构然后从保存到堆上的rtic的系统数据空间中复制需要的数据引用【借用】再将上下文提供给任务函数使用。 当然只用于某个任务函数的local数据这么处理没问题但共享数据就不可以了因为任务函数的调度是可以被更高优先级的任务函数抢占的。 这样一来如果低优先级的任务函数正在使用共享数据就可能导致错误。 rtic对此的处理是互斥即共享数据都需要以加锁的方式才能使用以保证共享数据的安全。 但这很容易就有一个困惑如果低优先级的任务函数加锁后被高优先级任务函数抢占其也要使用共享数据那是否会导致死锁 这是我们使用惯了OS或高级编程语言的习惯性认知。但rust嵌入式起码在STMS32F103芯片上它是一个单核的、没有运行时提供的阻塞任务队列来支持Mutex原语。 所以rtic对共享数据的加锁非常简单每次加锁时设置一个优先级天花板 当这个天花板是MCU的最高优先级【STMS32F103特性时是16】时则函数执行前会关闭中断函数执行完毕再打开中断否则会临时把MCU的中断响应水平提升到天花板低于或等于这个天花板的中断就暂时不响应了等任务函数执行完再恢复【请注意中断抢占可以嵌套也就是说这个屏蔽中断的天花板可以一步步提高然后再一步步恢复】 rtic一般会把这个天花板设为需要加锁的任务函数的优先级。 也就是说共享数据的锁只对低于或等于该任务函数的其它函数起作用【其实由于那些任务函数的优先级低其也根本不会来抢占本函数的执行】对于高优先级的任务函数是不起作用的 所以呢上篇文章中串口接收中断中对发送端口加锁的做法是没有任何意义的因为串口发送时其所在的live和mytask任务函数的优先级只有1而串口接收中断的优先级是3其会抢占串口发送的执行只有当串口接收完毕后才会继续串口的发送。 也就是说在当前的配置下串口本就工作于单工模式且串口发送的优先级是低于串口接收的只有为串口配置了DMA模式其才会处于双工模式。 我们搞清楚了rtic的共享数据加锁机制自然也就明白了一个关键原则如果需要在两个任务函数间共享某个数据则这两个任务函数必须设为同一个优先级否则就必须考虑高优先级函数的抢占会破坏低优先级任务函数的工作 总结 优先级是rtic正常工作的关键建议应设置自己的一套优先级标准。笔者目前的考虑是 所有的用户任务函数都是统一的最低优先级1任何硬件中断响应函数之间不应共享数据用户任务对于从硬件中断响应函数共享来的数据应尽快消费即必须考虑任务的实时性如果实时性无法保证则必须考虑使用缓存然后和硬件中断响应函数之间商定一个消费协议【如设置标记、留存大小等】 至此回看上篇文章中对串口接收的处理还是受了rtt等RTOS的影响所以自作聪明的增加了所谓上半程、下半程的多余设计如果在串口接收处理还没有消费完接收到的数据时又有新的数据进入则之前提交给串口接收处理函数的共享数据【buff_uart1_recv】依然要被接收中断修改。我现在对rust的经验还不够还无法说清楚具体会发生什么但显然系统崩溃、业务错误的风险肯定出现了。 所以合理的设计应该是设置一个未消费标识阻止接收中断在之前接收到的数据消费完毕之前接收新的数据。当然由于我们给的串口缓存足够的大更好的选择是实现环形接收缓存。 当然哪怕串口的波特率被设为了115200但触发一个接收数据中断的时间起码也需要236微秒。在STM32F103工作在36M频率时也足以执行8500多条指令只要整个应用系统不是太复杂没有非常多的功能或非常高频的其它外部中断暂时还是不太需要担心消费不过来的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么给自己公司做网站在线直播网站开发实战项目

在一个化装舞会上拍下的一位和蔼热情的瑞士母亲。菲律宾女孩好象是典型的法国帅哥。穿着印度肚皮舞服装的美国女孩。穿着蒙古袍的法国帅哥和美丽的像白雪公主一样的瑞士姑娘。蒙古袍穿在他们身上还挺合适。

建筑行业招聘网站排行榜用什么做响应式网站

1、查看串口的驱动信息 2、驱动安装文件:http://www.wch.cn/download/CH341SER_EXE.html 3、参考驱动资料:https://blog.csdn.net/jazzsoldier/article/details/70169732 转载于:https://www.cnblogs.com/qy1234/p/10146303.html

lmhosts和hosts的时效

lmhosts和hosts的时效两者都可以绑定机器名和ip,并且绑定后立刻生效。 但对于取消绑定后,hosts是立刻生效的;而lmhosts则需要重启才生效。 假如两个文件同时绑定同样的名称但ip不一样,则以hosts的为准 另lmhosts.s…

会用框架做网站能找到工作吗苏州网页制作

背景: 目前用iperf3打流传输速率达不到要求,千兆实际要求跑到800M以上: 优化方案: 1.优化defconfig: 首先编译user版本验证看是否正常 debug版本关闭CONFIG_SLUB_DEBUG_ON宏控。 2.找FAE ,通过更换驱动,或者更新驱动来优化 3.绑定大核: 以8125网卡为例,udp…

Https模式访问wcf方法配置

Https模式访问wcf方法配置<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings><add key="aspnet:UseTaskFriendlySynchronizationContext&quo…

芯之所向,智造未来:无锡哲讯科技赋能芯片行业的高效管理与数字革新

芯之所向,智造未来:无锡哲讯科技赋能芯片行业的高效管理与数字革新在当今这个由数字技术驱动的时代,芯片已成为名副其实的“工业粮食”,其战略重要性不言而喻。然而,芯片产业本身也面临着前所未有的挑战:工艺流程…

云南省新农村建设网站东营网站建设怎么建设

*本文原创作者&#xff1a;MyselfExplorer&#xff1b;翻译编辑&#xff1a;楼兰&#xff0c;本文属FreeBuf原创奖励计划&#xff0c;未经许可禁止转载 我想给你一把打开这扇门的钥匙&#xff0c;而你要做的便是静静的聆听接下来的故事。挖掘 0day 一般需要掌握fuzzing&#xf…

书荒小说阅读器是哪个网站做的学生登录注册入口

第十一章 分布式搜索引擎 elasticsearch 七、搜索结果处理 搜索的结果可以按照用户指定的方式去处理或展示。 1. 排序 elasticsearch 默认是根据相关度算分&#xff08;_score&#xff09;来排序&#xff0c;但是也支持自定义方式对搜索结果排序。可以排序字段类型有&#…

网站搭建报价企业的网站建设费账务处理

产品的实现需要做好产品规划&#xff0c;而产品的规划决定了产品的方向。本文从战略规划的重要性、产品定位、设计产品架构图三个方向&#xff0c;详细地为大家梳理了产品实现的前期准备。 我们知晓了如何去发掘问题&#xff0c;并找到解决方案。 可对于问题的处理&#xff0c…

菠菜网站怎么做推广定制开发小程序和模板小程序

使用银行卡消费的时候&#xff0c;银行往往会通过微信、短信或邮件通知用户这笔交易的信息&#xff0c;这便是一种发布订阅模式&#xff0c;这里的发布是交易信息的发布&#xff0c;订阅则是各个渠道。这在实际工作中十分常用&#xff0c;Redis 支持这样的一个模式。 发布订阅…

网站验收技术指标中国万网是干什么的

functools模块中的partial函数用于部分应用&#xff08;partial application&#xff09;一个函数的参数&#xff0c;即固定函数的部分参数&#xff0c;从而返回一个新的函数。 下面是一个使用partial函数的示例&#xff1a; python from functools import partial # 定义一…

优秀网站优点php网站开发的发展前景

学习目标 能对穷举场景设计测试点能对限定边界规则设计测试点能对多条件依赖关系进行设计测试点能对于项目业务进行设计测试点 目录 等价类划分法案例 等价类划分 说明&#xff1a;在所有测试数据中&#xff0c;具有某种共同特征的数据集合进行划分分类&#xff1a; 有效等…

界首做网站网上做调查赚钱的网站

《4月全国高等教育自学考试计算机网络与通信试题及答案解析》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《4月全国高等教育自学考试计算机网络与通信试题及答案解析(4页珍藏版)》请在人人文库网上搜索。1、精品自学考试资料推荐全国 2018 年 4 月高等教育自学考试计…

UART、I2C、SPI:三种常见通信协议的区别

在嵌入式系统开发领域,理解不同通信协议的特点与差异至关重要。UART、I2C 和 SPI 作为广泛应用的通信协议,各自有着独特的设计理念与适用场景。本文将详细探讨它们之间的区别,帮助开发者在实际项目中做出更合适的选…

Day05---数据类型的转换

public class Demo05 { public static void main(String[] args) { int i = 128; byte b = (byte)i; //内存溢出 byte最大是127System.out.println(i);System.out.println(b);//强制转换 (类型)变量名 高--低int…

效率党的图片处理新选择:滴答修——在线全能工具箱,免费且强大

在数字内容创作日益频繁的今天,图片处理已成为很多人的日常刚需——不论是简单的格式转换、尺寸调整,还是相对复杂的抠图、去水印,甚至从图片中提取文字信息。以往我们往往需要在多个软件之间来回切换,或是为某个低…

GPU0与GPU1

问题:pytorch使用GPU时,任务管理器显示GPU0工作,GPU1为0原因:没有开启独显直连 笔记本:独立显卡–>核显–>最后才会到显示器 独立显卡(NVIDIA GeForce RTX 或 AMD Radeon RX)处理所有图形计算,但计算好的…

5g云网站建设自己怎么做网站首页

代码大模型具有强大的表达能力和复杂性&#xff0c;可以处理各种自然语言任务&#xff0c;包括文本分类、问答、对话等。这些模型通常基于深度学习架构&#xff0c;如Transformer&#xff0c;并使用预训练目标&#xff08;如语言建模&#xff09;进行训练。 在对大量代码数据的…

哪里找需要网站建设的wordpress社交链接图标

linux中的缓存 页缓存 pagecatch&#xff08;读缓存用于提供快速读&#xff09;块缓存&#xff08;用于提供其他设备快速写&#xff09;当对读缓存读的时候&#xff0c;修改了读的数据&#xff0c;页缓存就会被标记为脏数据&#xff0c;等到写的时候它会向块缓存同步数据&…

《高性能网站建设指南》手机网站被做跳转

Magica Cloth 使用方法笔记 效果展示&#xff1a; 参考资料&#xff1a; 1、官方使用文档链接&#xff1a; インストールガイド – Magica Soft 2、鱼儿效果案例&#xff1a; https://www.patreon.com/posts/69459293 3、插件工具链接&#xff1a;版本() 目录&#xff1a…