驱动是惹不起的,特别是一个对于我这种糟糕的程序员。
两次了。 提醒你注意switch后每一个case都跟上break, 上传前请仔细检查,拜托。特别对于只能使用printk来定位的情况下,你让我感觉糟糕极了。下午两小时都在被break了。
心得,段错误最大的可能就是访问了非法内存。检查一下拷贝时的长度,检查一下是否分配空间。 驱动这东西,你惹它一点点不高兴,它就会罢工。段错误最先怀疑你刚刚改过的驱动。最后你又一次使用了,屏蔽所有修改的版本还原法。这个不好,太低级。
还记得,上个礼拜写的floattostring函数:
void floattostring(float _f, char * buffer)
{
//assert(buffer);
if(_f == 0.0f)
{
strcpy(buffer,"0.0");
return;
}
int decimals,sign;
std::string _buffer = _fcvt(_f,1,&decimals,&sign);
if (_buffer.length() == 0)
{
strcpy(buffer,"0.0");
return;
}
if(decimals > 0)
_buffer.insert(decimals,".");
else if(decimals < 0)
while(decimals < 0)
{
_buffer.insert(0,"0");
decimals++;
}
if (decimals == 0)
_buffer.insert(0,"0.");
if(sign)
_buffer.insert(0,"-");
strcpy(buffer,_buffer.c_str());
//return (const char*)buffer;
}
这种解决方法很不容易懂吧,建议你下一次思维简单一点吧。 用这个
sprintf(bufffer, "%f", float_num);