摘要: 返回值优化,是一种属于编译器的技术,它通过转换源代码和对象的创建来加快源代码的执行速度。RVO = return value optimization。测试平台:STM32F103VG + Keil 5.15背景:我们有个MacAddress::ToArray 因为封装需要,打算返回字节数组类Byt 阅读全文
posted @ 2017-09-01 22:59 大石头 阅读(2641) 评论(0) 推荐(1) 编辑
摘要: 自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右。习惯了C#开发,C++倒显得难以下手!今天就一个函数返回问题跟辉月兄弟讨论一番,大有所获,足以解决我们目前80%的问题,感觉对C++的掌握上升到了20%。背景,现有字节数组ByteArray和 阅读全文
posted @ 2017-09-01 22:56 大石头 阅读(1818) 评论(15) 推荐(15) 编辑
摘要: 因为需要自动适配芯片进行系统配置,所以我们有必要通过读取一些系统寄存器来获取必要信息。我们的代码需要兼容STM32F1/GD32F1/STM32F0/STM32F4代码如下: 各常见芯片信息如下:STM32F030C8T6 GD32F130C8T6 STM32F051C8T6 GD32F150C8T 阅读全文
posted @ 2017-09-01 14:05 大石头 阅读(2720) 评论(0) 推荐(0) 编辑
摘要: 无数次遭受堆栈溢出折磨,随着系统变得复杂,故障点越来越难以查找!主要溢出情况如下:1,一般RAM最后两块空间是堆Heap和栈Stack,堆从下往上用,栈从上往下用,任意一个用完,都会进入对方的空间2,如果栈用完,进入堆的空间,这个时候系统是不会有任何异常的,也就是说,栈底没有什么意义。除非堆和栈指针 阅读全文
posted @ 2017-09-01 13:55 大石头 阅读(1300) 评论(0) 推荐(1) 编辑
摘要: 先来看看我们SmartIRQ的具体实现 在构造的时候备份,然后根据参数决定打开还是关闭中断。在系统内核时钟里面,关键操作需要关闭中断,最后打开,以免其它中断影响关键操作的原子事务性。于是我们有: 其中irq在离开作用域时被释放,自动调用SmartIRQ的析构函数,还原了中断状态因为调用极其频繁,最高 阅读全文
posted @ 2017-09-01 13:12 大石头 阅读(495) 评论(0) 推荐(0) 编辑
摘要: 在测试MF固件时,发生一个非常诡异的异常,代码如下: 指定第二行代码时,会跳到异常处理程序,发生了6号异常(用法异常Usage Fault)我对ARM还是非常陌生,不知道怎么可能发生这个问题。在今天之前,这行代码执行了无数次也未曾出错,最近也没有修改该函数或者相关函数的代码,昨天倒是大量修改了其它代 阅读全文
posted @ 2017-09-01 13:06 大石头 阅读(700) 评论(0) 推荐(0) 编辑