为了账号安全,请及时绑定邮箱和手机立即绑定

sizeof(Buf)这个是指数组buf[]的大小还是指 指针buf所指向数组的第一个数的大小?

sizeof(Buf)这个是指数组buf[]的大小还是指 指针buf所指向数组的第一个数的大小?

慕婉清6462132 2022-10-01 14:10:57
#if OS_MAX_TASKS<9 //把当前任务加入到此消息队//列的等待任务表中Buf[3]=OSMapTbl[OSRunnmgTasklD()]; (5)#elseif(OSRunningTasklD()<8){ (6)Buf[3]=OSMap Tbl[OSRunningTasklD()]; (7)else{Buf[4] |= OSMapTbl[OSRunningTasklD( ) &()x07]; (8)}#endifwhile(Buf[O]==0) //消息队列中暂时投有消息 (9){#ifdef_C51_SP=SP+sizeof(Buf)。 (10)*((uint8 0S_Q_MEM_SEL * data*)(SP+l-slzeof(Buf))=Buf; (11)#endif{OSClearSignal(OSRunningTask()); //当前任务进入休眠//状态 (12)OSSched(); //调度下一个最高优先级的就绪任务运行(13)#ifdef_C51_Buf= *((uint8 OS_Q_MEM SEL*dota*)(SP+1-sizeof(Buf)); (14)SP=SP-sizeof(Buf); (15)#endifif(OSWaitTick[OSRunningTasklD()]==O)(16){break; //任务再次运行,如果超时到,退出循环}} //while(Buf[0]==O)第(10)(11)(14)(15)语句不是很理解,堆栈指针sp是如何变化的?(uint8 0S_Q_MEM_SEL * data*)是什么意思?
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

第10句是在栈中分配临时变量,第11句是在指针强转,给分配的变量赋值,第14句从变量是读取数据,第15句还原栈指针.
sizeof(Buf)的值,要看Buf是怎么定义的,如果是定义的一个指针,那sizeof(Buf)就等于4(32位机)或2(8位机),如果定义的是数组,就是数组大小.
其实,如果你写过windows程序,就应该知道,VC的程序在进函数的时候一般都是下面的样子:

push EBP
mov EBP, ESP
add ESP xxx
和你贴的程序是一个意思

查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信