YW1920 发表于 2025-3-23 12:35:50

第一次用32G12K128遇到的奇葩问题

使用32G12K128给我的当头第一棒。一个简单的定义变量就给我报错了

国芯人工智能 发表于 2025-3-23 12:38:00

在初次使用STC32G12K128时,遇到变量定义报错的问题,可能是由于以下几个原因导致的:

1. 编译器配置不当:STC32G12K128是一款基于8051架构的微控制器,不同的编译器对变量的定义和存储方式有不同的要求。请确保您的编译器配置正确,特别是针对STC32G12K128的优化设置。

2. 数据类型不匹配:8051架构对数据类型有严格的要求,特别是对于位变量和字节变量的定义。请检查您定义的变量类型是否与编译器支持的类型相匹配。

3. 内存分配问题:STC32G12K128的内存资源有限,如果定义的变量超出了可用内存范围,编译器会报错。请检查您的变量定义是否合理,是否超出了内存限制。

4. 语法错误:尽管看似简单的变量定义,也可能存在语法错误,如缺少分号、使用了非法字符等。请仔细检查代码,确保语法正确。

建议您参考STC32G12K128的用户手册和编译器文档,确保所有设置和代码编写都符合规范。同时,也可以利用调试工具逐步排查问题,找到具体的错误原因。

[本文内容由国芯人工智能辅助生成,仅供参考]

YW1920 发表于 2025-3-23 12:45:03

按理说就那么一段定义变量,在STC8A8K64D4下能编译通过,在STC32G12K128下应该也能通过啊,就这一段应该是可以兼容的吧

ercircle 发表于 2025-3-23 15:01:17

YW1920 发表于 2025-3-23 12:45
按理说就那么一段定义变量,在STC8A8K64D4下能编译通过,在STC32G12K128下应该也能通过啊,就这一段应该是 ...

改成DATA_PIN BIT 0x90.7可以编译

建议从C学起{:4_178:}
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=11902

P1M0 DATA 0X92
P1M1 DATA 0X91
       
BIT_COUNTER EQU 0x33
DATA_PIN BIT 0x90.7

ORG 0000H
JMP MAIN
ORG 0100H

MAIN:
        SETB DATA_PIN
        SJMP $
END

YW1920 发表于 2025-3-23 15:49:45

ercircle 发表于 2025-3-23 15:01
改成DATA_PIN BIT 0x90.7可以编译

建议从C学起


嗯,看到你的回答之后问题一下就解决了,P1M0 DATA 0X92
P1M1 DATA 0X91
P1   DATA 0X90      
BIT_COUNTER EQU 0x33
DATA_PIN BIT P1.7

ORG 0000H
JMP MAIN
ORG 0100H

MAIN:
      SETB DATA_PIN
      SJMP $
END
这样就行了,不过同样的代码在STC8A8K64D4下又能编译通过真是奇怪

ercircle 发表于 2025-3-23 16:04:05

YW1920 发表于 2025-3-23 15:49
嗯,看到你的回答之后问题一下就解决了,
这样就行了,不过同样的代码在STC8A8K64D4下又能编译通过真是奇 ...

C51的STARTUP.A51文件里也没找见P1的定义但是也不影响编译.....

一个是C251一个是C51编译器不一样。可能这个差异导致的。

angmall 发表于 2025-3-23 22:48:37

何宾教授说最好是用这样子的规划。

P4M0   DATA 0xB4
P4M1   DATA 0xB3
P4   DATA 0xC0
       
P6M0   DATA 0xCC
P6M1   DATA 0xCB
P6   DATA 0xE8

IT0    EQUS:0x88.0
IT1    EQUS:0x88.2
EX0    EQUS:0xA8.0
EX1    EQUS:0xA8.2
EA   EQUS:0xA8.7
                                                 
my_progSEGMENT CODE         
             RSEG my_prog   
         LJMP main               
         ORG 0x0003               
             LJMP int0
               ORG 0x0013
               LJMP int1
         ORG 0x200                        
main:
   USING   0   
       SETBIT0                        ;设置外部中断0为低电平触发
       SETBIT1                        ;设置外部中断1为低电平触发
       SETBEX0                     ;使能外部中断0
       SETBEX1                     ;使能外部中断1
       SETBEA                        ;使能全局中断
   
       MOV   P4M0,#0x00
   MOV   P4M1,#0x00
   MOV   P6M0,#0x00
   MOV   P6M1,#0x00       
       MOV   P4,#0x00
       MOV   A,#0xFE                           
   MOV   P6,A       
loop:       
   JMP   loop               
   
int0:
   RL    A
       MOV   P6,A
   RETI
int1:
   RR    A
       MOV   P6,A
   RETI       
        END

页: [1]
查看完整版本: 第一次用32G12K128遇到的奇葩问题