根据你提供的信息,推测你使用的应该是Tiny C Complier编译器,这是一个32位的编译器,那么int应该为32位,4个字节。
先看看数组的大小,int a[664579],那么大小为664579×4=2658316,也就是2.5M
C语言的局部变量在在栈上分配空间,TCC默认的栈大小为1M,显然会造成栈溢出,程序崩溃。
最新版的TCC提供了自定义栈大小的参数,如下面:
tcc -Wl,--stack=4194309
将栈大小指定为4M。
不知道你的TCC版本是否支持这个参数。
而全局变量在堆上分配空间,Win32应用程序可访问的地址空间是4G,一般来说进程实际能使用的是远远达不到这个值,但是在放一个2.5M的数组还是绰绰有余的。所以作为全局变量程序可正常运行。
所以程序中要使用大型数组,要么定义为全局变量,要么使用malloc一类的函数在堆上动态分配空间。
STM32中unsigned short和unsigned int区别为:数据类型不同、占用空间不同、表示范围不同。
一、数据类型不同
1、unsigned short:unsigned short的数据类型为无符号短整数类型。
2、unsigned int:unsigned int的数据类型为无符号整数类型。
二、占用空间不同
1、unsigned short:unsigned short的内存占用空间为两个字节,16位。
2、unsigned int:unsigned int的内存占用空间为为四个字节,32位。
三、表示范围不同
1、unsigned short:unsigned short的数值表示范围为0~65535[0 , 2^15 -1] 。
2、unsigned int:unsigned int的数值表示范围为0~2 147 483 647[0 , 2^31 -1] 。
学C语言得当时候老师应该有说过,int在不同的编译器所占的字节是不同的,比如TC int就是2字节,VC就是4字节。STM32是32位机,int占4字节。
typedef signed __int64 int64_t; 从字面上就能理解意思,long int。 __int64是宏或者typedef定义过的符号
stm32oled改变字体大小
1
首先打开取模软件pctolcd2002,选好字体并做相应设置,笔者想显示32 x 32 的字体,于是设置汉字点阵宽高都为32,字宽和字高也是32,
2.
设置输出,接着输入要显示字体,并点击生成字模,字体就可以变成大小
本文标签:stm32关键字占大小