小编sla*_*ber的帖子

C++常量关键字异常行为

我们正在为STM32F103 MCU开发.我们在ARM GCC工具链中使用裸机C++代码.经过几个小时的可疑表达,我们发现constant关键字触发了该表达式的不同结果.使用x86 GCC工具链测试同一段代码时,问题就不存在了.
我们使用STM的GPIOS进行调试.
这是完全重现问题的代码:

#include "stm32f10x.h"
#include "system_stm32f10x.h"

#include "stdlib.h"
#include "stdio.h"

  const unsigned short RTC_FREQ = 62500;
  unsigned short prescaler_1ms = RTC_FREQ/1000;

int main()
{

//********** Clock Init **********
   RCC->CFGR |= RCC_CFGR_ADCPRE_0 | RCC_CFGR_ADCPRE_1; // ADC prescaler
   RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // Alternate Function I/O clock enable
   RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; // I/O port C clock enable
   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // I/O port A clock enable
   RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // ADC 1 interface clock enable
   RCC->APB1ENR |= …
Run Code Online (Sandbox Code Playgroud)

c++ gcc arm stm32

4
推荐指数
1
解决办法
139
查看次数

获得动态分配的数组大小

在"The C++ Programming Language"一书中,Stroustrup说:

"要释放由new分配的空间,删除删除[]必须能够确定分配的对象的大小.这意味着使用new的标准实现分配的对象将占用比静态对象稍多的空间.通常,一个word用于保存对象的大小.

这意味着分配的每个对象new的大小都位于堆中的某个位置.位置是否已知,是否可以访问它?

c++ memory-management new-operator

3
推荐指数
1
解决办法
2932
查看次数

更改C++程序入口点.STL崩溃了

所以我可以成功地将C++入口点更改为一个类,这有助于我将我的图形系统初始化与主程序代码隔离开来.但是当我从新主程序中调用一些库代码时,整个程序崩溃了.例如:

#include <iostream>
using namespace std;
int ENTRY(){
    cout << "hello from here" << endl;
    system("pause");
}
Run Code Online (Sandbox Code Playgroud)

我用这些链接器选项编译它:-e__Z5ENTRYv -nostartfiles
没有/ cout/line它工作正常,否则崩溃与/ Access Violation/at

在此输入图像描述

有什么东西我不见了吗?

c++ gcc stl entry-point

2
推荐指数
1
解决办法
358
查看次数

标签 统计

c++ ×3

gcc ×2

arm ×1

entry-point ×1

memory-management ×1

new-operator ×1

stl ×1

stm32 ×1