帮微信解封好友辅助验证证有没有风险?

LPC2131&KEIL4环境移植uCOS-II&V2.86版本&移植记录
&不知道大家有没有用过周立功移植的版本呢?那个版本是在ADS上面移植的,我上网下载了几个,发现都是无法跑起来的,我特别奇怪,周立功版本的系统时钟函数里面居然没有
&本人有一堆LPC2131的芯片,不用怪可惜,但是ADS环境的uCOS-II
V2.52,用起来实在是受不了(开发环境太旧了)。于是就在KEIL4环境里面移植了比较稳定的uCOS-II
V2.86版本,方便以后使用这个芯片。于是就有了下面的记录,主要是记录的移植时候遇到的错误,问题。为以后移植积累经验。移植后运行了一段时间,没有问题。
LPC2131是ARM7系列的芯片,有7个模式:系统模式,用户模式,管理模式,中止模式,未定义模式,中断模式和快速中断模式。移植uCOS-II的时候,需要在系统模式,用户模式,管理模式之间进行切换。管理模式(SVC)在参考资料中称为SWI,通过定义SWI的函数(如:__swi(0x01) void
sOSStartHighRdy(void);),就可以进行系统调用,进行各种特权的操作(如:调度任务,更改工作模式,开关CPU的中断...)。
移植时,需要实现的主要的几个函数:
任务堆栈结构的函数
OS_STK *OSTaskStkInit (void (*task)(void *p_arg),
void *p_arg, OS_STK *ptos, INT16U opt)
__swi(0x02) void
OS_ENTER_CRITICAL(void);
__swi(0x03) void
OS_EXIT_CRITICAL(void);
任务级的调度函数
__swi(0x00) void sOSTaskSw(void);
中断级的调度函数
OSIntCtxSw()
下面详细记录移植各个函数时遇到的问题。
任务堆栈结构的函数
*OSTaskStkInit (void (*task)(void *p_arg), void *p_arg, OS_STK
*ptos, INT16U opt)
(void)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
*(stk)&& =
(OS_STK)&&&&&&&&&&&&
&&&&&&&&&&&&&&&
*(--stk)& =
(OS_STK)&&&&&&&&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)p_&&&&&&&&&&&&&&&&&&
*(--stk)& =
(OS_STK)Mode_USR;&&&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0x5A5A5A5AL;&&&&&&&&&&&&&&&&&&&&&&&&&&&
return (stk);
这个函数用于初始化任务的堆栈信息,以后任务切换,就是按照这个顺序来保存寄存器的值和一些变量的值。如果有需要,可以修改这个顺序,当然任务切换的函数也要跟着修改。
(OS_STK)&&&&&&&&&&&&
&&&&&&&&&&&&&&&
*(--stk)& =
(OS_STK)&&&&&&&&&&&&&&&&&&&
这两个位置用于保存任务的PC,LR寄存器。初始化时,都是设置为task函数的入口指针,其实LR是可以随便设置的,因为一般程序正常运行时不需要用到这个LR值的,它只是为后面的LR值提供保存的空间
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
这几个寄存器也是可以随便设置的,因为任务还没有运行起来,所以寄存器的值是什么对任务一点影响都没有,这么设置仅仅是为了调试方便。
*(--stk)& =
(OS_STK)p_&&&&&&&&&&&&&&&&&&
初始化时是用于将函数传递进来的参数,放在R0的位置上。此后,这个位置将用于保存R0寄存器值。
*(--stk)& =
(OS_STK)Mode_USR;&&&&&&&&&&&&&&
初始化时,将执行任务的模式(SPSR状态寄存器)设置为用户模式,使能中断和快速中断。此后将用于保存执行任务时候的工作模式和状态位(即SPSR状态寄存器的值,包括工作模式,是否使能中断和快速中断,运算标志位等等)。
*(--stk)& =
(OS_STK)0xL;&&&&&&&&&&&&
这个位置主要用于记录关闭中断的次数OSCloseIntCnt(初始化为0)。当大于0时,中断被关闭,不能产生中断;当等于0时,中断被打开,能够响应中断。
*(--stk)& =
(OS_STK)0x5A5A5A5AL;&&&&&&&&&&&&&&&&&&&&&&&&&&&
是为了保证出入栈的数量为偶数(网上人说出入栈必须是偶数个寄存器,至于为什么,不得而知,就调试来看,奇数偶数出入栈都是正常的)而加上去的,没有其他作用。
出现的问题:
这部分的调试没有出什么问题,主要是一开始不知道出入栈都要求偶数这个信息。
定义声明:
__swi(0x02) void
OS_ENTER_CRITICAL(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//括号里面的是SWI号:0x02
__swi(0x03) void
OS_EXIT_CRITICAL(void);&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
//括号里面的是SWI号:0x03
函数实现:
&&&&&&&&&&
case 0x02:
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#IRQ_BIT&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SPSR_c, tmp&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
OSCloseIntCnt++;
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
0x03:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// Open interrupt
&&&&&&&&&&&&&&&&&&&
if( --OSCloseIntCnt == 0 )
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
tmp, tmp, #IRQ_BIT&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
SPSR_c, tmp
&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
调用两个函数的时候,都是可以触发SWI异常,并且带入SWI号(可以查看ARM7架构的datasheet,它会告诉你怎么通过汇编,把那个SWI号找出来)。遇到了SWI异常,接下来的需要执行的操作都放在同一个函数里(使用switch语句区分SWI号,而进行不同的操作),而在我这里的是void SWI_Exception( int SWI_Num, int *Regs
)函数。用于开关中断的两个函数,通过SWI异常,将各自的SWI号带入到SWI异常处理函数中。
关中断时,先读出SPSR寄存器(其实就是用户模式下的CPSR),进行或运算后,回写到SPSR寄存器,就可以实现关闭中断。最后,OSCloseIntCnt自加1,记录中断的关闭次数。
开中断时,先OSCloseIntCnt自减1,判断是否为0。如果为0,则将中断打开;否则,不执行其他操作。
出现的问题:
此处单单是函数的实现,没有出现任何的问题。但是由于这种通过使用OSCloseIntCnt记录关闭中断次数的机制,导致在中断级的任务调度情况下,出现的了问题。问题如下:
void& OSIntExit (void)
#if OS_CRITICAL_METHOD ==
3&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
OS_CPU_SR& cpu_sr = 0;
(OSRunning == OS_TRUE) {
OS_ENTER_CRITICAL();
if (OSIntNesting & 0)
{&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&
OSIntNesting--;
if (OSIntNesting == 0)
{&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&
if (OSLockNesting == 0)
{&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
OS_SchedNew();
&&&&&&&&&&&&&&&
if (OSPrioHighRdy != OSPrioCur)
{&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
OSTCBHighRdy& =
OSTCBPrioTbl[OSPrioHighRdy];
#if OS_TASK_PROFILE_EN &
&&&&&&&&&&&&&&&&&&&
OSTCBHighRdy-&OSTCBCtxSwCtr++;&&&&&&&&
&&&&&&&&&&&&&&&&&&&
OSCtxSwCtr++;&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
OSIntCtxSw();&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&
OS_EXIT_CRITICAL();
这个函数来自uCOS-II的OS_CORE.C文件中。这个函数主要是退出中断之前执行的,主要的作用是查看是否有新的优先级更高的任务被启动了,如果有,则进行一次调度。此处的调度就属于中断级的任务调度,现场保护的操作跟任务级的调度有一定差别。此处需要注意的地方有两个:
必需通过调试的方法,确定执行到OSIntCtxSw()函数时,堆栈空间的情况(压入了多少寄存器的数据,寄存器数据的顺序怎么样),只有知道这些数据的情况才能进行正确的现场保护。
必需知道,如果执行了OSIntCtxSw()函数,就不会再返回了,也不会执行OSIntCtxSw()函数下面的OS_EXIT_CRITICAL()函数了。但是OSIntCtxSw()函数前面已经执行了OS_ENTER_CRITICAL()函数,由于开关中断的操作没有成对出现,又因为有OSCloseIntCnt记录关中断的机制,导致OSCloseIntCnt计数器无缘无故的多加了1,而又没有多执行一次OS_EXIT_CRITICAL()去清除它。于是直接的后果是:中断被关闭,用于系统的时钟中断也无法产生,系统的心跳也就停止了(OSTimeTick()操作停止),此时,一旦被调度到空闲任务,以后就无法再调度了。解决方法很简单(发现不容易啊~),只需要在中断级的调度函数中,执行OSCloseIntCnt减1操作后再保存即可。
任务级的调度函数&&&
(SWI与SVC都是类似的东西,只是名字不同,现在都使用SVC而不用SWI)
__swi(0x00) void sOSTaskSw(void);
该函数的汇编执行流程如下:
在SVC异常模式下,在SVC异常的堆栈中压入了{R0-R3, R12, LR};
接着进行现场保护:先将SVC异常堆栈下的R12,LR(此处的LR其实就是SVC异常之前的任务断点,PC寄存器的值)保存到R12,R2中;然后切换到系统模式,将LR寄存器(系统模式下的LR才是任务的真正的LR)赋给R1,并把R1-R2,R5-R12分别压入任务的堆栈;接着回到原来的SVC模式,把那些先前压入的R0-R3弹出,并清洗堆栈;然后又切换到系统模式,将刚才弹出的R0-R3,连同R4,SPSR,OSCloseIntCnt等压入堆栈中(需要压入什么信息,可以参考OSTaskStkInit函数)。到此现场保护完成。
接下来是切换到其他任务,恢复任务先前的现场:先将那些OSTCBCur,OSPrioCur等变量修改过来;接着获得任务的堆栈SP,先弹出那些OSCloseIntCnt,SPSR等数据,然后将数据写到OSCloseIntCnt,SPSR里面;最后,将剩余的{R1-R12, LR, PC}出栈即可。
出现的问题:
写该部分的代码需要非常清楚CPU的行为,包括堆栈,工作模式,寄存器等等。注意你当前的工作模式是什么,在这个模式下,可以看到的寄存器LR,SP等究竟意味着什么。保护现场的顺序应该怎么去安排。恢复现场的顺序应该怎么去安排。考虑好上面的问题,然后结合调试手断,一步步观察CPU的情况,务必对每一步的操作的清清楚楚。
中断级的调度函数
OSIntCtxSw()
该函数没有使用SVC异常的方式去实现。因为执行此函数的时候,一定是在中断模式下,在这个模式下已经可以进行很多特权操作,无需再使用SVC异常来实现。该函数的执行流程如下:
void __irq
TIMER0_Exception(void)
OSIntEnter();
if( IO1PIN &
GPIO_Clr( 1&&20 );
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
GPIO_Set( 1&&20 );
T0IR = 0x01;
VICVectAddr = 0;
OSIntNesting++;
OSTimeTick();
OSIntExit();&&&&&&
在中断模式下,OSIntCtxSw()函数只可能在OSIntExit()函数中调用,如果在中断处理的过程中,有新的优先级更高的任务就绪,那么就会执行OSIntExit()函数中的OSIntCtxSw()函数。在进入中断服务的时候,已经压入{R0-R3,R12,LR}.
在中断模式下,进行中断前任务的现场保护(此处一定要注意在执行OSIntCtxSw()函数请,究竟堆栈里面压了什么东西进去,方便后面将数据抽取出来)。操作基本与上面任务级的调度函数系统,不同的是工作模式,堆栈指针也不一样,R0-R3,R12,LR压入堆栈的位置不一样(注意可能还有其他寄存器被压入了)。按照OSTaskStkInit函数里面的顺序依次压入就是了。
接下来是切换到其他任务,恢复任务先前的现场:与上面任务级的调度函数一样(略)。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。后使用快捷导航没有帐号?
来自ValentinRuhry的创意,这哥们用整整500
请问各位大神以下的Keil编译错误是不是代码超过2KB了??请问该怎么解决呢?
*** FATAL ERROR L250: CODE SIZE LIMIT IN RESTRICTED VERSION EXCEEDED
& & MODULE:&&F:\安装的软件\KEIL 4\C51\LIB\C51S.LIB (-----)
& & LIMIT:& &0800H BYTES
打开注册机& &在CID栏填你找到的那个CID& && &用keil编51 target就选C51,(里面还有ARM。。。)& &点generate& & 就在最下面那个框里生成了一串license id code& & 把它复制到 点fiel& &点license mana~~的new license id code里面去& &&&点add lic
dongshao_87 发表于
打开注册机& &在CID栏填你找到的那个CID& && &用keil编51 target就选C51,(里面还有ARM。。。)& &点gener ...
谢谢了!一开始破解的有点问题,又重新破解了一下!
应该哦不是代码超过2K,我基本都写3.5——4K
Copyright &
Powered byKEIL MDK下uCOS-II的移植_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
KEIL MDK下uCOS-II的移植
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢查看: 3313|回复: 13
stm32用keil4编译时出现的错误,求大神帮忙
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
Rebuild target 'stm32-dem0'
assembling startup_stm32f10x_hd.s...
compiling main.c...
E:\学习软件\MDK\ARM\Inc\ST\STM32F10x\stm32f10x.h(8297): error: &#5: cannot open source input file "stm32f10x_conf.h": No such file or directory
compiling stm32f10x_it.c...
E:\学习软件\MDK\ARM\Inc\ST\STM32F10x\stm32f10x.h(8297): error: &#5: cannot open source input file "stm32f10x_conf.h": No such file or directory
compiling misc.c...
..\FWlib\src\misc.c(24): error: &#5: cannot open source input file "misc.h": No such file or directory
compiling stm32f10x_adc.c...
..\FWlib\src\stm32f10x_adc.c(23): error: &#5: cannot open source input file "stm32f10x_adc.h": No such file or directory
compiling stm32f10x_bkp.c...
..\FWlib\src\stm32f10x_bkp.c(23): error: &#5: cannot open source input file "stm32f10x_bkp.h": No such file or directory
compiling stm32f10x_can.c...
..\FWlib\src\stm32f10x_can.c(23): error: &#5: cannot open source input file "stm32f10x_can.h": No such file or directory
compiling stm32f10x_cec.c...
..\FWlib\src\stm32f10x_cec.c(23): error: &#5: cannot open source input file "stm32f10x_cec.h": No such file or directory
compiling stm32f10x_crc.c...
..\FWlib\src\stm32f10x_crc.c(23): error: &#5: cannot open source input file "stm32f10x_crc.h": No such file or directory
compiling stm32f10x_dac.c...
..\FWlib\src\stm32f10x_dac.c(23): error: &#5: cannot open source input file "stm32f10x_dac.h": No such file or directory
compiling stm32f10x_dbgmcu.c...
..\FWlib\src\stm32f10x_dbgmcu.c(23): error: &#5: cannot open source input file "stm32f10x_dbgmcu.h": No such file or directory
compiling stm32f10x_dma.c...
..\FWlib\src\stm32f10x_dma.c(23): error: &#5: cannot open source input file "stm32f10x_dma.h": No such file or directory
compiling stm32f10x_exti.c...
..\FWlib\src\stm32f10x_exti.c(23): error: &#5: cannot open source input file "stm32f10x_exti.h": No such file or directory
compiling stm32f10x_flash.c...
..\FWlib\src\stm32f10x_flash.c(23): error: &#5: cannot open source input file "stm32f10x_flash.h": No such file or directory
compiling stm32f10x_fsmc.c...
..\FWlib\src\stm32f10x_fsmc.c(23): error: &#5: cannot open source input file "stm32f10x_fsmc.h": No such file or directory
compiling stm32f10x_gpio.c...
..\FWlib\src\stm32f10x_gpio.c(23): error: &#5: cannot open source input file "stm32f10x_gpio.h": No such file or directory
compiling stm32f10x_i2c.c...
..\FWlib\src\stm32f10x_i2c.c(23): error: &#5: cannot open source input file "stm32f10x_i2c.h": No such file or directory
compiling stm32f10x_iwdg.c...
..\FWlib\src\stm32f10x_iwdg.c(23): error: &#5: cannot open source input file "stm32f10x_iwdg.h": No such file or directory
compiling stm32f10x_pwr.c...
..\FWlib\src\stm32f10x_pwr.c(23): error: &#5: cannot open source input file "stm32f10x_pwr.h": No such file or directory
compiling stm32f10x_rcc.c...
..\FWlib\src\stm32f10x_rcc.c(23): error: &#5: cannot open source input file "stm32f10x_rcc.h": No such file or directory
compiling stm32f10x_rtc.c...
..\FWlib\src\stm32f10x_rtc.c(23): error: &#5: cannot open source input file "stm32f10x_rtc.h": No such file or directory
compiling stm32f10x_sdio.c...
..\FWlib\src\stm32f10x_sdio.c(23): error: &#5: cannot open source input file "stm32f10x_sdio.h": No such file or directory
compiling stm32f10x_spi.c...
..\FWlib\src\stm32f10x_spi.c(23): error: &#5: cannot open source input file "stm32f10x_spi.h": No such file or directory
compiling stm32f10x_tim.c...
..\FWlib\src\stm32f10x_tim.c(23): error: &#5: cannot open source input file "stm32f10x_tim.h": No such file or directory
compiling stm32f10x_usart.c...
..\FWlib\src\stm32f10x_usart.c(23): error: &#5: cannot open source input file "stm32f10x_usart.h": No such file or directory
compiling stm32f10x_wwdg.c...
..\FWlib\src\stm32f10x_wwdg.c(23): error: &#5: cannot open source input file "stm32f10x_wwdg.h": No such file or directory
compiling core_cm3.c...
compiling system_stm32f10x.c...
..\CMSIS\stm32f10x.h(8297): error: &#5: cannot open source input file "stm32f10x_conf.h": No such file or directory
Target not created
我也遇到了
c/c++&d的路径没加
主题帖子精华
金牌会员, 积分 1194, 距离下一级还需 1806 积分
在线时间146 小时
我也遇到了
c/c++&d的路径没加
主题帖子精华
在线时间664 小时
全部是头文件的错误,应该是头文件路径没添加
开往春天的手扶拖拉机
主题帖子精华
初级会员, 积分 173, 距离下一级还需 27 积分
在线时间0 小时
应该头文件路径没加吧?
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
a3e4a8dc42dbc44f13cad3d4ea922b33_340.png (0 Bytes, 下载次数: 0)
22:54 上传
应该添加了的,这是截图?
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【2楼】zuozhongkai:
---------------------------------
谢了啊,应该添加了的?这是截图
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【3楼】破隆冬之晓:
---------------------------------
谢谢了,头文件也添加了的?你看下截图
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【5楼】xingdongzhe583:
---------------------------------
回复【2楼】zuozhongkai:
---------------------------------
这是FWlib里添加的头文件
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【2楼】zuozhongkai:
---------------------------------
这是FWlib里添加的头文件
主题帖子精华
新手上路, 积分 34, 距离下一级还需 16 积分
在线时间0 小时
回复【8楼】xingdongzhe583:
---------------------------------
编译的路径添加了吗
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【9楼】caisx8411:
---------------------------------
是的。问题解决了,谢谢啊
主题帖子精华
中级会员, 积分 272, 距离下一级还需 228 积分
在线时间32 小时
回复【10楼】止天:
---------------------------------
嗯嗯解决了,谢谢你了
主题帖子精华
新手上路, 积分 30, 距离下一级还需 20 积分
在线时间0 小时
我文件也添加了,路径也加了,宏定义也加了,可是还是提示打不开所有的.h
我对比了实验程序设置,也没有发现什么问题
2776dfa6ef966ff.png (0 Bytes, 下载次数: 0)
22:54 上传
78b2d8baff8e9a20b154_625.png (0 Bytes, 下载次数: 0)
22:54 上传
主题帖子精华
新手上路, 积分 7, 距离下一级还需 43 积分
在线时间0 小时
我文件也添加了,路径也加了,宏定义也加了,可是还是提示打不开所有的.h
我对比了实验程序设置 ...
楼主,你问题解决了吗,我也有同样的问题
Powered by

我要回帖

更多关于 微信辅助验证风险 的文章

 

随机推荐