- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在研究将“分流”型传感器集成到电子板上。我选择了 Linear (LTC2947),不幸的是它只有一个 Arduino 驱动器。我必须在 Linux 下翻译 C 中的所有内容以与我的微处理器(APQ8009 ARM Cortex-A7)兼容。我对其中一个功能有一个小问题:
int16_t LTC2947_wake_up() //Wake up LTC2947 from shutdown mode and measure the wakeup time
{
byte data[1];
unsigned long wakeupStart = millis(), wakeupTime;
LTC2947_WR_BYTE(LTC2947_REG_OPCTL, 0);
do
{
delay(1);
LTC2947_RD_BYTE(LTC2947_REG_OPCTL, data);
wakeupTime = millis() - wakeupStart;
if (data[0] == 0) //! check if we are in idle mode
{
return wakeupTime;
}
if (wakeupTime > 200)
{
//! failed to wake up due to timeout, return -1
return -1;
}
}
while (true);
}
在找到 usleep() 等同于 delay() 之后,我在 C 中找不到 millis() 的它。你能帮我翻译这个函数吗?
最佳答案
Arduino millis()
基于一个定时器,该定时器在非常接近 1 KHz 或 1 毫秒时触发溢出中断。为实现同样的目的,我建议您在 ARM 平台上设置一个计时器,并使用计数器更新一个 volatile unsigned long
变量。这将等同于 millis()。
这是 millis() 在幕后所做的事情:
SIGNAL(TIMER0_OVF_vect)
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;
m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}
timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}
unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;
// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;
return m;
}
来自嵌入式世界,可以说,在新平台上开始项目时,您应该做的第一件事就是建立时钟并让定时器中断以规定的速率运行。那就是嵌入式系统的“Hello World”。 ;) 如果您选择以 1 KHz 的频率执行此操作,那么您就成功了。
关于c - 相当于Arduino millis(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306220/
我在 android 中每隔 5 分钟编写一次我自己的后台位置更新。我想知道 setInterval 和 setFastestInterval 的区别 当我将Interval 设置为 5 分钟并将Fa
我正在尝试将一些 Arduino 库移植到 stm32。在 Arduino 中,millis() 返回自启动以来的毫秒数。 stm32中有类似的函数吗?我使用的是stm32f0 MCU。 最佳答案 您
我正在尝试制作我的 Arduino sketch每次执行 loop 函数时休眠 1 秒。 循环中涉及的方法可能会改变它们的执行时间,这就是我实现 millis 的原因。 我正在做以下事情: unsig
我试图让一个函数每 x 个数量触发一次而不阻塞主循环,我看到了一些示例代码来执行此操作,请参阅下面的代码: // Interval is how long we wait // add const i
我正在尝试制作我的 Arduino sketch每次执行 loop 函数时休眠 1 秒。 循环中涉及的方法可能会改变它们的执行时间,这就是我实现 millis 的原因。 我正在做以下事情: unsig
我目前正在研究将“分流”型传感器集成到电子板上。我选择了 Linear (LTC2947),不幸的是它只有一个 Arduino 驱动器。我必须在 Linux 下翻译 C 中的所有内容以与我的微处理器(
我运行了Kubernetes的v1.9.2自定义设置,并使用Prometheus v2.1.0抓取了各种指标。除其他外,我刮了kubelet和cAdvisor指标。 我想回答一个问题:“在部署中,po
我目前正在从事处理工作。我想在调用函数 4 秒后执行它。我尝试通过在特定时间获取值并进行比较来使用 millis() 。但是当我写时: final int m = millis(); m 的值随着 m
我的这段代码有问题。我知道问题所在,但找不到好的解决方案。 我有两个使用 millis() 的函数 - clock() 和 time()。 函数clock()返回日期和时间,函数time()返回另一个
我有一个场景,我想创建具有时间戳列的 avro 文件,它看起来像 2016-11-16 06:43:19.77 我使用avro-1.8.2.jar 编写avro 文件。这对于原始类型的记录非常有效,但
我正在 Processing 中制作一个小游戏这与那些《吉他英雄》风格的游戏类似,我正在尝试做两件事: 游戏加载时,停止时间移动 在游戏过程中,允许使用暂停功能 现在,我知道我无法停止时间,因为 mi
class TestJoinMethod2 extends Thread{ public void run(){ for(int i=1;i<=5;i++){ try{ T
我使用 Neopixels(64 个 LED),我有一个名为 level_up 的函数,它每次都获得不同的 led_num。一般为水平条; level[1] 将依次点亮从 0 到 28 的所有 LED
过了一会儿,我得到了我想要的最终结果,但我不能使用延迟,因为我需要不同的时间来处理不同的 strip ,所以我需要用 millis 替换 delay() () 在这段代码中: #include #d
我正在使用 Joda Time 进行 JUnit 测试,以便“绕过”代码中的超时窗口。我似乎不太明白 Joda Time 是如何工作的——我的代码: // TIMEOUT is "1000 * 90"
我正在制作一个 GPS 设备,可以在不重新启动的情况下运行大约一年。我正在使用 TinyGPS+ 库。我注意到库中有 millis() 函数。所以它们会溢出。有什么办法可以避免吗? 最佳答案 但是你需
在 Ruby 中,我需要在 n 毫秒 秒后暂停一段代码的执行。我知道 Ruby Timeout 库支持秒的超时: http://ruby-doc.org/stdlib/libdoc/timeout/r
作为一名初级 Java 开发人员,在编写我的第一个多线程代码时,我记得想要使用 Thread.join(millis)循环中,并在每次线程仍然 Activity 时进行记录。我很惊讶地看到join返回
我有这个毫秒长: 1570046362841 使用版本 1 进行转换时: var myDate = ZonedDateTime.ofInstant(Instant.ofEpochSecond(1570
我对时间戳及其比较这个主题感到非常困惑。 我想要什么:我有一个小聊天应用程序。每当用户在聊天中时,每 5 秒就会向服务器发送一个异步请求,时间以毫秒为单位(从 5 秒前开始,过程为 打开聊天 以毫秒为
我是一名优秀的程序员,十分优秀!