这几天在使用stm8s003MCU进行嵌入式开发,之前没用过stm8系列的MCU,在使用过程中不免遇到很多问题,本文讲述的即是开发过程中一个问题。在使用stm8s003编程过程中,使用了官方的库文件,在进行build时候,报了一个error:segment .text size overflow。经过查阅资料才发现之所以出现本错误是因为代码长度超过了MCU的flash。因为stm8s003的flash为8KB,而我的代码长度超过了8KB。实际上,在使用官方库进行编程时,官方库中好多代码实际上没有用到,所以可以将这些库中未使用到的代码函数不编译进自己写的代码。具体操作如下:
第一步,打开stvd软件,点击Project下的Settings,界面如下
第二步,点击C Compiler,选择General的d倒三角图标,出现界面如下
第三步,点击Optimizations,出现默认界面如下
第四步,点击Optimizations下的倒三角,出现界面如下
第五步,点击Customize,出现界面如下:
第六步 选上SplitFunction in Separate Sections(+split),如下所示
为什么这样操作可以呢?
split function,顾名思意,将不同函数分开编译,不进行合并优化,这样,在最后链接时,未使用函数就不会链接进来,官方库中实际有大量未使用函数。
关键字:stm8s 问题总结 segment text size overflow
引用地址:
stm8s使用问题总结1——segment .text size overflow
推荐阅读最新更新时间:2024-10-30 13:43
STM8S can 过滤总结
学点东西不容易,花了6小时终于明白了过滤,关键是没有找到合适的范例 。 STM8S提供了6个32位的过滤寄存器,我们暂以只讨论32位的地址过滤。 这6个32位的过滤,可以选用列表方式,即6个寄存器组设置的标识符才可不被CAN丢弃,但这似乎很少这样通讯,一般我们会选用电脑网卡类似的遮罩方式 192.168.1.1 / 255.255.255.0 如此就限制了只有同网段的包才可被接收,下面我们重点来讨论这个问题 。 6个32位过滤寄存器(我们可以把它当成32位的,这样更易表述些,实际上是4个8位的),可以两两组合成带有遮罩过滤的3个组,我们只讨论其中一组即可。 在发送数据时,标识包格式如下: 而过滤寄存器的格式如下,也就是说接
[单片机]
STM8s在利用库配置端口的小问题
在应用的时候PA2口需要设置成推挽输出,控制一个外部电源开关,端口初始化程序如下: GPIO_DeInit(GPIOA); GPIO_Init(GPIOA,GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW); 在设置完后,端口会马上输出高电平,于是又加了一句: GPIO_WriteLow(GPIOA,GPIO_PIN_2); 完成之后,发现被供电的器件在第一次上电的时候会被触发,而程序并没有在PA2输出高电平。这个被供电器件配有供电电池如果检测到端口有高电平就会启动, 用示波器观察PA2口,发现在上电瞬间会有一个短脉冲,看来就是这个问题。查看了一下库函数的源代码: vo
[单片机]
如何在STM8S单片机上实现一键式的开关机功能
开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。 开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的电流降低到μA级,对电池的消耗就可以忽略不计了。
[单片机]
STM8S单片机外部中断唤醒
一、 STM8S 外部中断进行唤醒 先了解一下STM8S的中断资源 再看看STM8S的中断管理。STM8S采用软件优先级和硬件优先级来控制一个中断的响应,先比较软件优先级只有当软件优先级一致时才会比较硬件优先级,由于硬件优先级具有唯一性,这样便保证了某一时刻定会只有一个中断被处理。 要使用外部中断,只需简单的配置一下EXTI_CR1寄存器,并将主程序main的软件优先级置为0即可。默认情况下自复位开始,主程序的软件优先级被设置为3,处于最高软件优先级,仅有TRAP,TLI,RESET中断能够打断,其余的中断都是不会被响应的。 为了防止中断过程中被别的优先级高的中断所打断,可以将当前优先级置为最高3级。 代码如下:
[单片机]
STM8S 中断唤醒,定时唤醒,窗口看门狗
一、 STM8S 外部中断进行唤醒 先了解一下STM8S的中断资源 再看看STM8S的中断管理。STM8S采用软件优先级和硬件优先级来控制一个中断的响应,先比较软件优先级只有当软件优先级一致时才会比较硬件优先级,由于硬件优先级具有唯一性,这样便保证了某一时刻定会只有一个中断被处理。 要使用外部中断,只需简单的配置一下EXTI_CR1寄存器,并将主程序main的软件优先级置为0即可。默认情况下自复位开始,主程序的软件优先级被设置为3,处于最高软件优先级,仅有TRAP,TLI,RESET中断能够打断,其余的中断都是不会被响应的。 为了防止中断过程中被别的优先级高的中断所打断,可以将当前优先级置为最高3级。 代
[单片机]
STM8S中Option Byte的改写操作
在STM8S中有些引脚是第二功能,需要对OptionByte字节进行改写才能实现第二功能,在博文里有蜂鸣器的程序,在里面对Option Byte进行了修改,由于用到了库函数,觉得比较麻烦,想用裸机写个程序修改字节,操作后发现改了之后芯片就不能读写了,出现错误,总是出现找不到主函数的错误,郁闷了一天。 可项目里要用到第二引脚的功能,没办法继续努力吧!在网上查了一些相关的资料,说是可以用STVP修改Option Byte,抱着试试看的心态在网上下了软件,安装上后就简单的操作了一下,发现芯片居然好使了。虽然方法笨了点,但可以应用就OK了! 因为FLASH是掉电不丢失的,我先用STVP把OptionByte修改好后,
[单片机]
无线网络经常掉线的问题总结
对于 无线网络 经常掉线的问题我们现在来进行一下总结。那么这里就让我们详细看看具体的内容吧。首先我们看看混合网络中出现掉线的相关问题吧。希望这些总结对大家能够有所帮助。 无线网络经常掉线1:混合无线网络经常掉线 故障现象:使用Linksys WPC54G网卡和Linksys WRT54G AP构建无线局域网,它们使用的都是IEEE 802.11g协议,网络中还存在少数802.11b网卡。当使用WRT54G进行54Mb/s连接时经常掉线。 故障分析:从理论上说,IEEE 802.11g协议是向下兼容802.11b协议的,使用这两种协议的设备可以同时连接至使用IEEE 802.11g协议的AP。但是,从实际经验
[模拟电子]
STM8SPWM频率调节方式
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);// 有些硬件会自动八分频 导致后面的计算出现错误 CLK_HSICmd(ENABLE); //打开内部的时钟函数 GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); //TIM2_PWM_Init(); /* * TIM2 Frequency = TIM2 counter clock/(ARR + 1) * 这里设置TIM2的计数频率为 24M/8/(2999+1)=1K 在这里计算频率 */ TIM2_TimeBaseIni
[单片机]