如何修改struct_time = time.localtime(t//1000),不让它报错
时间: 2024-05-08 19:18:51 浏览: 13
如果你想修改struct_time = time.localtime(t//1000)并避免报错,可以通过以下方式进行修改:
```
import datetime
t = 1557502803123
dt = datetime.datetime.fromtimestamp(t/1000.0)
struct_time = time.localtime(dt)
```
这里我们首先将时间戳t从毫秒转换为秒(t/1000.0),然后使用datetime.datetime.fromtimestamp()方法将其转换为datetime对象。最后使用time.localtime()方法将datetime对象转换为struct_time对象,并将其赋值给变量struct_time。这样可以避免报错。
相关问题
NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel =USART1_IRQn; //串口1 NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =1; NVIC_InitStruct.NVIC_IRQChannelSubPriority =0; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn; // 外部中断线0对应的中断向量 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1; // 子优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; //TIM2中断 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2; //子优先级 NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); //使能中断 NVIC_InitStruct.NVIC_IRQChannel =EXTI1_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =0; NVIC_InitStruct.NVIC_IRQChannelSubPriority=3; NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStruct);
这段代码是针对STM32的中断初始化代码。其中,NVIC代表嵌入式系统中断控制器,NVIC_InitStruct代表中断配置结构体。
首先,这段代码配置了USART1串口的中断,中断优先级为1,子优先级为0。然后,配置了外部中断线0的中断,抢占优先级为0,子优先级为1。接着,配置了TIM2定时器的中断,抢占优先级为0,子优先级为2。最后,配置了外部中断线1的中断,抢占优先级为0,子优先级为3。
通过这些配置,当对应的中断事件触发时,系统会执行对应的中断服务程序,从而实现对应的功能。
double priority_scheduling(struct Process processes[]) { int i, j; int waiting_time = 0, turnaround_time = 0, completion_time=0; float average_waiting_time=0, average_turnaround_time=0; printf("\nProcess\t|Waiting Time |Turnaround Time| completion_time\n"); // 遍历每个进程 for(i = 0; i < n; i++) { // 找到优先级最高的进程 int highest_priority = i; for(j = i + 1; j < n; j++) { if (processes[j].arrival_time <= waiting_time && processes[j].priority < processes[highest_priority].priority) { highest_priority = j; } } // 计算等待时间和周转时间 waiting_time += (waiting_time >= processes[highest_priority].arrival_time) ? 0 : (processes[highest_priority].arrival_time - waiting_time); turnaround_time = waiting_time + processes[highest_priority].burst_time-processes[i].arrival_time; completion_time = waiting_time + processes[highest_priority].burst_time; printf("P%d\t|\t%d\t|\t%d\t|%d\n", processes[highest_priority].pid, waiting_time, turnaround_time, completion_time); // 更新等待时间 waiting_time += processes[highest_priority].burst_time; // 更新平均周转时间 average_turnaround_time += turnaround_time; // 更新剩余执行时间 processes[highest_priority].remaining_time = 0; } // 计算平均周转时间 average_turnaround_time /= n; return average_turnaround_time;修改成优先数越大优先级越高的
好的,下面是修改后的代码:
```c
double priority_scheduling(struct Process processes[]) {
int i, j;
int waiting_time = 0, turnaround_time = 0, completion_time = 0;
float average_waiting_time = 0, average_turnaround_time = 0;
printf("\nProcess\t|Waiting Time |Turnaround Time| completion_time\n");
// 遍历每个进程
for(i = 0; i < n; i++) {
// 找到优先级最高的进程
int highest_priority = i;
for(j = i + 1; j < n; j++) {
if (processes[j].arrival_time <= waiting_time && processes[j].priority > processes[highest_priority].priority) {
highest_priority = j;
}
}
// 计算等待时间和周转时间
waiting_time += (waiting_time >= processes[highest_priority].arrival_time) ? 0 : (processes[highest_priority].arrival_time - waiting_time);
turnaround_time = waiting_time + processes[highest_priority].burst_time - processes[highest_priority].arrival_time;
completion_time = waiting_time + processes[highest_priority].burst_time;
printf("P%d\t|\t%d\t|\t%d\t|%d\n", processes[highest_priority].pid, waiting_time, turnaround_time, completion_time);
// 更新等待时间
waiting_time += processes[highest_priority].burst_time;
// 更新平均周转时间
average_turnaround_time += turnaround_time;
// 更新剩余执行时间
processes[highest_priority].remaining_time = 0;
}
// 计算平均周转时间
average_turnaround_time /= n;
return average_turnaround_time;
}
```
在这个修改后的代码中,我们将优先级的比较符号从小于号(<)改为大于号(>),这样就可以让优先数越大的进程优先级越高了。其余的代码逻辑和之前的版本相同。