精华内容
下载资源
问答
  • Kinetics-400数据集.zip

    2019-12-18 16:00:29
    Kinetics-400数据集百度云下载链接,由于博客不能直接粘贴链接,所以分享到了资源里。整理不易,所以设置了下载需要1积分。具体使用可以查看我的博客。
  • as400系统概况,系统接口完整阐述,系统特点,系统体系,接口技术学习,有很大帮助
  • python400集系列

    2018-08-04 09:53:28
    Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对...
  • 海康威视的设备搜索工具,网络搜索软件,重置密码等,信息管理
  • 本软件支持所有内置、外置USB声卡调试机架效果:客所思KX-2传奇版、KX-2究极版、金麦克系列声卡、蓝调系列声卡、北蓝鼠kx-2、双诺SK-10、森频系列声卡、ISK-UK400、魅声t600、魅声系列声卡、晟鸣系列声卡、ESI、艾肯...
  • 400套html5网站模板html5响应式模板 html手机自适应网页模板
  • 国家基础地理信息系统1:400万数据(1:400 million data in the national fundamental geographic information system),介绍我国地理资源的主要内容,包括国界、省界、河流、铁路等的划分和分布情况,分类很具体,...
  • 此压缩文件为国家基础地理信息系统1:400万数据,主要介绍我国地理资源的主要内容,包括国界、省界、河流、铁路等的划分和分布情况,作为科研人员使用,可以直接用于ARCGIS之中作为底图进行相关的空间分析
  • 400错误请求怎么解决A 400 Bad Request Error occurs when a request sent to the website server is incorrect or corrupt, and the server receiving the request can’t understand it. Occasionally, the ...
    400错误请求怎么解决

    400错误请求怎么解决

    A 400 Bad Request Error occurs when a request sent to the website server is incorrect or corrupt, and the server receiving the request can’t understand it. Occasionally, the problem is on the website itself, and there’s not much you can do about that. But most of the time, the problem is one you might be able to solve—maybe you typed the address wrong, or maybe your browser cache is causing problems. Here are some solutions you can try.

    当发送到网站服务器的请求不正确或损坏,并且接收到该请求的服务器无法理解时,就会发生400错误请求错误。 有时,问题出在网站本身上,您对此无能为力。 但是在大多数情况下,问题是您可能可以解决的问题-也许您输入的地址错误,或者浏览器缓存导致了问题。 您可以尝试以下解决方案。

    什么是400错误请求错误? (What Is a 400 Bad Request Error?)

    A 400 Bad Request error happens when a server cannot understand a request that’s been made of it. It’s called a 400 error because that’s the HTTP status code that the web server uses to describe that kind of error.

    当服务器无法理解对它的请求时,会发生400 Bad Request错误。 之所以称为400错误,是因为这是Web服务器用来描述这种错误的HTTP状态代码。

    A 400 Bad Request error can happen because there’s a simple error in the request. Perhaps you’ve mistyped a URL and the server can’t return a 404 Error, for some reason. Or maybe your web browser is trying to use an expired or invalid cookie. Some servers that are not configured properly can also throw 400 errors instead of more helpful errors in some situations. For example, when you try to upload a file that’s too big to some sites, you might get a 400 error instead of an error letting you know about the maximum file size.

    可能会发生400错误的请求错误,因为请求中有一个简单的错误。 也许您输入了错误的URL,并且服务器由于某种原因无法返回404错误。 也许您的Web浏览器正在尝试使用过期或无效的cookie 。 在某些情况下,某些未正确配置的服务器也可能引发400错误,而不是更多有用的错误。 例如,当您尝试上传对某些站点太大的文件时,可能会显示400错误,而不是让您知道最大文件大小的错误。

    Just like with 404 errors and 502 errors, website designers can customize how a 400 error looks. So, you might see different looking 400 pages on different websites. Websites might also use slightly different names for this error. For example, you might see things like:

    就像404错误502错误一样,网站设计者可以自定义400错误的外观。 因此,您可能会在不同的网站上看到外观不同的400页。 网站可能还会对此错误使用稍微不同的名称。 例如,您可能会看到以下内容:

    • 400 Bad Request

      400错误的要求
    • 400 – Bad request. The request could not be understood by the server due to malformed syntax. The client should not repeat the request without modifications

      400 –错误的请求。 由于语法格式错误,服务器无法理解该请求。 客户不得在未经修改的情况下重复请求
    • Bad Request – Invalid URL

      错误的请求–无效的URL
    • Bad Request. Your browser sent a request that this server could not understand

      错误的请求。 您的浏览器发送了此服务器无法理解的请求
    • HTTP Error 400. The request hostname is invalid

      HTTP错误400。请求主机名无效
    • Bad Request: Error 400

      错误的要求:错误400
    • HTTP Error 400 – Bad Request

      HTTP错误400 –错误的请求

    Often, you can do something to fix getting a 400 error, but figuring out exactly what can be challenging because of the vague nature of the error. Here are some things you can try.

    通常,您可以采取一些措施来解决出现400错误的问题,但是由于错误的含糊性质,您可以准确地找出可能具有挑战性的内容。 您可以尝试以下方法。

    刷新页面 (Refresh the Page)

    Refreshing the page is always worth a shot. Many times the 400 error is temporary, and a simple refresh might do the trick. Most browsers use the F5 key to refresh, and also provide a Refresh button somewhere on the address bar. It doesn’t fix the problem very often, but it takes just a second to try.

    刷新页面始终值得一试。 很多时候,400错误是暂时的,只需刷新即可解决问题。 大多数浏览器使用F5键刷新,并在地址栏上的某个位置提供“刷新”按钮。 它不会经常解决问题,但是只需一秒钟即可尝试。

    refresh-the-page

    仔细检查地址 (Double Check the Address)

    The most common reason for a 400 error is a mistyped URL. If you typed a URL into your address box yourself, it’s possible you mistyped. If you clicked a link on another web page and were shown a 404 error, it’s also possible that the link was mistyped on the linking page. Check the address and see if you spot any obvious errors. Also, check for special symbols in the URL, especially ones that you don’t see in URLs often.

    出现400错误的最常见原因是网址输入错误。 如果您自己在地址栏中输入了URL,则可能输入错误。 如果单击另一个网页上的链接并显示404错误,则也有可能在链接页面上键入了错误的链接。 检查地址,看看是否发现任何明显的错误。 另外,请检查URL中的特殊符号,尤其是您在URL中通常看不到的特殊符号。

    执行搜索 (Perform a Search)

    If the URL you are trying to reach is descriptive (or if you know roughly the name of the article or page you were expecting), you can use the keywords in the address to search the website. In the example below, you can’t really tell from the URL itself if anything is mistyped, but you can see some words from the name of the article.

    如果您尝试访问的URL是描述性的(或者您大致了解所期望的文章或页面的名称),则可以使用地址中的关键字搜索网站。 在下面的示例中,您无法真正从URL本身判断出是否输错了任何内容,但是可以从文章名称中看到一些单词。

    Armed with that knowledge, you can perform a search on the website with the relevant keywords.

    有了这些知识,您就可以使用相关的关键字在网站上进行搜索。

    That should lead you to the correct page.

    那应该引导您到正确的页面。

    finding-the-correct-url

    The same solution also works if the website you are trying to reach changed the URL for some reason and did not redirect the old address to the new one.

    如果您尝试访问的网站由于某种原因更改了URL并且未将旧地址重定向到新地址,则相同的解决方案也可以使用。

    And if the website you’re on doesn’t have it’s own search box, you can always use Google (or whatever search engine you prefer). Just use the “site:” operator to search only the website in question for the keywords.

    而且,如果您所在的网站没有它自己的搜索框,则可以随时使用Google(或您喜欢的任何搜索引擎)。 只需使用“ site:”运算符即可仅在相关网站中搜索关键字。

    In the image below, we’re using Google and the search phrase “site:howtogeek.com focal length” to search just the howtogeek.com site for the keywords.

    在下图中,我们使用Google和搜索词组“ site:howtogeek.com焦距”来仅搜索howtogeek.com网站中的关键字。

    using-google-search-operator

    清除浏览器的Cookie和缓存 (Clear Your Browser’s Cookies and Cache)

    Many websites (including Google and YouTube) report a 400 error because the cookies they are reading are either corrupt or too old. Some browser extensions can also change your cookies and cause 400 errors. It’s also possible that your browser has cached a corrupt version of the page you’re trying to open.

    许多网站(包括Google和YouTube)报告400错误,因为它们正在读取的Cookie损坏或过旧。 某些浏览器扩展程序也可能会更改Cookie,并导致400错误。 您的浏览器也可能缓存了您试图打开的页面的损坏版本。

    To test out this possibility, you’ll have to clear your browser cache and cookies. Clearing the cache won’t affect your browsing experience much, but some websites may a take a couple of extra seconds to load as they re-download all the previously cached data. Clearing cookies means you’ll have to sign in again to most websites.

    为了测试这种可能性,您必须清除浏览器缓存和cookie。 清除缓存不会对您的浏览体验造成太大影响,但是某些网站在重新下载所有先前缓存的数据时可能会花费额外的几秒钟时间。 清除Cookie意味着您将不得不再次登录大多数网站。

    To clear the cache in your browser, you can follow this extensive guide which will teach you how to clear your cache on all the popular desktop and mobile browsers.

    要清除浏览器中的缓存,您可以按照这份详尽的指南进行操作该指南将教您如何清除所有流行的台式机和移动浏览器上的缓存。

    刷新您的DNS (Flush Your DNS)

    Your computer might be storing outdated DNS records that are causing the errors. A simple flushing of your DNS records might help solve the problem. It’s easy to do, and won’t cause any problems to try. We’ve got full guides on how to reset your DNS cache on both Windows and macOS.

    您的计算机可能正在存储导致错误的过时DNS记录。 简单刷新DNS记录可能有助于解决问题。 这很容易做到,并且不会引起任何问题。 我们已获得有关如何在WindowsmacOS上重置DNS缓存的完整指南。

    检查文件大小 (Check for File Size)

    If you’re uploading a file to a website and that is when you are getting a 400 error, then the chances are that the file is too big. Try to upload a smaller file to confirm if this is causing the issue.

    如果您正在将文件上传到网站,也就是当您遇到400错误时,则可能是文件太大。 尝试上传较小的文件,以确认是否是引起此问题的原因。

    尝试其他网站 (Try Other Websites)

    If you’ve been trying to open a single website and getting 400 errors, you should try to open other websites to see if the problem persists. If it does, it might be a problem with your computer or networking equipment rather than the website you’re trying to open.

    如果您一直试图打开一个网站并遇到400个错误,则应尝试打开其他网站以查看问题是否仍然存在。 如果是这样,则可能是您的计算机或网络设备有问题,而不是您要打开的网站。

    重新启动计算机和其他设备 (Restart Your Computer and Other Equipment)

    This solution is a hit and miss, but restarting your computer and especially your networking equipment (routers, modems) is a common way to get rid of a lot of server errors.

    该解决方案是一个偶然的选择,但是重新启动计算机,尤其是重新启动网络设备(路由器,调制解调器)是摆脱许多服务器错误的常用方法。

    联系网站 (Contact the Website)

    If you’ve tried all the solutions and the error doesn’t seem to go away, then the website itself might be having a problem. Try to contact the website through a contact us page (if that works) or through social media. Chances are, they are already aware of the problem and working on fixing it.

    如果您尝试了所有解决方案,但错误似乎并未消除,则网站本身可能有问题。 尝试通过“联系我们”页面(如果可行)或通过社交媒体与网站联系。 他们很可能已经意识到了这个问题,并正在努力解决。

    翻译自: https://www.howtogeek.com/359267/what-is-a-400-bad-request-error-and-how-can-i-fix-it/

    400错误请求怎么解决

    展开全文
  • nginx报400问题排查记录

    千次阅读 2021-11-19 08:49:08
    这个问题用户请求别的应用都是正常 问题排查 查询了一下nginx400的原因,基本都是说请求头过大,但是前端大佬说肯定不是这个,也没深究 接下来就是用curl 模拟异常用户去请求,无论从链路上哪个节点请求,请求都是...

    背景说明

    内部使用的一个系统,应用有许多

    请求整体流程:

    前端-->nginx-->spring cloud gateway-->应用A

    前端-->nginx-->spring cloud gateway-->应用B

    前端-->nginx-->spring cloud gateway-->应用C

    ...

    前端-->nginx-->spring cloud gateway-->应用N

    许多用户访问接口都正常响应,但是有一个用户异常,请求应用A一直不成功,请求其它应用是成功的,异常请求是GET,且有查询中文参数,查看日志 发现,这个异常用户的请求在nginx日志一直报400 435,而且是nginx有日志,spring cloud gateway 也有日志,但是应用无任何日志,看不到异常用户的请求,而对于其他正常用户所有链路都可以看到请求的日志,而且这个用户在别的终端,pc打开应用都是这个400 435报错,另外,这个问题用户请求别的应用都是正常

    问题排查

    查询了一下nginx400的原因,基本都是说请求头过大,但是前端大佬说肯定不是这个,也没深究

    接下来就是用curl 模拟异常用户去请求,无论从链路上哪个节点请求,请求都是成功的,而且都有日志

    奇怪

    再然后又使用postman模拟用户请求,无论从链路上哪个节点请求,请求都是成功的,而且都有日志

    奇怪

    本地搭建了环境,和生产完全一致,本地排查

    查询了两天,也查询了nginx日志,nginx和网关对header的限制相关信息

    查不出来什么问题,也没有复现出用户出现的问题,但是这个问题用户只要访问应用A就会看到报错400 435,一开始不知道435是啥意思?查了一下就是响应长度,400是状态码,刚开始一直以为是用户请求参数问题,但是从网关看,这个异常用户的参数和正常用户没有任何差别,一直也怀疑是请求头过大,但不知道是谁限制了请求头,nginx?网关?还是应用?

    问题解决

    第三天,搞了两天,头大,没思路,第三天一切推到重来,复盘,从零开始查,我想,那会不会就是请求头过大呢?

    因为前两天对nginx网关等对请求头处理也了解一些了,应用的日志也加上了请求头信息输出,那就开始模拟请求头过大吧

    一模拟,还真出现了,但是这个是谁限制的,nginx?改了nginx header的配置,增大了一百倍,测试header绝对超不了,还是报错400 435,那就不是nginx的限制

    那就可能是网关或者应用的限制,因为网关日志正常,那就不是网关的限制,应该是应用的限制

    这里也很奇怪?既然用户请求头超限,网关为啥不报错?这个后面解释

    改了应用对header的限制,果然一切正常,有点激动

    但是,header过大异常的时候本地应用A是有一个错误日志的,但是查应用A生产日志没有相关报错,而且这个报错,只有请求第一次进来会报错,只要应用不重启,后续header过大导致异常并不会有错误日志

    所以,不能百分百确认生产也是这个问题

    但是目前也查不到别的解决方案,基本已经快崩溃了,只能先验证一下

    验证前想,会不会是ngixn对这个用户的header做了缓存(瞎猜),先重启nginx,问题用户请求应用A还是异常400 435

    那就改应用对header限制,重启应用A,让问题用户请求应用A,问题解决

    经过仔细对比,是网关给往header添加了用户信息,这个问题用户的信息比别人多,正好header超限了

    那就修改header配置(100k)

    server:

            max-http-header-size: 102400

    至此,问题解决

    但是还有一些问题需要排查,为啥别的应用没问题

    展开全文
  • 跟我动手学S7-300 400 PLC(清晰版)

    千次下载 热门讨论 2014-05-19 17:40:52
    这是一本很好的书,适合入门,上面关于PLC编程的例子写的很详细
  • AS400RPG编程语言入门学习资料汇总

    热门讨论 2012-06-02 22:55:42
    该压缩包中是本人最初开始学习IBM AS/400 RPG编程语言时所收集的一些资料,里面总共有五份资料。感觉对初学者非常有用,所以我也是收藏了很久。现在拿出来给大家共享,希望对初学者有所帮助!
  • 我安装成功了,好用! 在Win7上能够配合S7 V5.4使用。安装时要右键属性中选兼容WinXP。
  • jt400.jar

    2011-12-09 13:27:49
    jt400数据库驱动包
  • ArcGIS 中国矢量地图1比400

    热门讨论 2013-12-04 18:30:06
    全中国1比400万矢量地图,ArcGIS用,包含15个图层,含注记、周边国家、边界,以及国内的省界、河流、湖泊、铁路、公路等。信息比较全面
  • http400错误如何解决

    千次阅读 2021-06-16 10:33:06
    还有不少小伙伴们都碰到了http400错误如何解决这个疑惑吧,那么究竟该怎样解决呢?不妨就让iefans网小编告诉大家处理http400错误方法讲解,希望能够帮助到各位解决这个问题。方法/步骤分享:一、前端ajax请求,修改...

    还有不少小伙伴们都碰到了http400错误如何解决这个疑惑吧,那么究竟该怎样解决呢?不妨就让iefans网小编告诉大家处理http400错误方法讲解,希望能够帮助到各位解决这个问题。

    2d8867c5ec8f380e7881e8f4fa8e1d70.png

    方法/步骤分享:

    一、前端ajax请求,修改需要使用PUT方式,但是发送时使用了POST方式;检查请求方式,保证前后台一致

    1b215ef75da2f7b88f2b78798b32baf1.png

    二、后台接口传参数时,需要将参数放在路径上,但是前端放在对象中传输,检查参数位置

    25ad92826f3e9aeeda286e028bfc72f2.png

    三、在查询时,传参需要使用对象的后面覆盖前面方法,如对象a有属性name,对象b有属性name和age,传参数时需要将对象b覆盖a求并集

    df7c637b651f33aaf5e872a6cee13319.png

    四、在前后端调用接口时,前端需要传对象参数obj={username:you},但是直接传字段参数username=you,检查参数形式

    849353bebe22de53a5068fb60d3973ce.png

    五、后台某个接口需要10个参数,但是前端只传了8个参数,检查参数个数

    e7ce4baf545bc3a3ae3b1df4ff475231.png

    六、还有一种情况是,后台需要对象类型,但是前端传了数组或数值类型

    5113303e36318c39d13325d9d45b4422.png

    总结

    1、请求类型不一致,检查请求类型

    2、请求参数位置不对,检查参数位置

    3、请求参数没有合并,检查参数形式

    4、请求参数需要对象,改变参数形式

    5、请求参数个数不对,检查参数个数

    6、请求参数类型不对,检查参数类型

    d51757c42e9c73ce6f24e4ae6d6b4dc3.png

    注意事项

    注意http400错误怎么解决注意http400错误有哪些原因

    处理http400错误方法讲解,今天的分享就到这里了,想要学习更多软件教程就来IE浏览器中文网站,快快收藏吧,更多精彩不容错过!

    展开全文
  • 用C写的一个STM32F0系列的从I2C程序,可以支持一个或多个字节立即读以及随机读,一个或多个字节写操作;经过测试最大可满足400k的通信速率。
  • 固高运动卡GTS-400-PG卡光盘CD VB VC VC++

    热门讨论 2014-07-29 06:52:45
    固高运动卡GTS-400-PG卡光盘CD VB VC VC++
  • 西门子400H系统PLC硬冗余配置教程;十分好用,内容很详细
  • 博世BMA400传感器API (中文说明)

    万次阅读 2018-12-19 16:06:13
    最近项目中要使用BMA400(sensor),为了以后查找,这里只是对API进行翻译,有些地方翻译可能出错,请指出来一起探讨。谢谢各位看官^_^ BMA_400数据手册:https://download.csdn.net/download/qq_36075612/10861941...

    前言

            最近项目中要使用BMA400(sensor),为了以后查找,这里只是对API进行翻译,有些地方翻译可能出错,请指出来一起探讨。谢谢各位看官^_^

    BMA_400数据手册:https://download.csdn.net/download/qq_36075612/10861941

    BMA400传感器API

    内容表

    导言<a name=Intro></a>

    这个包包含Bosch Sensortec的BMA400传感器驱动程序(传感器API)

    传感器驱动程序包包括bma400.h、bma400.c和bma400_defs.h文件。

    版本和日期<a name=Ver></a>

    Driver filesVersionDate
    bma400.c1.4.007 Dec 2017
    bma400.h1.4.007 Dec 2017
    bma400_defs.h1.4.007 Dec 2017

    集成细节a name=Integration></a>

    • bma400.hbma400_defs.hbma400.c文件集成到项目中。

    • 在代码中包含bma400.h文件,如下所示。

    #include "bma400.h"

    设备文件信息<a name=file></a>

    • bma400.c : 这个源文件包含传感器API接口的函数定义

    • bma400.h : 这个头文件包含传感器API接口的函数声明

    • bma400_defs.h : 这个头文件具有常量、宏和数据类型声明。

    传感器接口<a name=interface></a>

    • I2C

    • SPI 4-wire

    集成示例<a name=examples></a>

    初始化传感器

    要初始化传感器,首先需要创建一个设备结构。

    可以通过创建结构bma400_dev的实例来实现这一点。

    然后更新结构中的各种参数,如下所示。

    SPI 4-Wire接口的初始化

    int8_t rslt;
    struct bma400_dev accel;
    ​
    /* SPI与本机芯片选择线的传感器接口 */
    accel.id = 0;
    accel.interface = BMA400_SPI_INTF;
    accel.read = user_spi_read;
    accel.write = user_spi_write;
    accel.delay_ms = user_delay_ms;
    ​
    rslt = bma400_init(&accel);
    ​
    if (rslt == BMA400_OK) {
        /* 如果初始化成功,将打印传感器芯片ID。 */
        printf("\n Chip ID of the BMA400 is : %d",accel.chip_id);
    }

    初始化I2C接口

    int8_t rslt;
    struct bma400_dev accel;
    ​
    /* 基于I2C的传感器接口 */
    accel.id = BMA400_I2C_ADDRESS_SDO_LOW;
    accel.interface = BMA400_I2C_INTF;
    accel.read = user_i2c_read;
    accel.write = user_i2c_write;
    accel.delay_ms = user_delay_ms;
    ​
    rslt = bma400_init(&accel);
    ​
    if(rslt == BMA400_OK) {
        /* 如果初始化成功,将打印传感器芯片ID。 */
        printf("\n Chip ID of the BMA400 is : %d",accel.chip_id);
    }

    传感器配置设置

    先决条件:在SPI或I2C中初始化传感器

    示例以将传感器的功率模式设置为正常模式

    int8_t rslt;
    struct bma400_dev accel;
    ​
    /* 从bma400_defs.h文件中设置所需的电源模式宏 */
    rslt = bma400_set_power_mode(BMA400_SET_NORMAL_MODE, &accel);
    ​

    示例设置传感器配置

    int8_t rslt;
    struct bma400_dev accel;
    /* 加速度计设置结构 */
    struct bma400_setting accel_setting;
    ​
    /* 选择要修改的配置类型 */
    accel_setting.type = BMA400_ACCEL;
    ​
    /* 获取传感器中设置的加速器配置 */
    rslt = bma400_get_sensor_setting(&accel_setting, 1, &accel);
    ​
    /* 根据宏修改所需的配置
     *在bma400_defs.h文件中可用 */
    accel_setting.conf.accel.odr = BMA400_ODR_100HZ;
    accel_setting.conf.accel.range = BMA400_2G_RANGE;
    accel_setting.conf.accel.data_src = BMA400_DATA_SRC_ACCEL_FILT_1;
    ​
    /* 在传感器中设置所需的配置 */
    rslt = bma400_set_sensor_setting(&accel_setting, 1, &accel);

    BMA400数据读取

    示例读取传感器数据以及传感器时间

    int8_t rslt;
    struct bma400_dev accel;
    /* 用于存储传感器数据的结构 */
    struct bma400_sensor_data data;
    ​
    /* 为了只读加速数据,我们应该使用宏BMA400_DATA_ONLY
     *为了只读accel和sensortime,我们应该使用宏BMA400_DATA_SENSOR_TIME */
    rslt = bma400_get_accel_data(BMA400_DATA_SENSOR_TIME, &data, &accel);
    if (rslt == BMA400_OK) {
        printf("\n Accel data : X : %d \t Y : %d \t  Z : %d \t Sensor time: %d"
                ,data.x,data.y,data.z,data.sensortime);
    }

    BMA400自动唤醒和自动低功耗特性

    在传感器中使用自动唤醒和自动低功耗特性

    /* 自动唤醒超时测试设置 */
    int8_t bma400_timeout_autowakeup_auto_lp(struct bma400_dev *dev)
    {
        int8_t rslt = 0;
        uint8_t power_mode;
        uint16_t int_status;
        struct bma400_device_setting dev_setting[2];
    ​
        /* 选择超时自动唤醒 */
        dev_setting[0].type = BMA400_AUTOWAKEUP_TIMEOUT;
        
        /* 选择自动低功耗模式 */
        dev_setting[1].type = BMA400_AUTO_LOW_POWER;
    ​
        /* 获取先前设置的设置 */
        rslt = bma400_get_device_setting(&dev_setting, 1, dev);
        if (rslt == BMA400_OK) {
            /* 启用超时自动唤醒功能 */
            dev_setting[0].conf.auto_wakeup.wakeup_timeout = BMA400_ENABLE;
            /* 将超时值设置为最大(10.24s) */
            dev_setting[0].conf.auto_wakeup.timeout_thres = BMA400_AUTO_WAKEUP_TIMEOUT_MAX;
    ​
            /* 设置自动低功耗超时功能  */
            dev_setting[1].conf.auto_lp.auto_low_power_trigger = BMA400_AUTO_LP_TIMEOUT_EN;
            /* 将超时值设置为最大(10.24s) */
            dev_setting[1].conf.auto_lp.auto_lp_timeout_threshold = BMA400_AUTO_LP_TIMEOUT_MAX;
    ​
            /* 设置传感器中的配置 */
            rslt = bma400_set_device_setting(&dev_setting, 1, dev);
    ​
            /* 传感器每10.24秒在低功率模式和正常模式之间切换。
             *由用户配置,可以通过读取电源模式进行测试和验证
             *并连续打印如下
             *  while (1) {
             *      rslt = bma400_get_power_mode(&power_mode, dev);
             *      printf("\n POWER MODE : %d",power_mode);
             *  }
             * 电源模式切换可以从打印的控制台输出中看到
             */
        }
         
        return rslt;
    }

    BMA400中断配置

    可以通过以下方式配置BMA400中断 下面描述的用于配置通用中断的方法

    BMA400通用中断配置

    通用中断1和2的使用,用于传感器中的活动/非活动检测_

    /* 通用中断特性 */
    int8_t bma400_generic_interrupts(struct bma400_dev *dev)
    {
        int8_t rslt = 0;
        /* 变量以存储中断状态 */
        uint16_t int_status;
        /* 传感器配置结构 */
        struct bma400_setting accel_settin[2];
        /* 中断配置结构 */
        struct interrupt_enable int_en[2];
    ​
        /* 为配置 选择GEN1和GEN2中断 */
        accel_settin[0].type = BMA400_GEN1_INT;
        accel_settin[1].type = BMA400_GEN2_INT;
    ​
        /* 获取传感器中设置的配置 */
        rslt = bma400_get_sensor_setting(&accel_settin[0], 2, dev);
    ​
        /* 从当前的“gen_int”结构中修改所需的参数
         *在“bma400_set”结构内部配置所选的
         *GEN1/GEN2中断 */
        
        if (rslt == BMA400_OK) {
            /* 设置用于活动检测的GEN 1中断 */
            accel_settin[0].conf.gen_int.int_map          =   BMA400_INT_CHANNEL_1;
            accel_settin[0].conf.gen_int.axes_sel         =   BMA400_XYZ_AXIS_EN;
            accel_settin[0].conf.gen_int.criterion_sel    =   BMA400_ACTIVITY_INT;
            accel_settin[0].conf.gen_int.evaluate_axes    =   BMA400_ANY_AXES_INT;
            accel_settin[0].conf.gen_int.ref_update       =   BMA400_ONE_TIME_UPDATE;
            accel_settin[0].conf.gen_int.data_src         =   BMA400_DATA_SRC_ACC_FILT1;
            accel_settin[0].conf.gen_int.gen_int_thres    =   0x10;
            accel_settin[0].conf.gen_int.gen_int_dur      =   0x01;
            accel_settin[0].conf.gen_int.hysteresis       =   BMA400_HYST_0_MG;
    ​
            /* 设置GEN 2中断用于活动内检测 */
            accel_settin[1].conf.gen_int.int_map          =   BMA400_INT_CHANNEL_2;
            accel_settin[1].conf.gen_int.axes_sel         =   BMA400_XYZ_AXIS_EN;
            accel_settin[1].conf.gen_int.criterion_sel    =   BMA400_INACTIVITY_INT;
            accel_settin[1].conf.gen_int.evaluate_axes    =   BMA400_ANY_AXES_INT;
            accel_settin[1].conf.gen_int.ref_update       =   BMA400_ONE_TIME_UPDATE;
            accel_settin[1].conf.gen_int.data_src         =   BMA400_DATA_SRC_ACC_FILT1;
            accel_settin[1].conf.gen_int.gen_int_thres    =   0x10;
            accel_settin[1].conf.gen_int.gen_int_dur      =   0x01;
            accel_settin[1].conf.gen_int.hysteresis       =   BMA400_HYST_0_MG;
            
            /* 设置传感器中的配置 */
            rslt = bma400_set_sensor_setting(&accel_settin[0], 2, dev);
    ​
            if (rslt == BMA400_OK) {
            
                /* 启用传感器中的通用中断 */
                int_en[0].int_sel = BMA400_GEN1_INT_EN;
                int_en[0].conf = BMA400_ENABLE;
                
                int_en[1].int_sel = BMA400_GEN2_INT_EN;
                int_en[1].conf = BMA400_ENABLE;
    ​
                rslt = bma400_enable_interrupt(&int_en[0], 2, dev);
    ​
                /* 传感器被移动或保持静止,并且是靠的。
                 *在GEN1/GEN2上触发活动/非活动中断
                 *根据设置中断 */
                if (rslt == BMA400_OK) {
                    while (1) {
                        rslt = bma400_get_interrupt_status(&int_status, dev);
                        printf("\t INT STATUS : %x", int_status);
    ​
                        if (int_status & BMA400_GEN1_INT_ASSERTED) {
                            printf("\n GEN1 INT ASSERTED (ACTIVITY DETECTION)");
                        }
    ​
                        if (int_status & BMA400_GEN2_INT_ASSERTED) {
                            printf("\n GEN2 INT ASSERTED (IN-ACTIVITY DETECTION)");
                        }
                    }
                }
            }
    ​
        }
    ​
        return rslt;
    }

    检查传感器中是否启用/禁用中断的示例

    int8_t bma400_check_int_en(struct bma400_dev *dev)
    {
        int8_t rslt = 0;
        struct interrupt_enable int_en[6];
        
        /* 选择我们需要知道的中断
         *是否在传感器中启用它们 */
        int_en[0].int_sel = BMA400_STEP_INT_EN;
        int_en[1].int_sel = BMA400_DRDY_INT_EN;
        int_en[2].int_sel = BMA400_ACTIVITY_CHANGE_INT_EN;
        int_en[3].int_sel = BMA400_ORIENT_CHANGE_INT_EN;
        int_en[4].int_sel = BMA400_FIFO_FULL_INT_EN;
        int_en[5].int_sel = BMA400_FIFO_WM_INT_EN;
        
        /* 从传感器获取启用/禁用状态 */
        rslt = bma400_get_interrupts_enabled(&int_en[0], 6, dev);
    ​
        /* 打印结果0-means禁用;1-measn启用 */
        printf("\n Step interrupt enabled/disabled : %d",int_en[0].conf);
        printf("\n DRDY interrupt enabled/disabled : %d",int_en[1].conf);
        printf("\n Activity change interrupt enabled/disabled : %d",int_en[2].conf);
        printf("\n ORIENT interrupt enabled/disabled : %d",int_en[3].conf);
        printf("\n FIFO Full interrupt enabled/disabled : %d",int_en[4].conf);
        printf("\n FIFO watermark interrupt enabled/disabled : %d",int_en[5].conf);
    ​
        return rslt;
    }

    BMA400的自检

    int8_t bma400_self_test(struct bma400_dev *dev)
    {
        int8_t rslt = 0;
        
        rslt = bma400_perform_self_test(dev);
        
        if (rslt == BMA400_OK) {
            printf("\n Self test success ");
        } else {
            printf("\n Self test failed ");
        }
    ​
        return rslt;
    }

    BMA400温度数据读出

    /* 要传递给API的变量 */
    int16_t temp_data = 0;
    /* 用于存储最终温度数据的变量 */
    float temperature_data = 0;
    ​
    rslt = bma400_get_temperature_data(&temp_data, dev);
    ​
    /* 除以10倍以得到准确度
     *具有1小数精度的温度数据 */
    temperature_data = ((float)temp_data) / 10.0f;
    ​
    printf("\n Temperature data : %0.1f",temperature_data);

    BMA400步骤计数器和活动状态(step_stat_field)

    /* 变量以存储步骤计数器数据 */
    uint32_t step_count = 0;
    /* 变量以存储活动状态 */
    uint8_t step_stat_activity = 0;
    ​
    rslt = bma400_get_steps_counted(&step_count, &step_stat_activity, dev);
    ​
    printf("\n Steps Counted : %ld", step_count);
    ​
    switch(step_stat_activity) {
    case BMA400_STILL_ACT:
        printf("\n Activity : Staying Still");
        break;
    case BMA400_WALK_ACT:
        printf("\n Activity : Walking ");
        break;
    case BMA400_RUN_ACT:
        printf("\n Activity : Running ");
        break;
    default:
        printf("\n Activity : undefined");
        break;
    }

    BMA400 FIFO的使用

    BMA400 FIFO具有一个FIFO,该FIFO可以被配置为获得 来自FIFO的12/8位模式下数据的x,y,z,x y,y z,x z组合

    在BMA400中配置和读取FIFO数据的示例

    /* 使用FIFO中启用的xyz数据读取FIFO数据 */
    int8_t bma400_fifo_read(struct bma400_dev *dev)
    {
        int8_t rslt;
        
        /* 用于解析和打印数据的索引 */
        uint16_t index;
        
        /* 设置和配置FIFO缓冲区 */
        /* 声明内存以存储原始FIFO缓冲区信息 */
        uint8_t fifo_buff[500] = {0};
        
        /* 声明传感器数据结构的实例以存储解析后的FIFO数据 */
        struct bma400_sensor_data accel_data[50] = {0};
        
        /* 用户需要的加速度计框架 */
        uint16_t accel_frames_req = 50;
        
        /* 由用户定义的FIFO配置结构 */
        struct bma400_fifo_frame fifo_frame = {0};
        
        /* 修改FIFO缓冲实例并链接到设备实例 */
        fifo_frame.data = fifo_buff;
        fifo_frame.length = 500;
        dev->fifo = &fifo_frame;
        
        /* 将FIFO配置设置为XYZ在12位模式下启用 */
        struct bma400_device_setting accel_sett;
    ​
        accel_sett.type = BMA400_FIFO_CONF;
    ​
        rslt = bma400_get_device_setting(&accel_sett, 1, dev);
    ​
        if (rslt == BMA400_OK) {
            /* 为了启用8位模式,我们需要显式地使用宏
             *“BMA400_FIFO_8_BIT_EN” */
            accel_sett.conf.fifo_conf.conf_regs = BMA400_FIFO_X_EN | BMA400_FIFO_Y_EN | BMA400_FIFO_Z_EN;
            accel_sett.conf.fifo_conf.conf_status = BMA400_ENABLE;
            
            rslt = bma400_set_device_setting(&accel_sett, 1, dev);
            
            if (rslt == BMA400_OK) {
                /*延迟以填充FIFO数据
                 *在ODR为100Hz时,1帧在1/100=0.01s内更新。
                 *即,对于50帧,我们需要50*0.01=0.5秒延迟*/
                dev->delay_ms(500);
            
                /* 读取FIFO数据 */
                printf("\n Requested FIFO length : %d \n",dev->fifo->length);
                rslt =  bma400_get_fifo_data(dev);
                if (rslt != BMA400_OK) {
                    printf("\n FIFO read failed ");
                }
                printf("\n Available FIFO length : %d \n",dev->fifo->length);
                
                /* 打印FIFO数据缓冲区 */
                for (index = 0; index <= dev->fifo->length; index++) {
                    printf("\n FIFO INDEX[%d] = %d", index, dev->fifo->data[index]);
                }
                
                printf("\n Requested FIFO frames : %d \n", accel_frames_req);
                rslt =  bma400_extract_accel(accel_data, &accel_frames_req, dev);
    ​
                if (rslt != BMA400_OK) {
                    printf("\n Accel data extraction failed");
                }
                
                printf("\n Extracted FIFO frames : %d \n", accel_frames_req);
                
                /* 打印来自FIFO缓冲区的加速数据 */
                for (index = 0; index < accel_frames_req + 1; index++) {
                    printf("FIFO FRAME[%d] ACCEl X DATA : %d \t  Y DATA : %d \t  Z DATA : %d \n"
                        , index, accel_data[index].x, accel_data[index].y
                        , accel_data[index].z);
                }
                
                printf("\n FIFO SENSOR TIME : %d",dev->fifo->fifo_sensor_time);
                printf("\n FIFO CONF CHANGE : %d",dev->fifo->conf_change);
                
                if (dev->fifo->conf_change & BMA400_FIFO_CONF0_CHANGE) {
                    printf("\n FIFO data source configuration changed \n");
                }
                
                if (dev->fifo->conf_change & BMA400_ACCEL_CONF0_CHANGE) {
                    printf("\n Accel filt1_bw configuration changed \n");
                }
                
                if (dev->fifo->conf_change & BMA400_ACCEL_CONF1_CHANGE) {
                    printf("\n Accel odr/osr/range configuration changed \n");
                }
            }
        }
        
        return rslt;
    }

    配置FIFO水印中断并启用FIFO完全中断的示例

    /* 配置FIFO水印中断和FIFO完全中断 */
    int8_t bma400_fifo_interrupts(struct bma400_dev *dev)
    {
        int8_t rslt;
    ​
        /* 包含加速设置的结构 */
        struct bma400_device_setting accel_sett;
    ​
        /* 包含中断设置的结构 */
        struct interrupt_enable int_select[2];
    ​
        /* 选择类型为BMA400_FIFO_CONF */
        accel_sett.type = BMA400_FIFO_CONF;
    ​
        /* 变量以存储中断状态 */
        uint16_t int_status;
    ​
        /* 获取FIFO配置 */
        rslt = bma400_get_device_setting(&accel_sett, 1, dev);
    ​
        if (rslt == BMA400_OK) {
            /* 设置FIFO配置 */
            accel_sett.conf.fifo_conf.conf_regs = BMA400_FIFO_X_EN | BMA400_FIFO_Y_EN |BMA400_FIFO_Z_EN;
            accel_sett.conf.fifo_conf.conf_status = BMA400_ENABLE;
    ​
            /* 将FIFO水印设置为500字节 */
            accel_sett.conf.fifo_conf.fifo_watermark = 500;
    ​
            /* 将水印中断映射到INT引脚2 */
            accel_sett.conf.fifo_conf.wm_int_map = BMA400_INT_CHANNEL_2;
            /* 将FIFO完全中断映射到INT引脚1 */
            accel_sett.conf.fifo_conf.fifo_full_int_map = BMA400_INT_CHANNEL_1;
    ​
            /* 设置FIFO配置 */
            rslt = bma400_set_device_setting(&accel_sett, 1, dev);
    ​
            if (rslt == BMA400_OK) {
                /* 刷新FIFO */
                rslt = bma400_set_fifo_flush(dev);
    ​
                /* 选择指定的中断并启用它们 */
                int_select[0].int_sel = BMA400_FIFO_FULL_INT_EN;
                int_select[0].conf = BMA400_ENABLE;
    ​
                int_select[1].int_sel = BMA400_FIFO_WM_INT_EN;
                int_select[1].conf = BMA400_ENABLE;
    ​
                /* 启用传感器中的中断 */
                rslt = bma400_enable_interrupt(int_select, 2, dev);
    ​
                while (1) {
                    /* 获取中断状态 */
                    rslt = bma400_get_interrupt_status(&int_status, dev);
    ​
                    if (int_status & BMA400_FIFO_WM_INT_ASSERTED) {
                        printf("\n FIFO WM INT ASSERTED");
                        /* 断言水印中断,如果
                         *用户希望他可以在这个实例读取FIFO数据 */
                    }
    ​
                    if (int_status & BMA400_FIFO_FULL_INT_ASSERTED) {
                        printf("\n FIFO FULL INT ASSERTED");
                        /* 断言FIFO完全中断,如果
                         *用户希望他可以在这个实例读取FIFO数据 */
                    }
                }
            }
        }
    ​
        return rslt;
    }

    下面三个文件,购买芯片时,厂家会提供,这里我就不贴出来了。

    bma400.c

    bma400.h

    bma400_defs.h

    有几位看官,都在私信询问我关于BMA400的资料,在这我就把它贴出来:链接

    展开全文
  • DG400Free_x86.rar 硬盘工具

    热门讨论 2012-10-17 08:44:01
    DG400Free_x86.rar
  • 需要原生8bit色深、100sRGB色域、最高400峰值亮度、全局背光 说白了DisplayHDR 400是最辣鸡的,基本上支持HDR的显示器都能通过DisplayHDR 400的认证。 因为他的要求真的太低了:原生8bit色深、100sRGB色域、最高400...
  • HTTP Status 400 (HTTP400状态码)

    万次阅读 2019-11-16 21:17:16
    异常信息记录_2019-11-16 HTTP Status 400 – 错误的请求 > ==Type== Status Report > ==描述== 由于被认为是客户端对错误(例如:畸形的请求... 出现400,首先需要想到的是前端页面传来的数据类型与后...
  • 中国高清地理区位,行政区划,1:400万图幅,含道路,河流,国界,省界,县界
  • post请求返回400错误但是postman却调用成功 遇到一个很奇怪的问题,做一个http调用其他系统api的功能,代码写完后在本地测试一切正常,但是部署到服务器后post请求全部都400错误了 怀疑是参数格式错了,然后在日志...
  • 400页面是当用户在打开网页时,返回给用户界面带有400提示符的页面。其含义是你访问的页面域名不存在或者请求错误。主要有两种形式:1、bad request意思是“错误的请求";2、invalid hostname意思是"不存在的域名”...
  • IBM AS400完整版中文技术手册,入门精品教程
  • Kinetics-400数据集下载

    万次阅读 多人点赞 2019-12-18 15:40:47
    为了下载Kinetics-400数据集,我煞费苦心,国内搜了好久都没有搜到资源,用ActivityNet提供的下载程序需要下载原视频一个一个自动剪辑,速度特别慢,很多视频都找不到。终于,一个师兄给了我一丝光明,给我一个...
  • 400错误看Nginx常见故障与修复

    万次阅读 2018-09-29 22:19:55
    众所周知,Nginx是目前最流行的Web ...因此,本文将从一个Nginx错误代码400引发的故障入手,谈谈如何分析和修复常见的Nginx异常。   故障简述 小明某天中午在线优化一个敏感服务的Nginx配置时,发现5分钟内Ngin...
  • [trustzone]-TZC400学习总结

    千次阅读 2020-07-06 16:22:00
    文章目录1、tzc400的硬件框图2、TZC-400 example system3、FPIDs and NSAIDs4、region setup 1、tzc400的硬件框图 从图中可以看出 apb接口 : 用于cpu读写tzc-400的寄存器; ACE-Lite接口 : TZC400的通过ACE-Lite接口...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,041,009
精华内容 416,403
关键字:

400

友情链接: hb280.zip