汽车行驶记录仪C语言编程

合集下载

C语言自动驾驶系统开发

C语言自动驾驶系统开发

C语言自动驾驶系统开发自动驾驶系统是一种集成了车辆控制、感知、决策等技术的先进智能驾驶系统,可以使车辆在一定范围内实现自主导航、避障、控制等功能。

而C语言作为一种强大的编程语言,可以用于开发各种系统,包括自动驾驶系统。

在开发C语言自动驾驶系统时,首先需要考虑的是系统的整体架构。

系统通常包括感知模块、决策模块、控制模块等部分。

感知模块负责获取外部环境信息,包括摄像头、雷达、激光雷达等传感器,将这些信息转化为计算机可识别的数据;决策模块则根据感知模块提供的信息,进行路况分析、行驶规划等决策;控制模块根据决策模块的指令来控制车辆的转向、加速、刹车等动作。

在C语言中,我们可以利用结构体来定义车辆、传感器等模块,利用函数来实现各个模块之间的通信与协调。

例如,可以定义一个结构体表示车辆状态,包括位置、速度、方向等信息;定义一个函数来获取传感器数据并更新车辆状态;定义一个函数来根据车辆状态进行决策;定义一个函数来控制车辆的行驶。

另外,在C语言自动驾驶系统开发过程中,还需要考虑到实时性和稳定性。

由于自动驾驶系统需要时刻监控周围环境并做出相应反应,所以需要确保系统的响应速度快、稳定性高。

可以通过多线程、定时器等方式来提高系统的实时性,通过错误处理、异常处理等方式来提高系统的稳定性。

此外,为了提高系统的性能和可扩展性,可以考虑将C语言自动驾驶系统与深度学习、神经网络等技术相结合。

深度学习可以帮助系统更好地理解周围环境,提高决策的准确性;神经网络可以帮助系统更好地学习行驶规律,提高控制的稳定性。

总的来说,C语言自动驾驶系统开发是一个复杂而又有挑战性的任务,需要综合利用C语言的特点和各种先进技术,不断优化和完善系统,才能实现智能驾驶的目标。

希望开发者们能够充分发挥自己的创造力和技术能力,共同推动自动驾驶技术的发展。

C语言实现的自动驾驶设计

C语言实现的自动驾驶设计

C语言实现的自动驾驶设计自动驾驶技术是近年来备受关注的领域之一。

随着计算机软硬件的不断进步,我们可以利用C语言来实现自动驾驶系统。

本文将探讨C 语言在自动驾驶设计中的应用。

一、引言自动驾驶技术是指利用计算机系统和传感器等设备,使汽车能够在无人驾驶的情况下自主运行和导航。

C语言是一种被广泛应用于嵌入式系统和底层开发的编程语言,因其高效性和可靠性而成为自动驾驶设计中的首选。

二、定位系统自动驾驶系统的核心是准确获取汽车当前位置和周围环境信息。

C语言可以通过调用传感器数据,如GPS和摄像头等设备,实时获取车辆的位置和方向信息,并将其准确地反馈到主控程序中。

三、路径规划与路径跟踪C语言可以实现路径规划和路径跟踪算法,为自动驾驶系统提供指引。

通过传感器和车辆状态信息,我们可以使用C语言开发算法来计算最优路径,使车辆能够合理、稳定地行驶。

四、障碍物检测与避让在实际道路环境中,自动驾驶车辆需要及时检测和避让障碍物。

使用C语言,我们可以根据传感器数据开发障碍物检测算法,并实现避让策略。

这些算法可以通过驱动控制系统,使车辆安全地绕过障碍物。

五、车辆控制自动驾驶车辆的控制是实现自主导航的关键。

C语言可以编写驱动控制系统,通过与车辆的传感器和执行器交互,实现对车辆行驶速度、转向等功能的精确控制。

这种驱动控制系统可以按照路径规划和路径跟踪算法的指引,完美执行自动驾驶任务。

六、安全性与可靠性自动驾驶技术的安全性和可靠性是至关重要的。

C语言作为一种高效且可靠的编程语言,可以帮助开发人员实现对系统的严格控制和测试,确保自动驾驶系统在各种条件下都能够稳定运行。

七、结论通过使用C语言实现的自动驾驶设计,我们可以高效地获取位置和环境信息、进行路径规划和跟踪、检测和避让障碍物,并实现车辆的精确控制。

此外,C语言还帮助保障了系统的安全性和可靠性。

随着技术的进一步发展,C语言将继续在自动驾驶设计中发挥重要作用。

八、参考文献[1] John C., "C Programming for Autonomous Vehicles", Proceedingsof the International Conference on Autonomous Vehicles, 2019.[2] Smith L., "Implementation of Autonomous Driving Systems usingC Language", Journal of Embedded Systems, 2020.[3] Zhang M., "C Language-based Control Algorithms for Autonomous Driving", IEEE Transactions on Intelligent Transportation Systems, 2021.以上就是关于C语言实现的自动驾驶设计的文章内容。

智能小车寻迹入库程序+C

智能小车寻迹入库程序+C
等等一些教育学习办公写作商业经营实用性极强的文档您若觉得对您日常学习商业经营社交沟通办公写作有所帮助的话就关注我吧
“旋风”入库的程序,在安装路面传感器安装于距离地面1CM的位 置。对于不同的地面环境可以适当修改程序中电机的速度*/ #include <reg51f.h> #include <math.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define _Nop() _nop_(),_nop_(),_nop_(),_nop_() /*定义空指令*/ sbit LeftW_F = P1^7; /*控制左轮前进,低有效*/ sbit LeftW_B = P1^6; /*控制左轮后退,低有效*/ sbit RightW_F= P1^5; /*控制右轮前进,低有效*/ sbit RightW_B= P1^4; /*控制右轮后退,低有效*/ sbit ir_send_forword_left = P1^3; /*前端左边红外发射二极管控制信号,低电平发射*/ sbit ir_send_forword_right = P1^2; /*前端右边红外发射二极管控制信号,低电平发射*/ sbit ir_receive_forword = P2^4; /*前端红外信号接收端,低电平则有红外信号反射*/ sbit road_left= P3^2; /*左边路面状态*/ sbit road_right= P3^3; /*右边路面状态*/ sbit smg1 = P3^4; /*LED1 位选信号*/ sbit smg2= P3^5; /*LED2 位选信号*/ uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e}; uint count=0; uchar idata ir_data_0=0x00; /*当前路面传感器状态存储单元*/ uchar idata ir_data_1=0x00; /*上一次路面传感器状态存储单元*/ /*标准的 160uS 延时时间*/ delay160us() { uint i,j; for(i=0;i<6;i++) {for(j=0;j<5;j++) /*160us*/ {;} } } /*标准的 80mS 延时时间*/ delay() { uint i,j; for(i=0;i<200;i++) {for(j=0;j<100;j++) {;} } } /*---------------------------------------------------------------------------------return value means the barrier's location.return value: 0,0,0,0,R,L,FR,FL. 1:has barrier;0: no

循迹小车程序 C语言

循迹小车程序  C语言

#define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走
#define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机向后转
#define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边两个电机停转
bit Right_moto_stop=1;
bit Left_moto_stop =1;
/************************************************************************/
//延时函数
void delay(unsigned int k)
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=1; 时右上电机反转
P1_4 P1_5 接IN5 IN6 当 P1_4=0,P1_5=0; 时右上电机停转
P1_6 P1_7 接IN7 IN8 当 P1_6=1,P1_7=0; 时右下电机正转 右下电机接驱动板子输出端(蓝色端子OUT7 OUT8)
P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=1; 时左下电机反转
P1_2 P1_3 接IN3 IN4 当 P1_2=0,P1_3=0; 时左下电机停转
P1_4 P1_5 接IN5 IN6 当 P1_4=1,P1_5=0; 时右上电机正转 右上电机接驱动板子输出端(蓝色端子OUT5 OUT6)
P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=1; 时左上电机反转
P1_0 P1_1 接IN1 IN2 当 P1_0=0,P1_1=0; 时左上电机停转

智能小车C语言程序

智能小车C语言程序

智能小车C语言程序智能小车黑线循迹C语言程序#include#include#define uchar unsigned char#define uint unsigned intsbit LeftIR=P1^6; //左边红外接收sbit RightIR=P1^7; //右边红外接收sbit ENA=P1^2; // L298的Enable Asbit IN1=P1^0; // L298的Input 1sbit IN2=P1^1; // L298的Input 2sbit ENB=P1^5; // L298的Enable Bsbit IN3=P1^3; // L298的Input 3sbit IN4=P1^4; // L298的Input 4uchar t=0; //中断计数器uchar motor_1=0,motor_2=0; //电机1,2速度值uchar tmp1,tmp2; // 电机当前速度值uchar aa; //定时器1中断计数bit flag=0; //标志位void motor(uchar index, char speed){if(speed>=-100 && speed<=100){if(index==1) // 电机1的处理{motor_1=abs(speed); // 取速度的绝对值if(speed<0) // 速度值为负则反转{IN1=0;IN2=1;}else // 不为负数则正转{IN1=1;IN2=0;}}if(index==2) // 电机1的处理{motor_2=abs(speed); // 取速度的绝对值if(speed<0) // 速度值为负则反转{IN3=0;IN4=1;}else // 不为负数则正转{IN3=1;IN4=0;}}}}void init(){TMOD=0x12; // 设定T0的工作模式为2TH0=0x9B; // 装入定时器的初值TL0=0x9B;TH1=(65536-50000)/256; //设置初值定时50msTL1=(65536-50000)%6;EA=1; // 开中断ET0=1; // 定时器0允许中断ET1=1; //定时器1允许中断TR0=0; // 关闭定时器0TR1=0; // 关闭定时器0ENA=0; //关闭电机1ENB=0; //关闭电机2}void main(){int irDetectLeft,irDetectRight;init();while(1)// 电机实际控制演示{irDetectRight = RightIR;//右边接收irDetectLeft = LeftIR;//左边接收if((irDetectLeft==0)&&(irDetectRight==0))//向前进{motor(1,100);motor(2,100);}if((irDetectLeft==0)&&(irDetectRight==1))//右转{motor(1,-100);motor(2,100);}if((irDetectLeft==1)&&(irDetectRight==0))//左转{motor(1,100);motor(2,-100);}if((irDetectLeft==1)&&(irDetectRight==1)&&(flag==0)) //第一次探测定时器1开始计时{motor(1,100);motor(2,100);TR1=1;}if((irDetectLeft==1)&&(irDetectRight==1)&&(flag==1))//第二次探测时小车停{TR0=0;ENA=0;ENB=0;}}}void timer0() interrupt 1 // T0中断服务程序{if(t==0) // 1个PWM周期完成后才会接受新数值{tmp1=motor_1;tmp2=motor_2;}if(t ENA=1;elseENA=0; // 产生电机1的PWM信号if(t ENB=1;elseENB=0; // 产生电机2的PWM信号t++;if(t>=100)t=0; // 1个PWM信号由100次中断产生}void timer1() interrupt 3{TH1=(65536-50000)/256;TL1=(65536-50000)%6;aa++;if(aa==40) //定时2s后小车开始运动TR0=1;if(aa==60) //定时3s后置标志位{aa=0;flag=1;}}。

使用C语言开发的车载导航系统设计与实现

使用C语言开发的车载导航系统设计与实现

使用C语言开发的车载导航系统设计与实现随着科技的不断发展,车载导航系统已经成为现代汽车中不可或缺的一部分。

它可以帮助驾驶员规划最佳路线、提供实时交通信息、指引到达目的地等功能,极大地提升了驾驶的便利性和安全性。

在本文中,我们将探讨如何使用C语言开发车载导航系统,并介绍其设计与实现过程。

1. 车载导航系统概述车载导航系统是一种集成了地图数据、定位技术和路线规划算法的智能设备,通过GPS等定位技术获取车辆当前位置,并根据用户输入的目的地信息规划最佳行驶路线。

在设计车载导航系统时,需要考虑以下几个关键点:地图数据:包括道路信息、POI(Point of Interest)信息等。

定位技术:如GPS、北斗导航系统等。

路线规划算法:根据起点、终点和实时交通信息计算最佳行驶路线。

2. 使用C语言开发车载导航系统的优势C语言作为一种高效、灵活的编程语言,在嵌入式系统和底层开发中被广泛应用。

使用C语言开发车载导航系统具有以下优势:高效性:C语言编译生成的机器码执行效率高,适合对性能要求较高的应用。

灵活性:C语言可以直接操作内存和硬件,方便与底层硬件进行交互。

可移植性:C语言代码具有较好的可移植性,可以在不同平台上进行移植和扩展。

3. 车载导航系统设计与实现3.1 地图数据处理在车载导航系统中,地图数据是至关重要的。

我们可以使用C语言读取地图数据文件,并将其存储在内存中以便后续快速访问。

地图数据通常包括道路信息、POI信息等,我们可以设计相应的数据结构来存储这些信息,并提供查询接口供路线规划算法使用。

3.2 定位模块设计定位模块是车载导航系统中的核心组成部分之一。

通过GPS等定位技术,我们可以获取车辆当前位置的经纬度信息,并将其与地图数据进行匹配,从而确定车辆所处位置。

在C语言中,我们可以调用相应的库函数来实现GPS数据的解析和处理。

3.3 路线规划算法实现路线规划算法是车载导航系统中最复杂的部分之一。

常用的路线规划算法包括Dijkstra算法、A*算法等。

履带式智能小车循迹及运行状态显示C程序

{
percent_br=4;
percent_bl=4;
percent_r =0;
percent_l =0;
}
void stop( void )
{
percent_r = 0; //右轮零速度。
percent_l = 0; //左轮零速度。
小车运行部分程序
***************************************************************************/
void timer_init( void )
{
TMOD = 0x02; //定时器0工作在方式2,定时值自动重载,启动仅受TR0的控制。
else
PWM_BL=0;
if(temp<percent_br)
PWM_BR=1;
else
PWM_BR=0;
#include< reg52.h >
#define uchar unsigned char
#define uint unsigned int
#define SHELVES 20 //速度总档数。
sbit PWM_R = P1^0; //右电机PWM输入口
temp ++; //实现计数
}
else //一个PWM周期结束,计数清零。
{
temp = 0;
run_time++;
percent_br= 0;
percent_bl= 0;
}
void timer_zero( void ) interrupt 1
{

车辆信息管理系统c语言

车辆信息管理系统c语言1.引言1.1 概述车辆信息管理系统是一个用于记录和管理车辆相关信息的系统。

随着汽车使用量的不断增长,车辆信息的管理变得越来越重要。

这个系统可以帮助车辆所有者或管理者更轻松地管理他们的车辆信息,提高管理效率。

本文将重点介绍车辆信息管理系统中使用C语言的应用。

C语言是一种通用的编程语言,被广泛应用于软件开发和系统编程中。

它的简洁和高效特性使得它成为开发车辆信息管理系统的理想选择。

在本文中,我们将首先介绍车辆信息管理系统的基本概念和功能。

然后,我们将详细探讨C语言在该系统中的应用。

我们将介绍C语言的特性如何帮助我们构建一个高效、可靠且易于维护的车辆信息管理系统。

通过本文的阅读,读者将对车辆信息管理系统以及C语言在该系统中的应用有一个全面的了解。

这将有助于读者掌握使用C语言开发车辆信息管理系统的技能,并且能够在实际应用中灵活运用这些技术。

最后,我们将对车辆信息管理系统的未来发展进行展望,探讨可能的改进和扩展方向。

本文的目的是帮助读者深入了解车辆信息管理系统及其在实际应用中的重要性和优势。

通过学习本文,读者将能够更好地理解和应用C语言开发车辆信息管理系统的技术,并且为该系统的未来发展提供参考和建议。

1.2 文章结构文章结构部分的内容是对整篇文章的组织和安排进行介绍。

在本篇文章中,文章结构部分可以包括以下内容:文章将按照以下结构展开:第一部分是引言部分,其中包括概述、文章结构和目的。

在概述中,将简要介绍车辆信息管理系统的背景和重要性。

然后,在文章结构部分,将说明文章的整体结构,包括各个章节的内容和顺序。

最后,在目的部分,将明确本文的撰写目的和意义。

第二部分是正文部分,其中包括车辆信息管理系统介绍和C语言在车辆信息管理系统中的应用。

在车辆信息管理系统介绍部分,将详细介绍车辆信息管理系统的定义、功能和特点。

然后,在C语言在车辆信息管理系统中的应用部分,将探讨C语言在开发和实现车辆信息管理系统过程中的具体应用和优势。

智能循迹小车C程序(完美-详尽)

/* ------------------------------------------------- 小车运行主程序 -------------------------简介:@模块组成:红外对管检测模块 ------ 五组对管,五个信号采集端口直流电机驱动模块---- 驱动两个直流电机,另一个轮子用万向轮单片机最小系统------ 用于烧写程序,控制智能小车运动@ 功能简介:在白色地面或皮质上用黑色胶带粘贴出路线路径宽度微大于相邻检测管间距。

这样小车便可在其上循迹运行。

@ 补充说明:该程序采取“右优先”的原则:即右边有黑线向右转,若无,前方有黑线,向前走,若无,左边有黑线,向左转,若全无,从右方向后转。

程序开头定义的变量的取值是根据我的小车所调试选择好的,如果采用本程序,请自行调试适合自己小车的合适参数值。

编者:陈尧,黄永刚(江苏大学电气学院二年级,三年级)1. 假定:IN仁1,IN3=1 时电机正向转动,必须保证本条件2. 假定: 遇到白线输出0,遇到黑线输出1;如果实际电路是:遇到白线输出1,遇到黑线输出0,这种情况下只需要将第四,第五句改成:#define m0 1#define m1 0即可。

3. 说明1:直行 --------- 速度full_speed_left,full_speed_right.转弯, 调头速度 -- correct_speed_left,correct_speed_right.微小校正时 ------- 高速轮full_speed_left,full_speed_right;低速轮correct_speed.可以通过调节第六,七,八,九,十条程序,改变各个状态下的占空比( Duty cycle ) , 以求达到合适的转弯,直行速度4.lenth ---- length 检测到黑线到启动转动的时间间隔5. width ---- mid3 在黑线上到脱离黑线的时间差6. mid3 ----- 作为判断中心位置是否进入黑线的标志,由于运行的粗糙性和惯性,常取其他对管的输出信号作为判断条件7. check_right 若先检测到左边黑线,并且左边已出黑线,判断右端是否压黑线时间拖延------------------------------------ */ #include<STC12C5A60S2.h> #define uchar unsigned char #define uint unsigned int #define m0 1〃 黑线 ml,白线 m0 #define m1 0 #define full_speed_left 40 // 方 便 调 节 各 个 状 态 的 占 空 比 , 可 用 参 数 组:(30,35,6,25,30,68000,27000,500 );#define full_speed_right 45 //(40,45,6,25,30,68000,27000,500 ); #define correct_speed 6 // 校正时的低速轮的占空比 #define turn_speed_left 25 #define turn_speed_right 30 #define lenth 68000 // 测试数据:10000-- 》100-- 》500-- 》2000--80000--76000--68000 #define width 27000 //500-- 》10-->2000-- 》60000--30000--- 》27000 #define check_right 500 //2000-- #define midl left1 #define midr right5 》 20-- 》 200-- 》500uchar Duty_left,Duty_right,i=0,j=0; // 左右占空比标志,取 1--100sbit IN 仁 P2A 0; sbit IN2=P2A1; sbit IN3=P2A2; sbit IN4=P2A3; sbit ENA=P1A0; sbit ENB=P1A1; // 循迹口 五组红外对管,依次对应从左往右第 1,2,3,4,5 五组 sbit left1 =P1A6; sbit left2 =P1A5; sbit mid3 =P1A4; sbit right4=P1A3; sbit right5=P1A2; void line_left(); void line_right(); void line_straight()reentrant ; // ------------------------ void delay(long int Delay_time)// 延时函数{uint t=Delay_time;while(t--);}// -------------------------void init() // 定时器初始化{left1=m0; // 初始化left2=m0; // 白线位置mid3 =m1; // 黑线位置right4=m0;right5=m0;TMOD|=0x01;TH0=(65536-66)/256;TL0=(65536-66)%256;EA=1;ET0=1;TR0=1;ENA=1; // 使能端口,初始化ENB=1;}// ----------------------------void time0(void)interrupt 1 // 中断程序{i++; // 调速在中断中执行j++;if(i<=Duty_left)ENA=1;else ENA=0;if(i>100){ENA=1;i=0;}if(j<=Duty_right)ENB=1;else ENB=0;if(j>100){ENB=1;j=0;}TH0=(65536-66)/256; // 取约150HZ,12M 晶振,每次定时66us, 分100 次,这样开头定义的变量正好直接表示占空比的数值TL0=(65536-66)%256;}// ------------------------------void correct_left()// 向左校正,赋值{Duty_left =correct_speed;Duty_right=full_speed_right;IN1=1;IN2=0;IN3=1;IN4=0;}// ------------------------------void correct_right()// 向右校正,赋值{Duty_left =full_speed_left;Duty_right=correct_speed;IN1=1;IN2=0;IN3=1;IN4=0;}// --------------------------------void turn_left()// 左转,赋值{Duty_left =turn_speed_left; Duty_right=turn_speed_right; IN1=0; // 转弯时一个正转,一个反转,IN2=1;IN3=1;IN4=0;}// --------------------------------void turn_right()// 右转,赋值{Duty_left =turn_speed_left; Duty_right=turn_speed_right; IN1=1; // 转弯时一个正转,一个反转,IN2=0;IN3=0;IN4=1;}// ------------------------------void straight() // 直走,赋值{Duty_left =full_speed_left; Duty_right=full_speed_right; 这组值需要单独写程序取值IN1=1;IN2=0; // 左右电机占空比初始化,调节直线运动速度// 鉴于左右轮电机内部阻力不同,故占空比取不同值,IN3=1;IN4=0;}// ----------------------------------void line_straight()reentrant // 函数名后加reentrant 可以递归调用,// 一直走黑直线时{straight();if(right5==m1){line_right();}elseif(left1==m1){line_left();}elseif(left2==m1) // 防止校正时,小车冲出过大,导致2,4 号检测管屏蔽了两端检测管的检测,避免其走直线时出轨while(left2==m1){correct_left();if(right5==m1){line_right();goto label3;}else if(left1==m1){line_left();goto label3;}}elseif(right4==m1) // 防止校正时,小车冲出过大,导致2,4 号检测管屏蔽了两端检测管的检测,避免其走直线时出轨while(right4==m1){correct_right();if(right5==m1){ line_right(); goto label3;}else if(left1==m1){line_left();goto label3;}}else if((left1==m0)&&(left2==m0)&&(mid3==m0)&&(right4==m0)&&(right5==m0)){straight();//delay(lenth);while(right4==m0) // 本来应该是用mid3, 但是为了提高灵敏度,选择right4 ;向左时,可取left2 对管{turn_right();} if(mid3==m1){line_straight();}}label3: ; // 什么都不做}// -----------------------------------------------void line_right() // 右边有黑线时{straight();// 这里的直走是在不管红外检测结果的直行delay(lenth);if(mid3==m1){turn_right();// 执行向右转的赋值label:delay(width); // 由width 值决定转弯时mid3 经过黑线宽度时所需要的时间if(mid3==m0) while(right4==m0){}elsegoto label;}else if(mid3==m0){turn_right();while(right4==m0){}if(midr==m1){line_straight();}}}// -----------------------------------------void line_left() // 左边出现黑线时{while(left1==m1){if(right5==m1){line_right();goto label2;}}。

汽车专用软件的C 语言编程指南

汽车专用软件的C 语言编程指南Guidelines for the Use of the C Language in Vehicle Based Software嵌入式软件国际标准研究中国单片机公共实验室2007 年5 月2007 中国嵌入式计算平台论坛研究报告C 语言是开发嵌入式应用的主要工具,然而C 语言并非是专门为嵌入式系统设计,相当多的嵌入式系统较一般计算机系统而言对软件安全性(可靠性)有更苛刻的要求,所以因此会带来更多的安全隐患。

丰田汽车已经表示要对2005 年10、2003 年8 月至2004 年11 月生产的约16 万辆混合动力汽车“普锐斯”进行无偿修理。

据称,主要是发动机的ECU 程序出了问题,行驶中发动机会突然停止。

此外宝马公司2003 年7 月也因发动机ECU 的软件问题而提出召回缺陷汽车。

1999 年7 月22 日,通用汽车公司(General Motors)也因为其软件设计上的一个问题,被迫召回350 万辆已经出厂的汽车。

同样,在电梯和医疗器械产品上也出现过类似的严重问题。

由此可以看出软件质量问题已经越来越深刻的影响到了产品的质量,甚至有些时候是致命的,在航空航天等领域更是如此。

然而,很少有程序员知道什么样的程序是安全的程序。

很多程序只是表面上可以干活,还存在着大量的隐患。

当然,这其中也有C 语言自身的原因。

因为C 语言是一门‘入门容易,得道难’的语言,其灵活的编程方式和语法规则对于一个新手来说很可能会成为机关重重的陷阱。

同时,C 语言的定义还并不完全,即使是国际通用的C 语言标准,也还存在着很多未完全定义的地方。

要求所有的嵌入式程序员都成为C 语言专家,避开所有可能带来危险的编程方式,是不现实的。

最好的方法是有一个针对安全性的C 语言编程规范,告诉程序员该如何做。

MISRA C 因此应运而生。

1994 年,在英国成立了一个叫做汽车工业软件可靠性联合会(The MotorIndustry Software Reliability Association,简称MISRA)的组织。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汽车黑匣子项目说明1.汽车黑匣子简介汽车黑匣子〃又称汽车工作信息记录仪〃汽车安全信息记录仪〃也有人将其形象地称为汽车电子警察。

它能够完整、准确地记录汽车行驶状态下的有关情况〃并通过专用软件在电脑上再现。

本项目只是实现的是它的软件部分。

2.项目要求1.记录汽车运行时的日期〃时间和速度;2.经可能的多存一些信息:使用位段;3.每满10次(可根据用户要求更改)记录向文件中存一次;4.文件大小只有1.2K(可根据用户要求更改);3.分析建模本次项目主要的关键点有不断的采集数据直到汽车停止〃将采集到了数据存入到一个大小固定的文件中(此文件大小可以根据用户要求改变)〃将文件里的数据读出查看汽车行驶时采集到的数据。

3.1采集数据集存储通过调用time 和localtime函数来采集日期和时间〃(由于目前没有采集速度的设备所以速度采用手动从键盘输入);程序如下;void input(PPER new){int n=0;printf("请输入卡车行驶的速度\n");scanf("%d",&n);time_t timep;struct tm *p;time(&timep);p=localtime(&timep);new->year=(1900+p->tm_year);new->mouth=(1+p->tm_mon);new->day=p->tm_mday;new->hour=p->tm_hour;new->fen=p->tm_min;new->second=p->tm_sec;new->speed=n;new->next=NULL;}由于每条数据有比较多的信息所以我们定义一个结构体来存储采集到的每条数据〃数据采用位段存储省空间;程序如下:typedef struct car{unsigned int year:12;unsigned int mouth:4;unsigned int day:5;unsigned int hour:5;unsigned int fen:6;unsigned int second:6;unsigned int speed:9;struct car * next;}PER,*PPER;由于存储的数据条数比较多且条数不固定所以采用链表将这些结构体链接起来〃来的数据往链表末尾一挂程序如下:PPER addlink(PPER head){int i=0;PPER ps=head;while(1){PPER new=calloc(1,sizeof(PER));input(new);if(NULL==head){head=new;ps=head;i++;}else{head->next=new;if(0==new->speed)return ps;head=head->next;i++;}if(i>=N)return ps;}}3.2将数据存入文件中每一次存储数据在文件的位置都要从上一次结束的位置开始〃我们定义一个变量n来记录每次文件存储结束的位置〃并存入文件的开头〃第二次要存储数据的时候先读取n的数据就知道上一次存在哪里〃然后接着往后面存;文件的大小我们宏定义一个FILEMAX来控制每一次剩余文件的大小不能存储一条数据时将文件跳到n后面开始存储程序如下:void inputfile(PPER head){int n=sizeof(int);FILE *fp=fopen("xiangmu.txt","r+");if(NULL==fp){fp=fopen("xiangmu.txt","w");fwrite(&n,sizeof(int),1,fp);}else{fread(&n,sizeof(int),1,fp);fseek(fp,n,SEEK_SET);}while(1){if(NULL==head)break;if((FILEMAX-ftell(fp))>sizeof(PER)){fwrite(head,sizeof(PER),1,fp);head=head->next;}elsefseek(fp,sizeof(int),SEEK_SET);}n=ftell(fp);rewind(fp);fwrite(&n,sizeof(int),1,fp);fclose(fp);}3.3显示文件由于文件是以二进制代码方式存储〃人类无法直接查看所以要先将文件的内容调入PC机内存中显示在显示器上才好查看〃文件到内存放在链表中存储程序如下:PPER outputfile(PPER head){FILE *fp=fopen("xiangmu.txt","r");if(NULL==fp){printf("文件打开失败\n");return NULL;}fseek(fp,sizeof(int),SEEK_SET);while(1){PPER new=calloc(1,sizeof(PER));fread(new,sizeof(PER),1,fp);new->next=NULL;if(0!=feof(fp))break;head=addlink1(head,new);}fclose(fp);return head;}PPER output(PPER head){PPER ps=head;if(NULL==head)return head;while(1){show(ps);ps=ps->next;if(NULL==ps)return head;}}4.画流程图由于时间有限在此就不画电子版的流程图;5.编写程序程序附带在同一个文件夹里〃再此就不做编写6.显示程序运行结果主菜单页请输入功能号0--退出1--将采集来的数据输入链表中2--显示链表3--将链表里的数据存入文件中4--释放链表5--把文件里面的数据导入链表中6--求最大速度7—求平均速度显示文件记录的所有数据时间2015年8月5日9时36分48秒speed 93km/h时间2015年8月5日9时36分49秒speed 94km/h时间2015年8月5日9时36分50秒speed 95km/h时间2015年8月5日9时36分50秒speed 96km/h时间2015年8月5日9时36分52秒speed 97km/h时间2015年8月5日9时36分53秒speed 98km/h时间2015年8月5日9时36分54秒speed 99km/h时间2015年8月5日9时36分56秒speed 100km/h时间2015年8月5日9时37分1秒speed 101km/h时间2015年8月5日9时37分22秒speed 102km/h时间2015年8月5日9时37分24秒speed 103km/h时间2015年8月5日9时37分25秒speed 104km/h时间2015年8月5日9时37分27秒speed 105km/h时间2015年8月5日9时37分28秒speed 106km/h时间2015年8月5日9时37分29秒speed 107km/h时间2015年8月5日9时37分31秒speed 108km/h时间2015年8月5日9时37分33秒speed 109km/h时间2015年8月5日9时37分36秒speed 110km/h时间2015年8月5日9时37分38秒speed 111km/h时间2015年8月5日9时32分15秒speed 12km/h时间2015年8月5日9时32分17秒speed 13km/h时间2015年8月5日9时32分18秒speed 14km/h时间2015年8月5日9时32分19秒speed 15km/h时间2015年8月5日9时32分20秒speed 16km/h时间2015年8月5日9时32分21秒speed 17km/h时间2015年8月5日9时32分22秒speed 18km/h时间2015年8月5日9时32分23秒speed 19km/h时间2015年8月5日9时32分25秒speed 20km/h时间2015年8月5日9时32分27秒speed 21km/h时间2015年8月5日9时32分57秒speed 22km/h时间2015年8月5日9时32分58秒speed 23km/h时间2015年8月5日9时32分59秒speed 24km/h时间2015年8月5日9时33分0秒speed 25km/h时间2015年8月5日9时33分1秒speed 26km/h时间2015年8月5日9时33分2秒speed 27km/h时间2015年8月5日9时33分3秒speed 28km/h时间2015年8月5日9时33分4秒speed 29km/h时间2015年8月5日9时33分6秒speed 30km/h时间2015年8月5日9时33分7秒speed 31km/h时间2015年8月5日9时33分26秒speed 32km/h时间2015年8月5日9时33分28秒speed 33km/h时间2015年8月5日9时33分29秒speed 34km/h时间2015年8月5日9时33分30秒speed 35km/h时间2015年8月5日9时33分31秒speed 36km/h时间2015年8月5日9时33分32秒speed 37km/h时间2015年8月5日9时33分34秒speed 38km/h时间2015年8月5日9时33分35秒speed 39km/h时间2015年8月5日9时33分37秒speed 40km/h时间2015年8月5日9时33分39秒speed 41km/h时间2015年8月5日9时34分2秒speed 42km/h时间2015年8月5日9时34分3秒speed 43km/h时间2015年8月5日9时34分4秒speed 44km/h时间2015年8月5日9时34分6秒speed 45km/h时间2015年8月5日9时34分7秒speed 46km/h时间2015年8月5日9时34分8秒speed 47km/h时间2015年8月5日9时34分9秒speed 48km/h时间2015年8月5日9时34分10秒speed 49km/h时间2015年8月5日9时34分12秒speed 50km/h时间2015年8月5日9时34分13秒speed 51km/h时间2015年8月5日9时34分47秒speed 52km/h时间2015年8月5日9时34分48秒speed 53km/h时间2015年8月5日9时34分50秒speed 54km/h时间2015年8月5日9时34分51秒speed 55km/h时间2015年8月5日9时34分52秒speed 56km/h时间2015年8月5日9时34分53秒speed 57km/h时间2015年8月5日9时34分54秒speed 58km/h时间2015年8月5日9时34分56秒speed 59km/h时间2015年8月5日9时34分57秒speed 60km/h时间2015年8月5日9时34分58秒speed 61km/h时间2015年8月5日9时35分14秒speed 62km/h时间2015年8月5日9时35分15秒speed 63km/h时间2015年8月5日9时35分16秒speed 64km/h时间2015年8月5日9时35分17秒speed 65km/h时间2015年8月5日9时35分18秒speed 66km/h时间2015年8月5日9时35分19秒speed 67km/h时间2015年8月5日9时35分20秒speed 68km/h时间2015年8月5日9时35分21秒speed 69km/h时间2015年8月5日9时35分23秒speed 70km/h时间2015年8月5日9时35分24秒speed 71km/h时间2015年8月5日9时35分38秒speed 72km/h时间2015年8月5日9时35分40秒speed 73km/h时间2015年8月5日9时35分41秒speed 74km/h时间2015年8月5日9时35分42秒speed 75km/h时间2015年8月5日9时35分43秒speed 76km/h时间2015年8月5日9时35分45秒speed 77km/h时间2015年8月5日9时35分46秒speed 78km/h时间2015年8月5日9时35分47秒speed 79km/h时间2015年8月5日9时35分48秒speed 80km/h时间2015年8月5日9时35分49秒speed 81km/h时间2015年8月5日9时36分14秒speed 82km/h时间2015年8月5日9时36分15秒speed 83km/h时间2015年8月5日9时36分16秒speed 84km/h时间2015年8月5日9时36分18秒speed 85km/h时间2015年8月5日9时36分19秒speed 86km/h时间2015年8月5日9时36分20秒speed 87km/h时间2015年8月5日9时36分21秒speed 88km/h时间2015年8月5日9时36分22秒speed 89km/h时间2015年8月5日9时36分23秒speed 90km/h时间2015年8月5日9时36分24秒speed 91km/h时间2015年8月5日9时36分47秒speed 92km/h显示文件记录所有数据的最高速度和平均速度记录中速度最快为111km/h 时间为2015年8月5日9时37分38秒sum=6150.00 文件的记录有100条average=61.50km/h7.总结通过本次项目锻炼了自我解决问题的能力〃加强了所学各个知识点的衔接〃为以后的工作打下了坚实的基础。

相关文档
最新文档