C 嵌入式应用程序中 time() 函数的问题

2024-04-20

我在用time()在 ARM 微控制器上。处理器一到达此函数就会重新启动。

奇怪的是,当我处于调试模式时,代码运行得很好,但一旦我想将其应用到独立模式,我就会遇到重置。

我是否忽略了什么? 这个功能有替代品吗?

代码部分是这样的

#include <sys/time.h>
#include <stdio.h>

void main (void)
{

   static time_t  rawtime = 0;

   rawtime = time (NULL);
}

这个功能有替代品吗?

可用的时间来源是硬件依赖的,图书馆是硬件独立的。因此,您必须自己提供具有硬件依赖性的库函数的实现,或者在某些情况下它们可能包含在供应商提供的板支持包 (BSP) 中。头文件 time.h 提供了您的实现必须符合的标准声明,而本例中的库提供了一个功能不完整的默认实现。

如果您使用armcc(例如在Keil ARM MDK中使用),则默认time() http://infocenter.arm.com/help/topic/com.arm.doc.dui0475m/chr1359122861930.html实施用途半托管 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0475m/vaq1478249454515.html。也就是说,它从开发主机而不是目标硬件获取时间。

仅当连接到调试主机进行调试时,半主机才起作用。然而在那种情况下time()应该返回 -1 而不是处理器重新启动。此功能不是重新启动的原因 - 您可以通过删除它来证明,重新启动仍然会发生。重新启动只是您明确地从main()- 运行时还应该做什么?它要么直接重新启动,要么可能进入繁忙循环,其中看门狗定时器到期可能会重新启动它。这取决于您的 C 运行时环境实现。此外,根据调试器是否连接,行为可能会有所不同;可以确定片上调试何时处于活动状态,并有条件地执行断点指令,例如中断调试器。

To have time()要与您的目标硬件正常工作而不是使用半托管,您必须重新实现它。它被定义为弱链接,您提供的任何实现都将覆盖默认值,因此在项目中的某个位置您必须有一个函数:

#include <time.h>

time_t time( time_t* timep )
{
    int hour = 0 ;
    int minute = 0 ;
    int second = 0 ;
    int day_of_month = 0 ;
    int month = 0 ; 
    int year = 0 ;

    // Your code here to fill time/date from clock source
    ...

    // Normalise to time.h library epoch time_t (normally Unix epoch)
    struct tm timeinfo;
    timeinfo.tm_mon  = month - 1 ;   // check assumption here Jan = 0 in tm
    timeinfo.tm_mday = day_of_month ;
    timeinfo.tm_year = year + 100 ;  // check assumption here years start from 1900 in tm 
    timeinfo.tm_hour = hour ;
    timeinfo.tm_min  = minute;
    timeinfo.tm_sec  = second;

    // Convert to timestamp
    time_t t = mktime(&timeinfo);
    if( timep != NULL )
    {
        *timep = t ; 
    }

    return t; 
}

如果您的时间源需要进行任何类型的初始化才能工作,您可以通过多种方式执行此操作,例如:

  • 将初始化代码放在之前运行的运行时启动代码中main()。例如,您的启动代码可能有一个名为SysInit()或类似的地方你应该这样做。
  • 要求开发者在使用前进行必要的初始化time()用来。
  • 首次使用时通过修改time()功能如下:

#include <time.h>
#include <stdbool.h>

time_t time( time_t* timep )
{
    static bool initialised = false ;
    if( !initialised )
    {
        initialised = true ;

        // your clock source initialisation here
        ...
    }

    ...

最后一种方法可能是最简单且最不易出错的方法,并且不会为系统添加应用程序不使用时可能不需要的代码time().

您的示例代码包含 stdio.h 但不使用它,但请注意,默认的 stdio 实现同样依赖于半托管,并且可能需要重新定位 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0475m/chr1359122861930.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 嵌入式应用程序中 time() 函数的问题 的相关文章

  • 使用 gcc 在 Linux 上运行线程构建块 (Intel TBB)

    我正在尝试为线程构建块构建一些测试 不幸的是 我无法配置 tbb 库 链接器找不到库 tbb 我尝试在 bin 目录中运行脚本 但这没有帮助 我什至尝试将库文件移动到 usr local lib 但这又失败了 任何的意见都将会有帮助 确定您
  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置

随机推荐

  • 在什么类型的情况下汇编速度不够快,因此您需要直接的硬件/布尔逻辑解决方案?

    我已经开始通读装配艺术 https nostarch com assembly2 htm 其中有一个关于布尔逻辑的部分 其中指出 当然 使用 Pascal C 甚至汇编语言等语言指定编程问题的解决方案比使用布尔方程指定解决方案要容易得多 因
  • 具有动态嵌套组件的角度循环依赖性

    我在互联网上寻找解决方案 但无济于事 不同情况等 所以请原谅下面的代码转储 我遇到的问题与循环依赖有关 代码转储是为了提供上下文 旁注 我对 Angular 和 Typescript 相当陌生 这个概念 当然 我正在尝试构建一组嵌套组件 它
  • 克隆/拉取 git 存储库时出现致命读取错误

    我在我的系统上使用 Git for Windows git 版本 1 7 4 msysgit 0 并且大多数时候它都工作得很好 但是今天在大学 每当我尝试使用 Git 时 我都会遇到问题git clone or git pull or ge
  • 在新日期上调用 getTime 时,未定义不是函数

    当尝试运行它时 我得到 未定义不是一个函数 我缺少什么 function bench func var start new Date getTime for var i 0 i lt 10000 i func console log fun
  • 当多个Spring Singleton实例同时访问时

    如果您在 Spring 配置中的单例范围内定义服务 那么如果多个用户尝试同时访问它 即作为依赖项注入到您的控制器中 会发生什么情况 它应该引起任何冲突吗 或者 IoC 容器将保留后面的调用直到第一个调用完成 如果是这样 它会降低大型应用程序
  • 绑定到枚举的关联值

    是否有一个标准的方法来绑定 比如说 TextField到枚举的关联值 所以 鉴于此 enum Choice case one String case two String 我可以以某种方式将它用作视图中的绑定吗 State var choi
  • 当方向设置为水平时,UIPageViewController 响应垂直平移

    我在这上面花了几个小时 我已经初始化了UIPageViewController with UIPageViewControllerNavigationOrientationHorizontal 但由于某种原因viewControllerBe
  • 我可以在共享库中声明全局变量吗?

    我可以在库中声明一个全局变量 然后将其编译为共享对象吗 通过将其声明为 extern 从其他库或主应用程序代码中引用它是否安全 理论上它是有效的 niko dev1 snippets cat libcode c int variable l
  • drools 中是否有任何 API 可以通过传递值来动态创建 drl 文件?

    我知道如何使用所有方法在 KIE 工作台中创建 DRL 文件 但我的问题是不使用 KIE 工作台 我们可以创建 drl使用我们所需的值进行文件 如果有任何可能性 请建议我 同样的方式建议我任何与此相关的 API 提前致谢 您可以使用Droo
  • 移动 safari 图片上传及其大小

    众所周知 Safari 移动版现在允许通过相机或图像库上传文件 问题 是 当从相机中拍摄照片时 它会按原样发送 这意味着它占用的内存非常大 我认为即使在 iPhone 4 上也大约有 2 或 3 mb 这使得上传速度非常慢并且消耗带宽 不适
  • 为什么 Visual Studio 有时无法到达我的断点?

    我一直在使用 Visual Studio 2005 和 2008 我注意到有时当我在代码中放置断点时 它不想转到断点 所以我重新启动我的电脑 然后它又可以工作了 好像有什么东西卡住了 这种事只发生在我身上吗 我怎样才能防止这种情况发生 这让
  • 使用 GORM 根据子表中的列进行排序?

    我有一个名为员工和子表地址的表 现在我想使用 GORM 获取地址表中按地址1排序的员工列表 Employee findAllByName name max maxRecords offset 100 sort Address address
  • 如何在JTree中的节点旁边显示特定的属性名称和值?

    我想在节点名称旁边显示属性的名称和值JTree 谁能告诉我该怎么做 这是我用来显示的代码JTree import javax swing import java awt import java awt event import java a
  • 如何获取 iPhone MPMoviePlayer 视频的总时间?

    我只想弄清楚如何获取视频的总时间 以秒为单位 是否有加载的视频元数据之类的 MP电影播放器 控制器有财产duration iOS 3 2 电影的时长 以秒为单位 只读 property 非原子 只读 NSTimeInterval持续时间 如
  • 就 RESTful 和无状态而言,拥有 /currentUser 等 REST 资源是否合法?

    就 RESTful 和无状态而言 拥有这样的资源是相当合法的 用户 123 但是 问题是 拥有省略用户 ID 并假设它是从用户会话在服务器上隐式解析的资源是否合法 例如 loggedUser 当标识符为 123 的用户被授权时 该资源将指向
  • 获取 Ruby 中第一个 = 符号之后的子字符串

    纯粹出于好奇 是否有一种更优雅的方法来简单地获取第一个之后的子字符串 字符串中的符号 以下作品回馈name bob string option name bob string string index 1 1 只是感觉不太像Ruby 这也有
  • 用于 Java 的 JWT(JSON Web Token)库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个使用 Java 和 AngularJS 开发的 Web 应用程序 并选择实现令牌身份验证
  • Fabric 上的事件中心已关闭 编写您的第一个应用程序

    我目前正在尝试在此处运行 Hyperledger Fabric 的第一个应用程序示例 gt http hyperledger fabric readthedocs io en release 1 1 write first app html
  • 您推荐哪种工作流引擎? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑在这个即将到来的项目中使用工作流引擎的想法 我们知道使用工作流引擎有很多注意事项 并且我们在许多平台上拥有丰富的开发经验 因此我
  • C 嵌入式应用程序中 time() 函数的问题

    我在用time 在 ARM 微控制器上 处理器一到达此函数就会重新启动 奇怪的是 当我处于调试模式时 代码运行得很好 但一旦我想将其应用到独立模式 我就会遇到重置 我是否忽略了什么 这个功能有替代品吗 代码部分是这样的 include