问题标签 [stm8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
disassembly - 单片机stm8拆解
可以反汇编十六进制stm8固件吗?
c - 具有不同#define 的 IAR 构建库
我将在 IAR Workbench 中为 STM8 构建一个简单的库(.a 文件)。在这个库中,我想同时实现硬件 SPI 和软件 SPI 供用户选择。
在我的 library.c 中,我写道:
在我的 library.h 中,我写道:
然后我认为如果用户#define HARDWARE_SPI
在目标项目中定义,该库将运行硬件 SPI 部分。如果不是,则应使用软件 SPI。
但是在我构建项目并将 library.a 和 library.h 添加到测试项目中之后,由于 library.h 没有#define HARDWARE_SPI
,例程仍然进入硬件 SPI 部分。我如何构建可以让用户通过写入#define
头文件来选择功能的 library.a?
c - 使用 STM8L 在 UART 上接收数据
我想知道,将UART上的数据发送到STM8L有什么办法吗?我写了一个与其他人相似的代码,我认为我的硬件还可以。我通过终端软件用PC向STM8L发送一些数据。在这里我想我应该首先发送一些数据,它检测到数据表中描述的开始。现在我该怎么办?请原谅我的语法错误。感谢您的帮助 :)
c - stm8 代码中的读出保护 (ROP) 设置选项字节
使用 stm8s003f3。
添加这些代码主要初始化,代码保护(ROP)正在设置,但我的应用程序代码不起作用。
如果通过 IAR 或 ST Visual Programmer 选项字节选项卡设置选项字节,则应用程序代码和代码保护 (ROP) 都正常工作。
我需要在代码中设置 ROP。
c++ - 将变量放在绝对内存位置 (IAR C/C++)
我正在使用 IAR 编译器开发 STM8S 微控制器。
如何使用编译指示或另一种方法修复多个变量的起始位置?
当我尝试以下代码时,编译器会给出以下错误消息:
错误[Lp025]:绝对部分 .near.bss (main.o #12) ([0x000100-0x000100]) 与绝对部分 .near.bss (main.o #8) ([0x000100-0x000100]) 重叠
我在 IAR 技术说明中搜索“绝对定位变量”,但找不到任何信息。
opcode - 了解 STM8 流水线
我试图了解 STM8 流水线,以便能够预测我的代码需要多少周期。
我有这个例子,我在每个 GPIO 引脚上切换 4 个周期。IFFloop
在 4 字节边界 + 3 处对齐,引脚保持活动 5 个周期(即比它应该多一个)。我想知道为什么?
更多上下文:
bset
/bres
是4字节指令,nop
1字节。nop
//指令每个需要 1bset
个bres
周期。- 该
jra
指令需要两个周期。我认为在第一个周期中,指令缓存被下一个 32 位值填充,即在这种情况下nop
只有指令。第二个周期实际上只是 CPU 在解码下一条指令时被停止。
所以在循环中:
bres
清除引脚jra
,管道刷新,nop
获取nop
解码,bset
获取nop
执行、bset
解码、下一次nop
获取bset
执行设置引脚nop
,bres
取nop
nop
,bres
解码bres
执行清除引脚
据此,该引脚应在 4 个周期内保持低电平,在 4 个周期内保持高电平,但在 5 个周期内保持高电平。
在任何其他对齐情况下,引脚按预期为低/高 4 个周期。
我认为,如果 PIN 在一个额外的周期内保持高电平,那一定意味着执行管道在bset
指令之后停止(nop
此后的 s 提供了足够的时间来确保bres
稍后可以立即执行)。但根据我的理解nop
(对于 6.)已经在 4 中获取。
知道如何解释这种行为吗?我在手册中找不到任何提示。
assembly - STM 汇编指令集分别保留数据位置,如 PIC 汇编“ORG”、“RES”
我正在研究 STM8S 微控制器,我需要通过使用汇编为我的变量保留绝对数据位置。
所以,我尝试“LD”指令,但我做不到。
在 PIC 程序集中,我有一部分代码是这样的:
这就是我需要的,我想在 STM8S 组装中做到这一点。
c++ - cpputest on STM8 failed due multiple 'main'
I want to use cpputest on STM8 and installed all the required tools for it. I am able to run cpputest on my simplified code. on my main file which belongs to the hardware I have of course the main function. But in the Test environment I have a main function under AllTests.cpp as well. When I compile it i get the error:
A further issue I run into is: I compile the code for a 8bit processor and i use the library <stdint.h>
, so my main file has the line uint8_t main(){
. The compiler of cpputest does not like that at all...
Does anyone has an idea how to fix this?
Files:
blinky.h:
blinky.c
test.cpp:
AllTest.cpp:
Makefile:
makefile - SDCC 编译器的中断 STM8s 问题
我想在 SMT8S003K3 (STM8SVL-DISCOVERY) 上使用中断,当我在我的 main() 所在的其他文件上使用中断时,它无法被识别。
我做了两个测试: - 首先我将此代码修改为标准外设库:
它有效......
现在要使用 UnitTests,我将此函数放入另一个文件中:main_internal(只是一个简单的示例):
主要功能:
它什么也不做......它在STM8S003的深存储器中流动(正如我在调试器中看到的那样)。这是链接问题吗?
这是我的 Makefile:
这将是没有标准外设库的代码:
在这里,我有两个版本的 gdb 差异:
令人惊讶的是:00008034: int 0x0080d7 ;0x80d7 在 main_internal 的第二个版本中丢失了。
任何帮助,将不胜感激
iar - 禁用读出保护 stm8s003
我开始使用stm8s003。我像这样使用 stm8s003 板:
“ https://www.cnx-software.com/wp-content/uploads/2015/01/One_dollar_development_board.jpg ”。
当我使用IAR并将程序下载到我的 stm8 时,会发生此错误:
“必须禁用 Flash Memory Read-out protection 选项才能进行调试。禁用此选项将首先擦除整个 Flash Memory。”
我无法调试。如何禁用读出保护?