我们正在为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) 在"The C++ Programming Language"一书中,Stroustrup说:
"要释放由new分配的空间,删除和删除[]必须能够确定分配的对象的大小.这意味着使用new的标准实现分配的对象将占用比静态对象稍多的空间.通常,一个word用于保存对象的大小.
这意味着分配的每个对象new的大小都位于堆中的某个位置.位置是否已知,是否可以访问它?
所以我可以成功地将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

有什么东西我不见了吗?