IOsetting / FwLib_STC8

A lite firmware library for STC8G/STC8H series MCU
Apache License 2.0
118 stars 30 forks source link

Keil编译环境下使用定时器1作为串口波特率发生器报错 #12

Open perseverance51 opened 1 year ago

perseverance51 commented 1 year ago

在uart1_timer1_tx.c文件中原外部变量引入:

extern __CODE uint16_t ticks_ms; extern __CODE uint8_t ticks_us, clkdiv;

需要如下修改: `

if defined (SDCC) || defined (__SDCC)

extern CODE uint16_t ticks_ms; extern CODE uint8_t ticks_us; //clkdiv (include fw_reg_stc8h.h)

elif defined CX51

extern uint16_t code ticks_ms; extern uint8_t code ticks_us;

endif

……

UART1_TxHex(CLKDIV);//改成大写

fw_sys.c文件中调整如下:

if defined (SDCC) || defined (__SDCC)

CODE uint16_t ticks_ms = (CONF_FOSC / ((CONF_CLKDIV == 0)? 1 : __CONF_CLKDIV) / CLK_REF); CODE uint8_t ticks_us = (CONF_FOSC / ((CONF_CLKDIV == 0)? 1 : __CONF_CLKDIV) / CLK_REF / 1000);

elif defined CX51

uint16_t code ticks_ms = (CONF_FOSC / ((__CONF_CLKDIV == 0)? 1 : CONF_CLKDIV) / CLK_REF); uint8_t code ticks_us = (__CONF_FOSC / ((CONF_CLKDIV == 0)? 1 : __CONF_CLKDIV) / __CLK_REF / 1000);

endif

`

IOsetting commented 1 year ago

Thank you for the report. The code should work as __CODE macro will be translated to code in __CX51__, which is defined in fw_reg_base.h

#elif defined __CX51__
...
    #define __CODE  code
    #define __REENTRANT  reentrant

I will test it in Keil C51 later.

IOsetting commented 1 year ago

The commit e2024f59fb70bef0d531be6a2b3c550f6a7a98e8 has fixed this issue.