找回密码
 立即注册
查看: 235|回复: 7

关于冒泡例程咨询

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:47
  • 最近打卡:2025-04-10 06:42:19

19

主题

39

回帖

373

积分

中级会员

积分
373
发表于 2024-12-20 09:30:40 | 显示全部楼层 |阅读模式

关于冒泡例程咨询

疑问

程序里加入#ifdef BUBBLE_SORT什么意思

我想引用这两个子程序,不加#ifdef BUBBLE_SORT,编译就报错,我没看出他什么作用,请高手指教

#ifdef BUBBLE_SORT //使用冒泡排序
//========================================================================
// 函数: void DataSwap(u16* data1, u16* data2)
// 描述: 数据交换函数。
// 参数: data1,data2 要交换的数据.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-9-27
// 备注:
//========================================================================
void DataSwap(u16* data1, u16* data2)
{
u16 temp;
temp = *data1;
*data1 = *data2;
*data2 = temp;
}

//========================================================================
// 函数: void BubbleSort(u16* pDataArry, u8 DataNum)
// 描述: 冒泡排序函数。
// 参数: pDataArry需要排序的数组,DataNum需要排序的数据个数.
// 返回: none.
// 版本: VER1.0
// 日期: 2021-9-27
// 备注:
//========================================================================
void BubbleSort(u16* pDataArry, u8 DataNum)
{
bit flag;
u8 i,j;
for(i=0;i<DataNum-1;i++)
{
flag = 0;
for(j=0;j<DataNum-i-1;j++)
{
if(pDataArry[j] > pDataArry[j+1])
{
flag = 1;
DataSwap(&pDataArry[j], &pDataArry[j+1]);
}
}
if(!flag) //上一轮比较中不存在数据交换,则退出排序
{
break;
}
}
}
//#endif

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-09 09:00:33
已绑定手机

77

主题

4879

回帖

8510

积分

超级版主

DebugLab

积分
8510
发表于 2024-12-20 10:32:34 | 显示全部楼层
#ifdef和#endif要成对使用
报什么错
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:47
  • 最近打卡:2025-04-10 06:42:19

19

主题

39

回帖

373

积分

中级会员

积分
373
发表于 2024-12-20 10:43:34 | 显示全部楼层
Debu*** 发表于 2024-12-20 10:32
#ifdef和#endif要成对使用
报什么错

linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_BUBBLESORT?MAIN
*** ERROR L107: ADDRESS SPACE OVERFLOW
    SPACE:   DATA   
    SEGMENT: ?DT?_BUBBLESORT?MAIN
    LENGTH:  0006H
Program Size: data=131.4 xdata=0 code=6402

点评

data过大,大数组改xdata  详情 回复 发表于 2024-12-20 11:14
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:431
  • 最近打卡:2025-05-09 09:00:33
已绑定手机

77

主题

4879

回帖

8510

积分

超级版主

DebugLab

积分
8510
发表于 2024-12-20 11:14:30 | 显示全部楼层
dong*** 发表于 2024-12-20 10:43
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_BUBBLE ...

data过大,大数组改xdata
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-05-09 08:19:05
已绑定手机

17

主题

446

回帖

1189

积分

金牌会员

积分
1189
发表于 2024-12-20 11:19:19 | 显示全部楼层
#ifdef BUBBLE_SORT //使用冒泡排序
如果定义了BUBBLE_SORT 就使用下面的代码,没有定义就不编译这部分代码,减少代码量,想要使用就定义这个宏BUBBLE_SORT

比如
#define BUBBLE_SORT
#ifdef BUBBLE_SORT
...
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:47
  • 最近打卡:2025-04-10 06:42:19

19

主题

39

回帖

373

积分

中级会员

积分
373
发表于 2024-12-22 15:38:40 | 显示全部楼层
Debu*** 发表于 2024-12-20 11:14
data过大,大数组改xdata

我用的STC8H1K28的RAM是256字节,这才用了131字节多点,难道编译器默认51系列单片机都是128,但加上#ifdef BUBBLE_SORT  .........#endif,编译就报错
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-05-09 08:55:07
已绑定手机

13

主题

1271

回帖

3031

积分

论坛元老

积分
3031
发表于 2024-12-22 17:08:04 | 显示全部楼层
dong*** 发表于 2024-12-22 15:38
我用的STC8H1K28的RAM是256字节,这才用了131字节多点,难道编译器默认51系列单片机都是128,但加上#ifdef ...
变量不声明类型,XSMALL模式下默认是DATA,256Byte是iDATA,DATA是128byte

堆栈还要使用DATA区的RAM,一般大一点的数组都放进XDATA中。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:47
  • 最近打卡:2025-04-10 06:42:19

19

主题

39

回帖

373

积分

中级会员

积分
373
发表于 2024-12-25 14:26:40 | 显示全部楼层
21cns*** 发表于 2024-12-22 17:08
变量不声明类型,XSMALL模式下默认是DATA,256Byte是iDATA,DATA是128byte

堆栈还要使用DATA区的RAM,一般 ...

256Byte是iDATA,怎么又出来个iDATA是什么
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 22:18 , Processed in 0.170468 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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