STM8遇到的一些小问题

发布者:caoxians4589最新更新时间:2020-04-21 来源: eefocus关键字:STM8  局部变量  编译器优化 手机看文章 扫描二维码
随时随地手机看文章

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遇到的一些小问题

上一篇:STM8芯片死锁解锁方法
下一篇:关于STM8CAN产生bus-off如何自动恢复

推荐阅读最新更新时间: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振荡,在一致性方面存在差异,它因生
[单片机]
<font color='red'>STM8</font>单片机基本硬件线路设计
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
[单片机]
<font color='red'>stm8</font>环境搭建及编译第一个工程
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口都设置为推挽输出模式。因为要
[单片机]
<font color='red'>STM8</font>学习笔记---定时器输出7路PWM波
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
[单片机]
IAR环境下<font color='red'>STM8</font>工程输出hex文件的方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved