vfunc_ex.cpp

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1194442938015&lmt=1194190197&format=336x280_as&output=html&correlator=1194442937843&url=file%3A%2F%2F%2FC%3A%2FDocuments%2520and%2520Settings%2Flhh1%2F%E6%A1%8C%E9%9D%A2%2FCLanguage.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=583001034.1194442938&ga_sid=1194442938&ga_hid=1942779085&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency"> #include <iostream.h>

class convert
{
 protected:
   double val1;
   double val2;
 public:
   convert(double i)
    {
      val1 = i;
    }
    double getconv(void) {return val2;}
    double getinit(void) {return val1;}
    virtual void compute(void) = 0;
 };

// liters to gallons
class l_to_g : public convert {
 public:
   l_to_g(double i) : convert(i) { }
   void compute(void)
    {
      val2 = val1 / 3.7854;
    }
 };

// Fahrenheit to Celsius
class f_to_c : public convert {
 public:
   f_to_c(double i) : convert(i) { }
   void compute(void)
    {
      val2 = (val1 - 32) / 1.8;
    }
 };

void main(void)
 {
   convert *p;                    // pointer to base class

   l_to_g lgob(4);
   f_to_c fcob(70);

   p = &lgob;                    // convert liters to gallons
   cout << p->getinit() << " liters is ";
   p->compute();
   cout << p->getconv() << " gallons." << endl;

   p = &fcob;                    // convert fahrenheit to celsius
   cout << p->getinit() << " in Fahrenheit is ";
   p->compute();
   cout << p->getconv() << " Celsius." << endl;
 }

### 关于 `stm32_ex.h` 的用途及用法 #### 文件概述 `stm32_ex.h` 并不是标准的 STM32Cube HAL 库的一部分,而是某些开发者为了扩展功能而自定义创建的一个头文件。通常情况下,该文件可能被用来封装一些额外的功能或简化特定外设的操作逻辑[^1]。它可能是针对某个具体项目需求设计的工具集,包含了对现有 HAL 或 LL 驱动程序未完全覆盖的部分进行补充。 #### 常见用途 以下是此类文件常见的几种用途: 1. **外设驱动扩展** 如果默认提供的 HAL/LL 不足以满足复杂的应用场景,则可以在 `stm32_ex.h` 中加入新的函数接口来操作硬件资源。例如,对于定时器高级控制模式下的捕获比较寄存器配置等功能,可以通过此方式实现更灵活的支持[^2]。 2. **常用宏定义集合** 将频繁使用的参数设置集中到一起以便统一管理维护。比如波特率计算公式、中断优先级分组设定等都可以写在这个头部文档里供其他源码调用。 3. **兼容性处理代码** 当不同版本之间存在API差异时(如从V1迁移到最新版),通过编写适配层让旧有工程能够继续运行而不需大幅修改原有结构体成员访问路径或者行为习惯改变太多部分即可完成过渡期平稳衔接工作。 4. **优化性能相关算法实现** 对时间敏感型任务采用汇编语言手工编码提高效率;或者是利用DMA传输机制减少CPU负载从而提升整体吞吐量表现等方面均有可能涉及于此种类型的模块开发当中去考虑进去做进一步深入探讨研究下去看看有没有更好的解决方案出来供大家参考学习借鉴一下吧! #### 使用示例 假设我们希望在 `stm32_ex.h` 中增加一个用于初始化 UART 外设的新方法,可以按照如下方式进行定义: ```c #ifndef __STM32_EX_H__ #define __STM32_EX_H__ #include "stm32f4xx_hal.h" // 自定义UART初始化函数原型声明 void MX_UART_Custom_Init(UART_HandleTypeDef *huart); #endif /* __STM32_EX_H__ */ ``` 接着,在对应的 `.c` 文件中提供实际的实现细节: ```c #include "stm32_ex.h" #include "stdio.h" void MX_UART_Custom_Init(UART_HandleTypeDef *huart){ huart->Instance = USART1; huart->Init.BaudRate = 115200; huart->Init.WordLength = UART_WORDLENGTH_8B; huart->Init.StopBits = UART_STOPBITS_1; huart->Init.Parity = UART_PARITY_NONE; huart->Init.Mode = UART_MODE_TX_RX; huart->Init.HwFlowCtl = UART_HWCONTROL_NONE; huart->AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(huart) != HAL_OK){ Error_Handler(); } } ``` 这样做的好处在于使主应用程序更加简洁明了的同时也增强了系统的可读性和易于后期升级调整的可能性。 --- ### 注意事项 由于这不是官方发布的组件之一,因此每次更新固件库之后都需要仔细核对其内部依赖关系以防引入潜在错误风险。另外建议始终保留一份详细的变更记录便于追踪历史变动轨迹以及快速定位问题所在位置范围之内合理范围内尽可能做到最好就可以了呀😊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值