找回密码
 立即注册
查看: 22|回复: 4

学习第一课

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2025-08-11 00:05:12
已绑定手机

13

主题

202

回帖

1186

积分

金牌会员

积分
1186
发表于 3 天前 | 显示全部楼层 |阅读模式
今天重新开始学习ai8051芯片,对着AI8051实验指导书复制粘贴了第一个8051程序

#include "ai8051u.h"
#include "ai_usb.h"

void main(void)
{
    EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
    WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
    CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
    usb_init();

    while (1)
        {
                printf_usb("Hello World !\r\n");

        }
}
然后编译然后一堆错误
1.png 2.png
苍天啊 大地啊 出身未捷身先死啊 stc这么难么
哪位大佬指点一下啊

回复

使用道具 举报 送花

3

主题

2077

回帖

1002

积分

等待验证会员

积分
1002
发表于 3 天前 | 显示全部楼层
您好,感谢您的提问。您提到在学习STC AI8051芯片时遇到了编译错误的问题,这是很多初学者在接触嵌入式开发时常见的困扰。以下是对您问题的分析与建议,希望能帮助您顺利入门。

首先,您提供的代码片段如下:
  1. c
  2. include "ai8051uh"
  3. include "aiusbh"
  4. void main(void)
  5. {
  6.     EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
  7.     WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
  8.     CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
  9.     usbinit();
  10.     while (1)
  11.         {
  12.                 printfusb("Hello World !\r\n");
  13.         }
  14. }
复制代码

这段代码看起来是基于STC AI8051系列单片机的USB通信示例,但出现编译错误的原因可能有以下几个方面:

一、头文件路径或名称错误

您使用了 #include "ai8051uh" 和 #include "aiusbh",这些头文件是否存在于您的开发环境中?请确认以下几点:
您是否正确安装了STC AI8051的开发环境(如:STC IDE 或 Keil uVision)?
头文件 ai8051uh.h 和 aiusbh.h 是否存在于项目目录或编译器的包含路径中?
如果是通过SDK获取的库文件,请检查是否完整导入到项目中。

如果头文件缺失或路径错误,编译器将无法识别其中的函数定义和宏定义,导致编译失败。

二、函数未定义或未链接

usbinit() 和 printfusb() 是 USB 相关的函数,它们的实现通常依赖于特定的库文件或驱动支持。请确认:
是否已正确链接 USB 库(如:aiusb.lib 或其他相关库)?
是否在项目设置中启用了 USB 功能模块?
是否在代码中包含了正确的初始化逻辑(如:USB端口配置、中断使能等)?

若这些函数未被正确定义或链接,编译器会报错“undefined reference”或“function not declared”。

三、编译器配置问题

STC AI8051 是基于 8051 架构的增强型 MCU,其编译器可能对标准 C 语法有一定限制。建议您检查:
编译器版本是否兼容您的代码?
是否选择了正确的芯片型号(如:AI8051F32A、AI8051F40B 等)?
是否启用了 USB 支持相关的编译选项?

此外,部分编译器对 main() 函数的返回类型有要求,建议使用 void main(void) 或 int main(void),视具体编译器而定。

四、代码逻辑建议

从代码结构来看,您使用的是一个简单的无限循环输出“Hello World”,这在调试阶段是可行的。但需要注意以下几点:
printfusb() 的功能是否依赖于 USB 接口的初始化完成?建议在调用前确保 USB 已成功初始化。
若使用 USB 调试输出,请确保连接了 USB 转串口模块,并在主机端安装相应的驱动程序。
建议在调试阶段添加延时函数,避免输出过快导致串口接收异常。

五、推荐的学习路径

1. 熟悉开发环境:建议先从 STC 官方提供的示例程序入手,了解基本的工程结构和编译流程。
2. 查阅官方文档:STC 提供了详细的 AI8051 开发手册和 API 文档,建议仔细阅读。
3. 逐步调试:从最简单的 LED 控制开始,逐步增加功能,如定时器、串口、USB 等。
4. 参考官方示例:STC 官网或 SDK 中通常包含多个示例项目,可直接用于学习和测试。

综上所述,您的代码存在头文件引用、函数定义和编译器配置等方面的潜在问题。建议您按照上述建议逐一排查,并结合官方文档进行调试。

如果您能提供具体的编译错误信息(如错误编号或提示内容),我们可以进一步定位问题根源。

祝您学习顺利,早日掌握 STC AI8051 开发!如有其他问题,欢迎随时交流。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2025-08-11 00:05:12
已绑定手机

13

主题

202

回帖

1186

积分

金牌会员

积分
1186
发表于 3 天前 | 显示全部楼层
国芯人*** 发表于 2025-8-8 22:33
您好,感谢您的提问。您提到在学习STC AI8051芯片时遇到了编译错误的问题,这是很多初学者在接触嵌入式开发 ...

感谢大佬的第一时间回复,其中stc ai8051开发环境已经搭建好了 8051实验箱的例程可以正常编译,关于usbinit 和printfusb两个函数也根据实验指导书添加到工程项目里了,刚才翻译了一下错误信息,主要有一下几点
内存模型不兼容警告 (WARNING L14):
stc_usb_cdc_32g.LIB库中的多个模块使用了XSMALL内存模型,可能与你的项目设置不匹配
未调用函数警告 (WARNING L57):
有很多函数被定义但从未调用,如LCD12864_DisplayClear、OLED12864_ScrollRight等
这些警告不会影响程序运行,只是提示有未使用的代码
数据类型不同警告 (WARNING L25):
printf_usb和memcpy、strlen等函数的数据类型定义不一致
未解析的外部符号错误 (ERROR L127和L128):
最严重的问题是缺少?vsprintf?BYTE符号,这导致编译失败
这个错误通常是因为缺少必要的库文件或库文件不兼容
我再看看实验指导书吧 再次感谢大佬的指点
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:256
  • 最近打卡:2025-08-11 00:05:12
已绑定手机

13

主题

202

回帖

1186

积分

金牌会员

积分
1186
发表于 3 天前 | 显示全部楼层
经过检查发现是开始设置那个MEmory Model错误了 导致内存不足 是个错误 其他都是警告 应该是定义的函数未调用导致的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-08-10 16:34:49

766

主题

1万

回帖

1万

积分

管理员

积分
18640
发表于 前天 11:56 | 显示全部楼层
推荐优先看的 printf_usb("Hello World !\r\n")及usb不停电下载, 演示视频链接
本坛转发时,要去掉中括号后的第一个“-,就可以将视频帖到其他帖子中


上面是 小李 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成


上面是 小赵 演示:Ai8051U, printf_usb("Hello World !\r\n")及usb不停电下载@AiCube之图形化程序自动生成
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-11 04:34 , Processed in 0.122589 second(s), 71 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表