找回密码
 立即注册
查看: 1777|回复: 11

结构体中不允许定义bit 指针吗

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-02 07:18:02

11

主题

70

回帖

4002

积分

论坛元老

单片机编程魔法师

积分
4002
发表于 2023-3-14 08:28:04 | 显示全部楼层 |阅读模式
写一个链表准备管理散乱的引脚,   结构体中 bit *pin;   咋不支持啊,应该如何改正
STC官方的文档,也没找到关于对散乱的IO口进行统一管理的方法

如果用sfr 定义 ,也无法对其他引脚做映射啊.相对的指针也没办法引出. 愁死了

下面是DEMO 测试编译的,直接不通过



  1. #include <STC32G.H>
  2. //定义链表节点的结构体:
  3. //其中,bit *pin表示指向引脚的指针,struct node *next表示指向下一个节点的指针。
  4. typedef struct node {
  5.     bit *pin;             // 指向引脚的指针
  6.     struct node *next;    // 指向下一个节点的指针
  7. } Node;
  8. Node *head = NULL;
  9. void addNode(bit *pin) {
  10.     Node *newNode = (Node *) malloc(sizeof(Node));    // 分配新节点内存
  11.     newNode->pin = pin;    // 设置新节点的引脚指针
  12.     newNode->next = head;    // 将新节点的next指针指向当前的头节点
  13.     head = newNode;    // 将头指针指向新节点
  14. }
  15. void main() {
  16.     bit *pin1 = &P10;
  17.     bit *pin2 = &P41;
  18.     bit *pin3 = &P52;
  19.    
  20.     addNode(pin1);
  21.     addNode(pin2);
  22.     addNode(pin3);
  23.    
  24.     // 遍历链表并访问每个引脚
  25.     Node *currentNode = head;
  26.     while (currentNode != NULL) {
  27.         *(currentNode->pin) = 1;    // 将引脚设置为高电平
  28.         currentNode = currentNode->next;
  29.     }
  30. }
复制代码






喜欢研究如何让电子产品变得更加智能和有趣.
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:172
  • 最近打卡:2025-04-28 08:49:07
已绑定手机

90

主题

961

回帖

2318

积分

超级版主

积分
2318
QQ
发表于 2023-3-14 09:04:23 | 显示全部楼层
散乱的IO口进行统一管理的方法:
1.png
热线19952583534
www.STCAI.com
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-02 07:18:02

11

主题

70

回帖

4002

积分

论坛元老

单片机编程魔法师

积分
4002
发表于 2023-3-14 09:30:29 | 显示全部楼层
国学*** 发表于 2023-3-14 09:04
散乱的IO口进行统一管理的方法:

你发的这个图  不是简单的模式切换吗?  

我想实现的是  将不同地址IO口进行整合
变成一个类似于sfr P1 这样的寄存器
比如
P46 P47 P30 P31 P32 P33 P34 P35
由于这些引脚寄存器的地址有一部分不是连续性的,
无法使用 官方头文件中sfr 直接使用


我才想到使用结构体,或者链表的思路
在实践整合过程中,我发现bit指针直接会报错


喜欢研究如何让电子产品变得更加智能和有趣.
  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-3-14 09:34:23 | 显示全部楼层
bit是C51/C251编译器的一种扩充数据类型,利用它可定义一个位变量,但不能定义位指针,也不能定义位数组。
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-02 07:18:02

11

主题

70

回帖

4002

积分

论坛元老

单片机编程魔法师

积分
4002
发表于 2023-3-14 09:42:29 | 显示全部楼层
乘风*** 发表于 2023-3-14 09:34
bit是C51/C251编译器的一种扩充数据类型,利用它可定义一个位变量,但不能定义位指针,也不能定义位数组。 ...

原来如此,又学到了.
喜欢研究如何让电子产品变得更加智能和有趣.
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2023-3-14 11:10:13 | 显示全部楼层
这个问题的本质是在8051和80251的指令中,BIT指令只有“直接寻址模式”(就是BIT地址直接写在机器码中),没有“间接寻址模式”(BIT地址在寄存器中,比如R0中)可以用@R0这种指令来实现动态指针寻址。未来采用80251扩展指令集的STC32系列单片机,由于地址空间足够,会通过位带的方式将BIT映射到存储空间,那时专门支持STC单片机的编译器就会支持BIT指针,实现楼主希望的BIT变量指针数组
  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-3-14 11:45:43 | 显示全部楼层
这个 STC32的强大的位寻址,有无限的想象力啊
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-02 07:18:02

11

主题

70

回帖

4002

积分

论坛元老

单片机编程魔法师

积分
4002
发表于 2023-3-14 13:06:06 | 显示全部楼层
杨*** 发表于 2023-3-14 11:10
这个问题的本质是在8051和80251的指令中,BIT指令只有“直接寻址模式”(就是BIT地址直接写在机器码中), ...

到了那时,STC 的灵活性,扩展性.将踏入一个新的里程碑.
喜欢研究如何让电子产品变得更加智能和有趣.
  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-02 00:29:54

10

主题

1159

回帖

5121

积分

论坛元老

积分
5121
发表于 2023-3-14 16:12:11 | 显示全部楼层
t1*** 发表于 2023-3-14 09:30
你发的这个图  不是简单的模式切换吗?  

我想实现的是  将不同地址IO口进行整合

你可以用这样的程序。

  1. sbit code0=P4^6;                       //定义数据端口
  2. sbit code1=P4^7;
  3. sbit code2=P3^0;
  4. sbit code3=P3^1;
  5. sbit code4=P3^2;
  6. sbit code5=P3^3;
  7. sbit code6=P3^4;
  8. sbit code7=P3^5;      
  9. void PX(uchar i)                           //写入8位数据
  10. {   
  11.         code0=i&0x01;i>>=1;      
  12.         code1=i&0x01;i>>=1;
  13.         code2=i&0x01;i>>=1;
  14.         code3=i&0x01;i>>=1;
  15.         code4=i&0x01;i>>=1;
  16.         code5=i&0x01;i>>=1;
  17.         code6=i&0x01;i>>=1;
  18.         code7=i&0x01;
  19. }
  20. PX(Data);                //传递数据
复制代码
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-02 07:18:02

11

主题

70

回帖

4002

积分

论坛元老

单片机编程魔法师

积分
4002
发表于 2023-3-14 17:56:47 | 显示全部楼层
angm*** 发表于 2023-3-14 16:12
你可以用这样的程序。

:handshake受教了
喜欢研究如何让电子产品变得更加智能和有趣.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-2 22:18 , Processed in 0.123382 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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