Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Arduino翻译成ChibiOS_Arduino_Atmega_Chibios - Fatal编程技术网

将Arduino翻译成ChibiOS

将Arduino翻译成ChibiOS,arduino,atmega,chibios,Arduino,Atmega,Chibios,我正在尝试为ChibiOS实现“单线”,运行在atmega1280(Arduino板)上。我主要是复制/粘贴arduino实现(工作正常): uint8\u t OneWire::重置(无效) { IO_REG_类型掩码=位掩码; 易失性IO_REG_TYPE*REG IO_REG_ASM=baseReg; uint8_t r; uint8_t重试次数=125次; 无中断(); 直接_模式_输入(寄存器、掩码); 中断(); //等到电线高了…以防万一 做{ 如果(--retries==0),则

我正在尝试为ChibiOS实现“单线”,运行在atmega1280(Arduino板)上。我主要是复制/粘贴arduino实现(工作正常):

uint8\u t OneWire::重置(无效)
{
IO_REG_类型掩码=位掩码;
易失性IO_REG_TYPE*REG IO_REG_ASM=baseReg;
uint8_t r;
uint8_t重试次数=125次;
无中断();
直接_模式_输入(寄存器、掩码);
中断();
//等到电线高了…以防万一
做{
如果(--retries==0),则返回0;
延迟微秒(2);
}而(!直接读取(寄存器,掩码));
无中断();
直接写入低电平(寄存器、掩码);
直接_模式_输出(寄存器,掩码);//驱动器输出低
中断();
延迟微秒(480);
无中断();
直接模式输入(reg,掩码);//允许它浮动
延迟微秒(70);
r=!直接读取(寄存器、掩码);
中断();
延迟微秒(410);
返回r;
}
我为“重置”功能的ChibiOS实现编写了以下内容:

uint8\u t OneWire::重置(无效)
{
palSetPadMode((ioportid_t)IOPORT2,3,PAL_模式输入);
//等电线高了再说。
uint8_t重试次数=125次;
做{
如果(--retries==0){
返回0;
}
chthd睡眠微秒(2);
}而(palReadPad(IOPORT2,3)=PAL_低);
palSetPadMode((ioportid)IOPORT2,3,PAL模式输出推拉);
palWritePad(IOPORT2,3,PAL_低);//驱动器输出低
chthd微秒(480);
palSetPadMode((ioportid_t)IOPORT2,3,PAL_模式输入);
chthd微秒(70);
uint8_t result=(palReadPad(IOPORT2,3)=PAL_LOW);
chthd微秒(410);
返回结果;
}

我做错了什么?

你期望得到什么?结果是什么?在ChibiOS作者(论坛上)的帮助下,我找到了问题所在。问题是chthdsleepmiconds无法实现微秒延迟。它被四舍五入到最近的时钟滴答声,在我的例子中,是1kHz,因此是一毫秒。需要使用忙循环或高精度计时器来实现微秒延迟。