https://www.zhihu.com/collection/159122620
linux或WSL下环境操作
升级GCC
sudo add-apt-repository ppa:ubuntu-toolchain-r/testsudo apt-get update sudo apt-get install g++-8
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 53 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-8 --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-8 --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-8
- VSCode: 用于editor和debug 程序
- "explorer.autoReveal": false,
- project.env file 创建一个环境变量文件,https://github.com/Microsoft/vscode-cpptools/blob/master/launch.md#trace
- https://blog.csdn.net/dtw11502/article/details/80798167
- vscode替代sourcesight
- 插件安装Native Debug, Cortex-Debug
- mingw32: 用作主要Terminal
- GNU Arm Embedded Toolchain: 提供arm-none-eabi-gcc, arm-none-eabi-as, arm-none-eabi-ld, arm-none-eabi-gdb等tools实现编译和调试ARM程序
- 使用vscode插件,可以实时更新,配置脚本时候可以
- 执行一下C:Users10222446.vscodeextensionsmetalcode-eu.windows-arm-none-eabi-0.1.6in的gccvar.bat,加入path,这个脚本是暂时加入,不是永久的
- 手动将路径加入path, 使得cmake tools helper可以扫描得到C:Users10222446.vscodeextensionsmetalcode-eu.windows-arm-none-eabi-0.1.6in
- https://vector-of-bool.github.io/docs/vscode-cmake-tools/kits.html?highlight=scan%20kit#kit-scan ,它也提供kits.json手动定义工具链,还可以提供toolchain.file
- OpenOCD: 当作GDB server使用
- 使用pyOCD
- ST-LINK driver: ST-LINK在windows下的驱动程序
- JTAG的驱动程序,已经装好了
- STM32 ST-LINK Utility: 烧些程序到STM32 FLASH的工具
- 有提供烧写的工具
- STM32CubeF4: 官方SDK, 提供HAL driver等
基于cmake的裸板驱动程序开发和远程调试
编译使用cmake-tool工具
调试使用vscode 远程调试功能,利用pyocd和gdb
https://github.com/zhengyangliu/VSCode_STM32_Templet
https://blog.csdn.net/zhengyangliu123/article/details/79090601
https://blog.csdn.net/qq_41544116/article/details/89525709
https://blog.csdn.net/zjx923759789/article/details/84844091
打包,加载的命令,使用vscode的task功能
重启升级包使用rf的串口功能
基于cmake的嵌入式linux应用程序开发
https://blog.csdn.net/cazicaquw/article/details/79033089
基于vscode的嵌入式linux应用程序调试
https://www.jianshu.com/u/b1ffe963c188
- 通过gdbserver的方式进行远程调试
- https://blog.csdn.net/t3swing/article/details/80883853
- miDebuggerServerAddress
基于vscode的linux设备驱动程序(内核)开发
https://blog.csdn.net/ningjianwen/article/details/88075042
在编译内核或ko,建立任务
https://github.com/amezin/vscode-linux-kernel
https://sthbrx.github.io/blog/2019/05/07/visual-studio-code-for-linux-kernel-development/
gdb专题
- gdb命令行使用也可以通过vscode的
- 使用natvis使用本机对象的自定义视图
- https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects?view=vs-2017
- 在vscode中使用visualizerFile,定义.natvls文件将被使用
- http://www.mokezhan.com/57817.html
核心转储专题coredump
单例模式再思考
https://blog.csdn.net/qqyb2000/article/details/79649423
最好的单例实现方式,静态内部类的方式
单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。
单例模式的优点:
1.在内存中只有一个对象,节约内存
2.避免频繁的创建和销毁对象,可以提高性能
3.避免对共享资源的多重占用
4.可以全局访问
适用场景:
1.需要频繁实例化然后销毁的对象
2.创建对象时,耗时过多或者耗资源过多,但又经常用到的对象
3.有状态的工具类对象(没状态的直接就是静态函数就好了)
4.频繁访问数据库或文件的对象
5.要求只有一个对象的场景
/*
* 单例模式,确保一个类只有一个实例,而且自动实例化,并向整个系统提供整个实例。
* 三个优点
* 1.jvm虚拟机本身的机制,保证了数据的线程安全
* 2.没有使用关键字,synchronized,虽然这个关键字能保证线程安全,但是他非常的影响性能,
* 因为他只有一个线程能读取里面的数据,另一个线程就不能读取,静态内部类的方式,可以同时读取
* jvm本身的机制保证了线程安全,没有性能缺陷
* 3.SingletonHolder类是私有的,只有getInstance()能对其进行访问
*/
/*
* 第一次加载这个StaticInnerSingleton的时候,他不会初始化instance, 只有他第一次调用 getInstance()
* 这个方法之后,虚拟机才会加载SingletonHolder类, 并初始化instance,这样不仅能保证线程安全,也能保证single类的唯一性。
*/
/**
// 静态内部类
* jvm提供的同步控制 static final static 区块初始化数据,保证数据在内存中是独一份的 final
* 变量初始化完成之后就无法被修改,所以final也是线程安全的
*
* 我们利用的是jvm进行类加载的时候会保证数据同步,所以我们就利用内部类原理,
* 在内部类里创建对象的实例,这样只要我们的应用中不使用这个内部类StaticInnerSingleton,
* 那么jvm虚拟机他就不会去加载这个类,也就不会去创建我们所要创建的单例对象Instance,从而
* 这里静态内部类,就完成了懒汉式的延迟加载,同时又保证了线程安全
*/