完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
刚上手ucosII 写了一个ucosII程序,程序进入了hard fault Hanlder死掉了,调试和排查后找到表象是一个全局数组导致系统进入异常,因为我注释掉这一句之后系统就正常运行,但是我调试的时候,程序执行顺利走过这一句代码,到整个调用函数完毕才死掉,很奇怪。而且我也检查了数组指针并没有溢出。求大神帮忙分析。
异常代码处:buf = high_byte<<16 | mid_byte<<8 | low_byte;(Read_A_Conversion()函数中) 整个系统大概框架是: 任务: void Task_Cs5524Run(void *p_arg) { // OS_CPU_SR cpu_sr; while(1) { // OS_ENTER_CRItiCAL(); Read_CS5524(); // OS_EXIT_CRITICAL(); if(D_value[0]!=0){ LedRun_Inversion(); } else LedErr_Inversion(); OSTimeDlyHMSM(0,0,0,100); } } Read_CS5524函数部分: void Read_CS5524(void) { Read_A_Conversion(0x88,4,c***uf);//8setup // Delay_Ms(2); AI_Process(); AI_Filter(); Whatwrong(); } Read_AConversion函数: void Read_A_Conversion(char command, char channel, unsigned int *buf) { unsigned char i = 0; static unsigned char high_byte = 0, mid_byte = 0, low_byte = 0; /*start conversion*/ SPI1_CS_LOW; SPI_ReadWriteByte(command);//0xB8-µ¥ÖÜÆÚ8setup do{ }while(GPIO_ReadInputDataBit(GPIOX_SPI1, GPIO_SPI1_MISO) != 0);//µÈ´ýת»»½áÊø SPI_ReadWriteByte(0xff); for(i=0; i high_byte = SPI_ReadWriteByte(0x00); mid_byte = SPI_ReadWriteByte(0x00); low_byte = SPI_ReadWriteByte(0x00); // Recbuf= high_byte<<16 | mid_byte<<8 | low_byte; buf = high_byte<<16 | mid_byte<<8 | low_byte; } SPI1_CS_HIGH; } 最后是buf指针所指向的是一个全局的unsigned int 数组: unsigned int c***uf[20]={0}; 当我用Recbuf替换掉buf时系统正常运行。Recbuf也是一个全局得得unsigned int 数组: unsigned int Recbuf[8]; 有没有ucos大神出来帮忙分析分析啊! |
|
相关推荐
1个回答
|
|
争取能结贴啊!大神们快来!
|
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1089浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
456浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 16:30 , Processed in 1.335806 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号