完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
很简单的一个定时中断,平台是STVD+COSMIC。完全不能理解。stm8s有什么特殊的吗?
首选定义一个全局变量,类型是unsigned int,明显数值范围应该是0~65535. 定时器初始为1ms产生一次中断,这里就不贴了。
这个函数是能编译通过的,不过当我改了一下。
复制代码 这个函数就不能编译通过,错误是
也就是说在中断里面,jiffies不能超过32767. 而在中断外面,比如放在主函数或者任意其他非中断,我实测是可以通过的。 此外,我也测试过使用long类型,然后把判断清零值写的很低,同样的错误。 也就是说,中断中最大计数不能超过32767. 这究竟是什么原因。在其他单片机完全没有问题。 IAR下还未测试。 |
|
相关推荐
1个回答
|
|
在STM8S平台上使用STVD和COSMIC编译器时,确实需要注意一些限制。首先,让我们了解一下STM8S的特性和COSMIC编译器的一些限制。
STM8S是一款8位微控制器,其寄存器和内存空间有限。在这种情况下,使用`unsigned int`类型的全局变量可能会导致一些问题,因为STM8S的寄存器大小有限。在STM8S上,寄存器通常是8位的,这意味着它们的最大值是255。然而,STM8S的内存空间可以支持更大的数据类型,如16位的`unsigned int`。 COSMIC编译器是一个适用于8位和16位微控制器的编译器,它对内存和寄存器的使用有一定的限制。在这种情况下,使用`@far`和`@interrupt`属性可以确保中断函数被正确地放置在内存中,并在中断发生时被调用。 现在,让我们回到您的问题。您提到了一个定时器中断,它每1ms产生一次中断。在您的代码中,您定义了一个名为`jiffies`的全局变量,类型为`unsigned int`。这个变量的数值范围应该是0到65535。在中断服务例程(ISR)中,您使用了以下代码: ```c @far @interrupt void irq_time_ovf(void){ jiffies++; if (jiffies >= 32767) jiffies = 0; } ``` 这段代码的目的是当`jiffies`的值达到32767时,将其重置为0。然而,您提到当您尝试修改这段代码时,遇到了一些问题。这可能是因为您尝试将`jiffies`的值设置为超过32767的数,这在STM8S平台上可能会导致问题。 为了解决这个问题,您可以尝试以下方法: 1. 确保您的全局变量`jiffies`使用16位的`unsigned int`类型,而不是8位的。这可以通过在变量定义前添加`__code`关键字来实现: ```c __code unsigned int jiffies; ``` 2. 在中断服务例程中,您可以使用一个较小的计数器来跟踪中断次数,然后将这个计数器的值累加到`jiffies`变量中。这样可以避免在中断服务例程中直接操作`jiffies`变量,从而减少潜在的问题。 例如: ```c __code unsigned int jiffies = 0; __bit overflow_flag = 0; @far @interrupt void irq_time_ovf(void){ static __xdata unsigned int local_jiffies = 0; local_jiffies++; if (local_jiffies >= 32767) { local_jiffies = 0; overflow_flag = 1; } if (overflow_flag) { jiffies += local_jiffies; overflow_flag = 0; } } ``` 这样,您可以在中断服务例程中使用一个较小的计数器(`local_jiffies`)来跟踪中断次数,然后将这个计数器的值累加到全局变量`jiffies`中。这可以确保`jiffies`的值不会超过其允许的范围,同时避免在中断服务例程中直接操作全局变量,从而减少潜在的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 01:54 , Processed in 0.626269 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号