22111班5.4作业

#include <linux/init.h>
#include <linux/module.h>
#include <linux/spi/spi.h>
#include <linux/delay.h>

//0 1 2 3 4 5 6 7 8 9
char table1[10][2]={
    {0x1,0x3f},{0x1,0x06},{0x1,0x5b},{0x1,0x4f},
    {0x1,0x66},{0x1,0x6d},{0x1,0x7d},{0x1,0x07},
    {0x1,0x7f},{0x1,0x6f},
};
char table2[10][2]={
    {0x2,0x3f},{0x2,0x06},{0x2,0x5b},{0x2,0x4f},
    {0x2,0x66},{0x2,0x6d},{0x2,0x7d},{0x2,0x07},
    {0x2,0x7f},{0x2,0x6f},
};

char table3[10][2]={
    {0x4,0x3f},{0x4,0x06},{0x4,0x5b},{0x4,0x4f},
    {0x4,0x66},{0x4,0x6d},{0x4,0x7d},{0x4,0x07},
    {0x4,0x7f},{0x4,0x6f},
};
int i,j;
void my_delay(unsigned int ms)
{
    msleep(ms);
}
int m74hc595_probe(struct spi_device *spi)
{
    for(i=0;i<10;i++)
    {
        for(j=0;j<3000;j++)
        {
        spi_write(spi,table1[i],sizeof(table1[i]));
        spi_write(spi,table2[i],sizeof(table2[i]));
        spi_write(spi,table3[i],sizeof(table3[i]));
        }
    }
    return 0;
}
int m74hc595_remove(struct spi_device *spi)
{
     printk("%s:%d\n",__FILE__,__LINE__);
     return 0;
}

//设备树匹配表
struct of_device_id of_table[]={
    {.compatible="hqyj,m74hc595"},
    {},
};
MODULE_DEVICE_TABLE(of,of_table);
//定义SPI对象并且初始化
struct spi_driver m74hc595 ={ 
    .probe=m74hc595_probe,
    .remove=m74hc595_remove,
    .driver={
        .name="m74hc595",
        .of_match_table=of_table,
    },
};

module_spi_driver(m74hc595); 
MODULE_LICENSE("GPL"); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
伪代码: ``` 1. 初始化所有作业的状态为未完成。 2. 初始化所有缓冲区为空。 3. 初始化AGV的位置为零件仓库。 4. 初始化当前时间为0。 5. 当存在未完成的作业时,执行以下步骤: 5.1. 找到所有可以开始运输的作业,即前置作业已完成的作业。 5.2. 选择一个距离最短的作业,将AGV移动到该作业所在的位置。 5.3. 将该作业从零件仓库或上一个机器的输出缓冲区中取出,并将其运输到当前机器。 5.4. 将AGV停靠在当前机器上,等待该作业加工完成。 5.5. 当该作业加工完成后,将其放入当前机器的一个空闲输出缓冲区中。 5.6. 如果当前机器的所有输出缓冲区都已满,则等待一个缓冲区变为空闲状态。 5.7. 重复步骤5.1-5.6,直到该作业完成。 5.8. 将该作业存入成品仓库,更新该作业的状态为已完成。 6. 输出所有作业的完成时间和总运输时间。 ``` 流程图: ![流水车间问题流程图](https://img-blog.csdnimg.cn/img_convert/c4a9b3465a3da0dcb8c4d5d25c3e6be0.png) Python 代码: ```python import math class Job: def __init__(self, id, pos): self.id = id self.pos = pos self.status = "not started" self.start_time = None self.finish_time = None class Buffer: def __init__(self, size): self.jobs = [None] * size def add_job(self, job): for i in range(len(self.jobs)): if self.jobs[i] is None: self.jobs[i] = job return True return False def remove_job(self): for i in range(len(self.jobs)): if self.jobs[i] is not None: job = self.jobs[i] self.jobs[i] = None return job return None class Workshop: def __init__(self, num_jobs, num_machines, buffer_size): self.jobs = [] for i in range(num_jobs): self.jobs.append(Job(i, 0)) self.machines = [] for i in range(num_machines): self.machines.append(Buffer(buffer_size)) self.transporter_pos = 0 self.current_time = 0 self.total_transport_time = 0 def run(self): while True: # check if all jobs are completed all_jobs_completed = True for job in self.jobs: if job.status != "completed": all_jobs_completed = False break if all_jobs_completed: break # find all jobs that can be started startable_jobs = [] for job in self.jobs: if job.status == "not started": dependencies_completed = True for i in range(job.id): if self.jobs[i].status != "completed": dependencies_completed = False break if dependencies_completed: startable_jobs.append(job) if len(startable_jobs) == 0: continue # select the nearest startable job min_distance = math.inf nearest_job = None for job in startable_jobs: distance = abs(job.pos - self.transporter_pos) if distance < min_distance: min_distance = distance nearest_job = job # transport the job to the next machine self.total_transport_time += min_distance self.transporter_pos = nearest_job.pos nearest_job.status = "transporting" nearest_job.start_time = self.current_time nearest_job.pos += 1 # move the job through the machines for i in range(len(self.machines)): machine = self.machines[i] if machine.add_job(nearest_job): nearest_job.status = "processing" nearest_job.pos = i + 1 break # wait for the job to finish processing while True: job_finished = False for machine in self.machines: job = machine.remove_job() if job is not None: job.status = "completed" job.finish_time = self.current_time job_finished = True break if job_finished: break self.current_time += 1 # move the AGV back to the warehouse self.total_transport_time += nearest_job.pos - 1 self.transporter_pos = 0 def print_results(self): for job in self.jobs: print("Job", job.id, "start time:", job.start_time, "finish time:", job.finish_time) print("Total transport time:", self.total_transport_time) workshop = Workshop(5, 3, 3) workshop.run() workshop.print_results() ``` 这个算法使用了贪心策略:每次选择距离最近且可以开始运输的作业。此外,该算法使用了缓冲区来处理当AGV不可用或下一台机器不可用时,当前机器上加工完的作业可以自动储存到当前加工机器相应的输出缓冲区的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值