int func(uint32 x){
int countx = 0;
while( x )
{
countx ++;
x = x&(x-1);
}
return countx;
……继续阅读 »
gql
4年前 (2021-04-08) 923浏览
使用arm-none-eabi-gcc (Sourcery G++ Lite For AMR)编译STM32的C++程序后的.ld .map文件的理解
以stm32f030rct6为例,在stm32f0_stm32f030xc.ld,有如下一段脚本。
/* Entry Point */
ENTRY(Reset_Handler)
/* Highest ……继续阅读 »
gql
4年前 (2021-04-01) 1142浏览
在Coretext-M3与Coretext-M4核中,在System Control Block中存在一个向量表偏移量寄存器 VTOR(0xE000ED08),系统产生中断后,内核通过这个寄存器的值来找到中断向量表的地址,进而执行中断例程代码,当然,此寄存器的值是可以修改的,它的默认值为0,由于映射关系,实际上就是指向映射地址,比如0x0800 0000。值……继续阅读 »
gql
4年前 (2021-04-01) 1026浏览
运算:+, -, *, /, +=等等
比较:>, = ,<, ≥, ≤, ==, !=等
赋值:=
输入:>>
输出:<<
文章转载于https://blog.csdn.net/weixin_43899069/article/details/104442108
#include
#include
using name……继续阅读 »
gql
4年前 (2021-03-30) 963浏览
想屁吃呢,当然不可以!
但是我们可以通过其他的途径实现,首先我们知道结构体是可以直接赋值操作的(可以去看编译好的汇编代码,其中结构体赋值采用是类似于memcpy这种形式,而不是逐个字段的拷贝。)不管是简单的数据类型如int、float等或者数组、指针、结构体等这些复杂数据类型,只要两个结构体类型相同,就可以实现赋值。但是值得注意的是,结构体在赋值的时候只是简……继续阅读 »
gql
4年前 (2021-03-30) 1126浏览
今天又忘了对类内静态成员变量进行初始化了, ,最主要是发生了一奇怪的错误,这里记录一下。
如下代码
//文件B.h
class B{
int k ;
};
//文件A.h
class B; //前置声明
class A{
public:
static void Init(){
a = 0;
……继续阅读 »
gql
4年前 (2021-03-29) 907浏览
在C++中,全局变量和静态变量的构造函数需要在main函数执行前执行,所以需要__libc_init_array(libc 库内置的函数, 负责一些内存的初始化) 来初始化一些东西。
修改启动文件(gcc)版本
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call……继续阅读 »
gql
4年前 (2021-03-25) 902浏览
有如下一段配置F030的SPI的GPIO的程序,其中PB13为SCK,PB14为MISO,PB15为MOSI。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Medium_Speed;
GPIO_I……继续阅读 »
gql
4年前 (2021-03-24) 914浏览
为了C++构建STM32的工程模板尽可能降低软件的逻辑处理部分与硬件的耦合,可以使业务相关功能脱离硬件运行。所以应该抽象出与硬件相关的操作。由于内容过多,不能一一列举,具体内容请查看源文件。
创建core文件夹–系统常用定义
创建cpu_type文件
该文件对常见的CPU类型进行枚举定义,记录各个系列的芯片ID的起始地址,flash容量地址等信息……继续阅读 »
gql
4年前 (2021-03-02) 956浏览 0评论
为什么采用C++?
现在的主流单片机大多采用ARM内核,而ARM对C++的支持还是非常给力的。而面向对象程序设计优于传统的结构化程序设计,其优越性表现在,它有希望解决软件工程的两个主要的问题——软件复杂性控制和软件生产率的提高。
使用C++构建STM32工程模板的优点
C++构建STM32工程模板将对硬件的依赖独立封装,尽可能降低软件的逻辑处理……继续阅读 »
gql
4年前 (2021-02-24) 965浏览 0评论