十四周项目2

形状面积计算
本文通过C++实现了一个抽象基类Shape及三个派生类Circle、Rectangle和Triangle,用于计算不同形状的面积,并通过指针数组实现了多种形状面积的统一计算。
#include<iostream>
using namespace std;
#define PI 3.1415926
class Shape{
public:
    virtual double area()=0;
};
class Circle:public Shape{
public:
   Circle(double r):r(r){}
   double area(){
  return PI*r*r;
}
private:
    double r;

};
class Rectangle:public Shape{
public:
    Rectangle(double a,double b):a(a),b(b){}
    double area(){
    return a*b;
    }

private:
    double a,b;

};
class Triangle:public Shape{
public:
    Triangle(double a,double b):a(a),b(b){}
    double area(){
    return 1/2*a*b;
    }

private:
double a,b;
};
int main()
{
    Circle c1(12.6),c2(4.9);//建立Circle类对象c1,c2,参数为圆半径
    Rectangle r1(4.5,8.4),r2(5.0,2.5);//建立Rectangle类对象r1,r2,参数为矩形长、宽
    Triangle t1(4.5,8.4),t2(3.4,2.8); //建立Triangle类对象t1,t2,参数为三角形底边长与高
    Shape *pt[6]= {&c1,&c2,&r1,&r2,&t1,&t2}; //定义基类指针数组pt,使它每一个元素指向一个派生类对象
    double areas=0.0; //areas为总面积
    for(int i=0; i<6; i++)
    {
        areas=areas + pt[i]->area();
    }
    cout<<"totol of all areas="<<areas<<endl;   //输出总面积
    return 0;
}

 运行结果:

 

### 嵌入式系统实习第十四记撰写指南 在撰写嵌入式系统实习第十四记时,应围绕项目进展、技术难点、工具使用、代码实现、团队协作及个人成长等维度展开,突出实践性与技术深度。以下为具体撰写方向与内容建议。 #### 任务与技术进展 第十四通常涉及系统集成测试、模块性能优化或引入新功能模块。例如: - 完成基于STM32的DMA数据传输优化,提升ADC采集效率,降低CPU占用率。 - 实现I2C接口驱动与传感器数据采集,并通过RTOS任务调度实现数据实时处理。 - 集成MQTT协议实现设备与云端的数据通信,完成数据上报与远程控制功能[^1]。 #### 技术问题与解决过程 在开发过程中可能遇到如下典型问题: - 在DMA传输过程中出现数据丢失,通过配置优先级与中断屏蔽位,优化传输稳定性。 - 使用RTOS时发现任务切换频繁导致延迟增加,通过调整任务优先级与调度策略,减少上下文切换开销。 - 调试I2C通信时出现总线死锁,通过添加超时机制与总线恢复函数,避免系统挂起。 #### 新技术或工具应用 随着项目深入,可能引入以下工具或方法提升开发效率: - 使用CMake构建嵌入式项目,实现跨平台编译与模块化管理,替代传统Makefile方式[^1]。 - 引入Tracealyzer对任务调度进行可视化分析,识别任务阻塞与调度延迟问题。 - 使用Wireshark抓包分析MQTT通信流程,验证数据格式与网络交互的正确性。 #### 关键代码片段与实现说明 结合实际功能,插入关键代码并解释实现逻辑: ```c #include "stm32f4xx_hal.h" I2C_HandleTypeDef hi2c1; void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; HAL_I2C_Init(&hi2c1); } void Read_Sensor_Data(uint8_t *data) { HAL_I2C_Master_Transmit(&hi2c1, SENSOR_ADDR << 1, &reg_addr, 1, HAL_MAX_DELAY); HAL_I2C_Master_Receive(&hi2c1, (SENSOR_ADDR << 1) | 0x01, data, 6, HAL_MAX_DELAY); } ``` #### 项目贡献与协作情况 描述在团队中的具体工作与协作成果: - 主导ADC与DMA模块的优化工作,提升数据采集精度与系统响应速度。 - 编写通用I2C驱动模板,供团队成员复用,提高开发效率。 - 参与每日站会与代码评审,提出优化建议并推动问题解决。 #### 收获与反思 总结本学习成果与待改进点: - 本掌握了DMA与I2C通信的底层实现机制,但在初期配置DMA缓冲区时出现溢出问题,后续应加强对硬件手册的阅读与理解。 - 通过使用CMake优化项目结构,提升了工程管理能力,但在多平台编译兼容性方面仍需进一步探索。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值