找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 944|回复: 1
打印 上一主题 下一主题
收起左侧

模块化使用sdcc编译51单片机时报错

[复制链接]
跳转到指定楼层
楼主


问题是这样的,我在学习51单片机的时候看到老师讲了模块化,所以自己写了一个,然后结构图在上面

  1. #include <8052.h>
  2. #include "../Sleep.h"
  3. #include "../nixie.h"



  4. void main() {
  5.     // P2_4=0;
  6.     // P2_3=0;
  7.     // P2_2=1;
  8.     P2 = 0x00;
  9.    

  10.     while (1) {

  11.         Nixie(1, 4);

  12.         Nixie(2, 6);

  13.         // Sleep(3);
  14.         // P2_2 = 0;

  15.     }


  16. }
复制代码
在写完这个代码之后使用sdcc main.c发出警告
  1. qin@QindeMacBook-Pro 08 动态数码管显示 % sdcc main.c                                          

  2. ?ASlink-Warning-Undefined Global '_Nixie' referenced by module 'main'

  3. ?ASlink-Warning-Undefined Global '_Nixie_PARM_2' referenced by module 'main'
复制代码

但还是可以生成文件的,然后使用stcgal -P stc89 -p /dev/tty.wchusbserial11140 main.ihx
编译后,未能实现正常效果

以下为用到的文件
nixie.c
  1. #include "nixie.h"
  2. #include <8052.h>

  3. char num[18] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00};


  4. void Nixie(unsigned char weizhi, unsigned char number) {

  5.     switch (weizhi)
  6.     {
  7.         case 1:
  8.             P2_4=1;P2_3=1;P2_2=1;
  9.             break;
  10.         case 2:
  11.             P2_4=1;P2_3=1;P2_2=0;
  12.             break;
  13.         case 3:
  14.             P2_4=1;P2_3=0;P2_2=1;
  15.             break;
  16.         case 4:
  17.             P2_4=1;P2_3=0;P2_2=0;
  18.             break;
  19.         case 5:
  20.             P2_4=0;P2_3=1;P2_2=1;
  21.             break;
  22.         case 6:
  23.             P2_4=0;P2_3=1;P2_2=0;
  24.             break;
  25.         case 7:
  26.             P2_4=0;P2_3=0;P2_2=1;
  27.             break;
  28.         case 8:
  29.             P2_4=0;P2_3=0;P2_2=0;
  30.             break;
  31.         default:
  32.             break;
  33.     }
  34.    
  35.     switch (number)
  36.     {
  37.     case 0:
  38.         P0=num[0];
  39.         break;
  40.     case 1:
  41.         P0=num[1];
  42.         break;
  43.     case 2:
  44.         P0=num[2];
  45.         break;
  46.     case 3:
  47.         P0=num[3];
  48.         break;
  49.     case 4:
  50.         P0=num[4];
  51.         break;
  52.     case 5:
  53.         P0=num[5];
  54.         break;
  55.     case 6:
  56.         P0=num[6];
  57.         break;
  58.     case 7:
  59.         P0=num[7];
  60.         break;
  61.     case 8:
  62.         P0=num[8];
  63.         break;
  64.     case 9:
  65.         P0=num[9];
  66.         break;
  67.     case 'A':
  68.         P0=num[10];
  69.         break;
  70.     case 'B':
  71.         P0=num[11];
  72.         break;
  73.     case 'C':
  74.         P0=num[12];
  75.         break;
  76.     case 'D':
  77.         P0=num[13];
  78.         break;
  79.     case 'E':
  80.         P0=num[14];
  81.         break;
  82.     case 'F':
  83.         P0=num[15];
  84.     case ' ':
  85.         P0=num[16];
  86.     default:
  87.         break;
  88.     }

  89.     Sleep(2);
  90.     P0 = 0x00;

  91. }
复制代码



nixie.h
  1. #ifndef __NIXIE_H__
  2. #define __NIXIE_H__

  3. void Nixie(unsigned char weizhi, unsigned char number);

  4. #endif
复制代码

Sleep.c
  1. void Sleep(unsigned int xms)
  2. {
  3.     unsigned char i, j;

  4.     while (xms)
  5.     {
  6.         i = 2;
  7.         j = 199;

  8.         do {
  9.             while (--j);
  10.         } while(--i);
  11.         xms--;
  12.     }

  13.     // _nop_();


  14. }


复制代码



Sleep.h
  1. #ifndef __SLEEP_H__
  2. #define __SLEEP_H_


  3. void Sleep(unsigned int xms);

  4. #endif
复制代码

系统是Macos,在这里请教一下各位大佬
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1087079 发表于 2023-7-3 19:59 | 只看该作者
用的是platformIo吗?看你这个项目结构是不是lib放错位置了,
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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