初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
小于32k 的16位地址即可,32-128K的24位地址即可
我怀疑是库函数问题,希望官方指导一下,把地址内存改为16位就不会出现告警
IN_RAM 已经宏定义_ramfunc 了,但是运行到 Startaddress = startaddress + ((uint32_t)BlockNum * FLASH_BLOCK_SIZE)里显示有非_ramfunc 的函数 这里 Startaddress 定义的 32位,尝试把他改为16位不会出现告警,这里定义的32位是不是针对STM8_HD的产品型号?我用的MD的改为16位是否可以
感谢回答,是不是库函数这一块有bug,用的stm8L151k6 flash最大32K,不明白为什么转成32位运算,能直接修改吗,
函数前面有说明,对于IAR的一些警告是没影响的。
所以不用纠结这警告
不知你所说的告警具体是什么。有些时候警告只是提醒未必是错误。
首先,这个地方的变量startaddress定义为32位是合理的也是必要的,STM8的最大寻址空间为18MB.
作为库代码,它要兼顾整个系列。
STM8支持3种寻址模式,即短寻址、长寻址和扩展寻址模式,分别对应8位地址空间、16位地址空间和整个
18MB地址空间。而且,对于8位地址寻址模式和16位寻址模式还需遵循256B和16KB地址对齐,即8位寻址模式
不是任意的8位地址空间,16位寻址模式也非任意的16位地址空间。
既然这样,具体到你提到的当前计算结果startaddress,在基于它寻址时我们需要给它指定合适的指针类型,
或说指针属性,到底是16位长模式访问 还是24位扩展模式访问,亦即代码里提到的near 还是 far属性。
不过,强烈不建议你研究这个STM8芯片了。看看STM32 M0或M0+内核的芯片吧** ,比方STM32C0,
STM32F0,STM32G0啊,低功耗还有STM32L0啊这些。
非常感谢你的细心回答,具体告警是
Library call(?sll32_IO_IO_a)from within a _ramfunc function以及
Library call(?add32_IO_IO_l1)from within a_ramfunc function是出现在 startaddress = staraddress + ((uint32_t)BlockNum * FLASH_BLOCK_SIZE 语句里。 尝试只有把staraddress定义为uint16_t 告警才会消除,现在是不知道这个告警对功能有没有影响,因为有时发现存到模拟EEPROM的数据会丢失,所以怀疑这个告警说明程序本身还是有问题。 另外我的意思是针对不同的型号可以用宏定义隔开,不是说不让支持大容量型
如同上面那么小伙伴所说,STM8的寻址空间分为16 位和24 位。
而 STM8 是没有32位寄存器,这就让编译器很难办,实际执行也不好说。
之前对寻址范围是靠关键字定义来区分的,通过 @near or @ far 来告诉编译器并提高效率的。
编译器还有给默认配置的寻址模式
不过对于内部EEPROM来说,就是16位寻址范围,可以参考手册对于地址范围的描述。
好的,谢谢