我試圖做一個arduino UNO和C程序之間的通信的小實驗。從/ dev/ttyACM0讀取時出現分段錯誤
首先是arduino角色: 我的arduino設置爲每2秒從光敏電阻讀取一個模擬值,然後將值寫入串口(我係統上的/ dev/ttyACM0)。
這裏的Arduino的草圖:
/*
This program will read analog data from a photo resistor and
will write it to the serial port.
*/
#define LIGHTPIN 0
#define DELAY 2000
void setup()
{
Serial.begin(9600);
Serial.flush();
}
void loop()
{
int lightvalue = 0;
lightvalue = map(analogRead(LIGHTPIN), 0, 1023, 1, 100);
Serial.println(lightvalue);
delay(DELAY);
}
Arduino的的素描作品的罰款;它會並行讀取數據並將其寫入串行端口。我可以通過串口監視器查看它們。
然後是C程序。 程序應該訪問/ dev/ttyACM0並讀取數據。它將數據存儲在變量中並打印出來。我在ArchLinux系統上,以便訪問我想將/ dev/ttyACM0作爲文件打開的端口。這裏是代碼:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdbool.h>
#include <stdint.h>
#define DELAY 2
int main(int argc, char *argv[])
{
FILE *serialport = NULL;
uint8_t lightval = 0;
uint8_t lastval = 0;
if (argc < 2) {
fprintf(stderr, "Too few arguments.\n");
exit(EXIT_FAILURE);
}
if (!(serialport = fopen(argv[1], "r"))) {
fprintf(stderr, "Couldn' t open serial port for communication.\n");
exit(EXIT_FAILURE);
}
while (true) {
fscanf(serialport, "%u", &lightval);
if (lightval != lastval) {
printf("%u\n", lightval);
lastval = lightval;
}
while (getc(serialport) != '\n')
continue;
sleep(DELAY);
}
fclose(serialport);
}
問題出現在這裏。當我運行測試時,它會讀取並打印第一個值 ,但在讀取第二個值時會出現分段錯誤。
我實際上不能理解我做錯了什麼。這可能很愚蠢,但似乎我無法把握。
所以我的問題是:我的測試有什麼問題?
在此先感謝誰幫我
謝謝您的幫助!我不知道核心轉儲和-Wall -Werror,這真的很有用。最後,它解決了這個問題,所以你也是這樣。 – Animamorta 2012-03-02 16:21:12