页次: 1
我看了下你的sys_config
把
[uart_para]
uart_debug_port = 0
uart_debug_tx = port:PE1<5>
uart_debug_rx = port:PE0<5>
改成
[uart_para]
uart_debug_port = 0
uart_debug_tx = port:PE1<5>
;uart_debug_rx = port:PE0<5>
把
[uart_para0]
uart_used = 1
uart_port = 0
uart_type = 2
uart_debug_tx = port:PE1<5>
uart_debug_rx = port:PE0<5>
改成
[uart_para0]
;uart_used = 1
;uart_port = 0
;uart_type = 2
;uart_debug_tx = port:PE1<5>
;uart_debug_rx = port:PE0<5>
我也走到这一步了,下载程序后重启没有信息输出,已经改了log级别为4 也按照上面的内容进行更改tx rx 但是仍然不行
关于中断这个当初我也是被坑了好久,后来才发现这个其所在sdcc的手册内是有描诉的,看他的意思除了能放在main对应的那个c文件内,在main的头文件包含也是可以的,不过后面那个场景我没试过。
SDCC allows interrupt service routines to be coded in C, with some extended keywords.
void timer_isr (void) __interrupt (1) __using (1)
{
...
}
The optional number following the __interrupt keyword is the interrupt number this routine will service. When
present, the compiler will insert a call to this routine in the interrupt vector table for the interrupt number specified.
If you have multiple source files in your project, interrupt service routines can be present in any of them, but a
prototype of the isr MUST be present or included in the file that contains the function main. The optional (8051
specific) keyword __using can be used to tell the compiler to use the specified register bank when generating code
for this function.
嗯,我一般是直接写一个头文件和源文件包含全部的中断, 这样我感觉会好一些,在芯片的头文件中包含一下即可
编辑环境是windows加eclipse,下面分享几张截图,
这一张是关于下载程序到单片机里面的配置,稍微等待一下就能下载了,不过不支持在线调试,我一般使用串口直接调试,不怎么用在线调试。
下面说一说eclipse对比keil的优势,其实最主要的是编辑代码的增强,keil特别是C51版本的,基本还停留在上世纪的编辑风格,和windows自带的记事本强不了多少。eclipse具有代码提示、关键词特殊颜色、全局修改变量等等功能,也可以直接搭配git
SDCC时至今日还在活跃的更新,说明还是有一部分人在用的。SDCC里面的一个大坑是关于中断函数,据我个人测试中断函数必须在main函数之前被声明或者直接编写,不然就无法进中断,切记。SDCC编译固件时如果工程里面有较多的无用代码,它也会直接编译到hex里面的,这个问题困扰了我好久,一直没有得到解决。所以如果空间紧张,建议注释掉一些无关的代码,避免代码空间膨胀
SDCC其实蛮好用的,编译速度很快,特别是linux环境下,windows下面速度也挺快。用好SDCC需要一些技巧,比如你得比较熟悉makefile,以及SDCC里面的一些小坑。我个人做的很多项目都是使用SDCC,除了51单片机外,SDCC也支持STM8的。下面我分享一个新塘单片机的工程文件给大家参考一下
NE76003_SDCC_UART_TEST_20200518-1515.rar
页次: 1