1.编译器优化的问题
定义的局部变量如果后续没有用,会被编译器优化掉,如:
{
u32 va = 100;
va = 200;
//些处放断点 ,查看一下va的值,会发现根本不对。
}
如何避免优化?
{
__IO u32 va = 100;
va = 200;
//此处放断点,看一下值已经正常了。
}
__I 、__O 、 __IO的宏定义如下:
2. char类型会被当成unsigned char, 导致计算结果出错
{
char va = -40;
//这里放断点,看一下va的值 如下:
}
这是因为负数变成无符号数时,在内存中是其反码+1
-40 二进制为: 1010 1000
反码为: 1101 0111
补码为: 1101 1000 ——> 216
所以被当成是unsiged char 时会是216,显然会导致计算出错。
如何解决?
{
int8_t va = -40;
//放断点看一下:
}
int8_t定义如下:
就是说申明char类型时,一定要写成signed char 不然会被编译器认为是unsigned char
这点与我们在linux开发中是有区别的。
关键字:STM8 局部变量 编译器优化
引用地址:
STM8遇到的一些小问题
推荐阅读最新更新时间:2024-11-06 11:33
STM8学习-内部时钟切换
在STM8内部有时钟切换功能,可以在需要时变换时钟的频率。板子为STM8_Discovery,LED为PD0。 程序如下: //软件环境:IAR FOR STM8 V1.0 //作者:Nicole //功能:STM8的内部时钟分频切换 //日期:2010.11.04 #include iostm8s105c6.h // 函数功能:延时函数 // 输入参数:ms -- 要延时的毫秒数,这里假设CPU的主频为2MHZ void DelayMS(unsigned int ms) { unsigned char i; while(ms != 0) { for(i=0;i 250;i++) { }
[单片机]
STM8单片机基本硬件线路设计
其实STM8可以不需要晶振跟复位电路,但是为了最小系统能够稳定运行,所以最好增加外部电路。 ● STM8复位电路设计 STM8单片机内置上电复位(POR),所以,STM8单片机可以不设外部上电复位电路,依然可以正常复位,稳定工作。 若是系统需要设置按键复位电路,那么注意,STM8单片机是低电平复位,如下图,设计按键复位电路: ● STM8震荡电路设计 STM8单片机内置RC振荡电路。出厂时,未进行时钟源设置的STM8,其时钟源使用的是内部16M高速RC振荡器,然后经过8分频则是2M频率。 通过程序对寄存器的设置,可以设置MCU的内部RC振荡频率。例如:4M、8M等。不过,内置RC振荡,在一致性方面存在差异,它因生
[单片机]
stm8环境搭建及编译第一个工程
准备: 开发软件:IAR for stm8 固件库:STSW_STM8069_STM8S和STM8A标准外设固件库 实验步骤 1.下载IAR for stm8 ,当进入到IAR官网时(点击上方IAR for stm8链接),显示界面大概如下: 把网页拖到最下面看到下图,点击 download a free trial 将会拉出一个下载按键,这个显示的IAR版本是最新的。本人目前看到的版本为3.10。 下载完成后,根据以往的方式进行安装,然后通过IAR破解工具将其破解。破解目前网上很多随便下载。当然本人自己也提供了下载链接 https://download.csdn.net/download/fangjiaze444
[单片机]
STM8库编程笔记之时钟管理
STM8库函数学习笔记之时钟管理 相关函数: void CLK_DeInit(void); void CLK_HSECmd(FunctionalState NewState); void CLK_HSICmd(FunctionalState NewState); void CLK_LSICmd(FunctionalState NewState); void CLK_CCOCmd(FunctionalState NewState); void CLK_ClockSwitchCmd(FunctionalState NewState); void CLK_FastHaltWakeUpCmd(FunctionalState New
[单片机]
STM8系列单片机开发环境搭建
一、 开发环境搭建 1、 安装STVD开发环境 安装包ST+Visual+Develop+%28STVD%29+4.2.1+,安装过程中直接下一步下一步就OK。 2、 安装C语言编译器 STVD 仅能编译汇编 和烧写STM8系列单片机程序,所以需要Cosmic_C C编译器配合使用。 安装包STM8_Cosmic_C编译器破解版for_STVD,安装过程中直接下一步下一步就OK,最后需破解,将破解License直接替换掉安装路径下的License即可。 3、 安装ST-Link驱动 安装包en.stsw-link009 说明:官网下载很麻烦,建议先官网上找到具体安装包名称,然后百度搜索资源,实在没有资源在去官网下载。以上1
[单片机]
STM8学习笔记---定时器输出7路PWM波
STM8S003F3P6单片机共有三个定时器定时器1、定时器2、定时器4。其中定时器1为16位高级定时器,定时器2为16位通用定时器,定时器4为8位基本定时器。定时器1和定时器2可以输出PWM波。其中定时器1有4个通道,定时器2有3个通道。 现在让定时器1和定时器2所有通道同时输出PWM波。 首先初始化定时器IO口 通过最小系统图可以看出定时器通道对应的IO口为: TIM1_CH1– PC6, TIM1_CH2– PC7, TIM1_CH3– PC3, TIM1_CH4– PC4, TIM2_CH1– PC5, TIM2_CH2– PD3, TIM2_CH3– PA3, 将定时器对应的IO口都设置为推挽输出模式。因为要
[单片机]
IAR环境下STM8工程输出hex文件的方法
HEX文件 STM8单片机编程完成后,需要下载到目标硬件板中,这时需要用到hex文件。 IAR设置编译生成hex文件的方法 s1: 工程名右键单击,选择【Options】,如图中1; s2: 在Options for node XXX 对话框下,点击【Output Converter】,图中3; s3: 勾选【Generate additional output】, 下拉框【Output Format】中选择: Intel extended,如图中4; s4: 如果想修改输出hex文件的名称,可以勾选Override default, 并在下方输入想要的hex文件名称;不勾选的话,系统默认生成的hex文件为:工程名.hex s
[单片机]