我正在使用verilog设计芯片.我有一个3位计数器.我希望当计数器处于第8个循环时,应该有一个时钟故障然后正常工作.在verilog设计中可能产生时钟故障的方法是什么?
我正在尝试编写一个能够与用户输入同步播放 MIDI 文件的音乐应用程序。我已经创建了自定义视图、播放声音和读取 MIDI 数据。我在视图的 onDraw() 方法中运行 MIDI 数据的回放,以便我可以将用户输入应用于它。音符数据存储为一组音符音高和播放时间,以毫秒为单位。
我的测试数据每 500 毫秒(半秒)播放一个不同音高的音符。我在每个音符的时间间隔旁边记录 currentThreadTimeMillis(),正如我所期望的那样。每 500 个小节,播放一个音符。然而,这个以毫秒为单位的计数大约是实际速度的一半,需要一秒钟来计算 500 毫秒!我在 Galaxy Ace 上运行,所以这不是慢速模拟器的问题。
SystemClock.currentThreadTimeMillis() 为什么要花两秒钟的时间来计算 1000 毫秒?
public void onDraw(Canvas canvas) {
// TODO : Draw notes
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(aNote.img, aNote.x, aNote.y, null);
if (ready>0){
elapsed_time = SystemClock.currentThreadTimeMillis() - start_time;
midi_note_data = MIDI.track_data.get(current_note);
if (midi_note_data.start_time <= elapsed_time){
current_note++;
pitch = midi_note_data.pitch;
Log.d("MUSIC", "Note time " + midi_note_data.start_time + " ThreadTime "+ elapsed_time);
sounds.play(tone, 1.0f, 1.0f, 0, 0, notes[pitch]);
}
if (current_note > MIDI.track_data.size()-1){
ready …Run Code Online (Sandbox Code Playgroud) 我坚信有一些奇怪的事情发生,所以我想提出这个问题.
#include <time.h>
#include <stdint.h>
// shall return a monotonically increasing time in microseconds
int64_t getMonotonicTime() {
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
int64_t ret;
ret = ts.tv_sec * 1000000; // #1 HERE
ret += ts.tv_nsec / 1000;
return ret;
}
Run Code Online (Sandbox Code Playgroud)
有问题的行ts.tv_sec * 1000000导致系统溢出,其中time_t和int32位大(在我的系统上恰好是这种情况),每次ts.tv_sec大于2 147.
当我为这个bug编写测试用例时,我发现英特尔icc编译器没有溢出,即使我确信它time_t实际上也32有点宽,即使我禁用了优化.GCC行为确实导致了预期的溢出.
除了未定义的行为,英特尔不会溢出的原因是什么?英特尔开发人员的理由是什么?或者这只是我的误解?
我在VB.NET程序中有一个时钟功能,显示时间,包括秒.我现在有一个计时器不断使用现在轮询.我必须经常轮询系统时钟,因为我需要让第二次更新与系统时钟同步.
只有在秒数发生变化时,是否有更直接的访问时间?
有没有更有效的方法来编写这段代码?
如果您需要更多信息,请告诉我们.
我正在尝试制作一个数字时钟.其中一个问题是显示器会"闪烁".换句话说,wx.StaticText小部件(在这种情况下为self.ST)将在非常短的时间内变为空白.我相信原因可能会发现它是self.ST如何更新的根源(即SetLabel()).有没有办法提供更平滑的过渡,以阻止闪烁?
这是self.ST更新的功能:
def tick (self):
''' Continually updates the time. '''
TimeStr = '%I:%M %S %p'
DateStr = '%A, %B %d, %Y'
Time = time.strftime(TimeStr)
Date = time.strftime(DateStr)
self.TimeDate = Time + '\t\t' + Date
self.ST.SetLabel(Time)
wx.CallLater(1000, self.tick)
Run Code Online (Sandbox Code Playgroud) 我用javascript制作了一个时钟,但它是一个静态时钟.我需要在以下代码中进行哪些更改,以便每秒更新一次.
<html>
<head>
<title>Javascript Clock</title>
<script type="text/javascript">
function clk() {
var a=new Date();
document.getElementById("disp").innerHTML=a.getHours() + ":" + a.getMinutes() + ":" + a.getSeconds() ;
}
</script>
</head>
<body>
<input type="button" onclick="clk()" value="Display Clock" />
<p id="disp">Clock Space</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在为我的离散事件模拟开发一个时钟类.我已经在PriorityQueue中保存了事件,因此根据哪个事件具有最近的事件时间进行排序.然而,有一件事我无法理解.在我读过的关于离散事件模拟的论文中,明确指出时钟从事件跳转到事件,因此没有必要有一个"滴答"的时钟.
但是如何工作,我有一个EventScheduler类,它将事件保存在PriorityQueue中.所以在确定下一个事件的时间之后,我可以在Clock中调用一个"setTime"方法,EventScheduler会在下一个事件的给定时间内调用它吗?但那么它永远不会真正作为一个时钟运行它只会继续跳到下一个事件?
我认为时钟运行(滴答),然后它知道EventScheduler何时发生事件,当时钟到达那个时间时,它处理事件,更新系统状态并可能生成输出事件.
很抱歉有点不清楚,但我只是对时钟如何工作的任何提示感兴趣,它是否记录,然后只在事件发生时"做"事情或者只是从事件跳到事件?
你也建议我可以使用java中的任何内置功能吗?例如Timer类
正如已经有一段时间所知(例如,参见这个老问题,以及当你谷歌这个时弹出的错误报告),clock_gettime()似乎不会单调地报告时间.为了排除我可能监督的任何愚蠢错误,这里是相关代码(摘自大型程序):
<include time.h>
long nano_1, nano_2;
double delta;
struct timespec tspec, *tspec_ptr;
clock_gettime(CLOCK_MONOTONIC_RAW, tspec_ptr);
nano_1 = tspec.tv_nsec;
sort_selection(sorted_ptr, n);
clock_gettime(CLOCK_MONOTONIC_RAW, tspec_ptr);
nano_2 = tspec.tv_nsec;
delta = (nano_2 - nano_1)/1000000.0;
printf("\nSelection sort took %g micro seconds.\n", (double) delta);
Run Code Online (Sandbox Code Playgroud)
对小阵列(大约1,000个元素)进行排序会报告合理的时间.当我使用3种排序算法对较大的(10,000+)进行排序时,3个中的1-2个报告返回负排序时间.我尝试了手册页中提到的所有时钟类型,而不仅仅是CLOCK_MONOTONIC_RAW - 没有变化.
(1)我在代码中忽略了什么?
(2)是否有替代clock_gettime()的方法,以递增的方式测量时间比秒更精确?我不需要nanonseconds,但秒太粗糙,无法真正帮助.
系统:
- Ubuntu 12.04.
- 内核3.2.0-30
- gcc 4.6.3.
- libc version 2.15
- 使用-lrt编译
我需要在verilog中使用分频器,我在下面编写了代码.它有效,但我想知道是否是最好的解决方案,谢谢!
module frquency_divider_by2 ( clk ,clk3 );
output clk3 ;
reg clk2, clk3 ;
input clk ;
wire clk ;
initial clk2 = 0;
initial clk3 = 0;
always @ (posedge (clk)) begin
clk2 <= ~clk2;
end
always @ (posedge (clk2)) begin
clk3 <= ~clk3;
end
endmodule
Run Code Online (Sandbox Code Playgroud)
由quartus生成的电路:

我需要在我的C ++程序中使用全局时间戳(std :: chrono :: high_resolution_clock :: now())。我在头文件Header.h中声明了它:
#include<chrono>
using namespace std;
extern auto start;
Run Code Online (Sandbox Code Playgroud)
我想在main中初始化一个值,所以在main.cpp中,我做到了:
#include"Header.h"
#include<chrono>
using namespace std;
auto start;
int main(){
start = std::chrono::high_resolution_clock::now();
}
Run Code Online (Sandbox Code Playgroud)
但是,在编译时,我得到:
error: declaration of ‘auto start’ has no initializer
Run Code Online (Sandbox Code Playgroud)
谁能告诉我我做错了什么?谢谢!