コード例 #1
0
ファイル: buildElf.cpp プロジェクト: Grauniad/ELf64-Linker
BinaryWriter ElfFile::WriteDataSections( ElfContent& data)
{
    // First write
    BinaryWriter dataWritePos(dataSectionStart);
    dataWritePos.Offset() = offsets.EndOfMapped();

    for ( int i =0; i< header.Sections(); i++ ) {
        Section& sec = *(data.sections[i]);
        if (   sec.HasFileData()
        	&& !(sec.IsRelocTable() && sec.Address() ==0) )
        {
            if ( sec.IsNull() ) {
                sec.DataStart() = 0;
                SLOG_FROM (LOG_VERBOSE,
                           "ElfFile::WriteDataSections",
                           "Not Writing section (no data) : " << i)
            } else {
                if ( sec.Address() != 0 )
                {
                    sec.DataStart() = offsets.AddressToOffset(sec.Address());
                    BinaryWriter writePos(dataSectionStart);
                    writePos.Offset() = sec.DataStart();
                    sec.WriteRawData(writePos);
                    SLOG_FROM (LOG_VERBOSE,
                               "ElfFile::WriteDataSections",
                               "Writing section (at address ) : " << i)
                }
                else
                {
                    if ( sec.Alignment() != 0 )  {
コード例 #2
0
RobotControl::RobotControl():
		port("COM1"), is_time_synced(false),
		is_recording(false), posTimer(this), moveTimer(this)
{
	connect(&posTimer, SIGNAL(timeout()), this, SLOT(writePos()));
	connect(&moveTimer, SIGNAL(timeout()), this, SLOT(moveTimeout()));
	initPort();
}
コード例 #3
0
ファイル: FingerLib.cpp プロジェクト: Open-Bionics/FingerLib
// Public Methods //////////////////////////////////////////////////////////////
uint8_t Finger::attach(uint8_t dir0, uint8_t dir1, uint8_t sense, bool inv)
{
    if (fingerIndex < MAX_FINGERS)
    {
        // configure pins
        pinMode(dir0, OUTPUT);                           // set direction1 pin to output
        pinMode(dir1, OUTPUT);                           // set direction2 pin to output
        pinMode(sense, INPUT);                           // set sense pin to input
        // attach all finger pins
        _fingers[fingerIndex].Pin.dir[0] = dir0;
        _fingers[fingerIndex].Pin.dir[1] = dir1;
        _fingers[fingerIndex].Pin.sns = sense;
        // enable the motor and disable finger inversion
        _fingers[fingerIndex].invert = inv;
        _fingers[fingerIndex].motorEn = true;
        // set limits and initial values
        setPosLimits(MIN_FINGER_POS,MAX_FINGER_POS);
        setSpeedLimits(MIN_FINGER_SPEED,MAX_FINGER_SPEED);
        writeSpeed(MAX_FINGER_SPEED);
        writePos(MIN_FINGER_POS);
        _fingers[fingerIndex].CurrDir = OPEN;					// set dir to OPEN after initial writePos to configure finger dir


        // if using the Atmega2560, set the PWM freq to > 20kHz to prevent humming
        setPWMFreq(dir0, 0x01);		// set PWM frequency to max freq
        setPWMFreq(dir1, 0x01);		// set PWM frequency to max freq

        // initialise the timer
        if(_timerSetupFlag == false)
        {
            _passMotorPtr(&fingerPosCtrl);
            _timerSetup();
            _timerSetupFlag = true;
        }
        _fingers[fingerIndex].Pin.isActive = true;		// this must be set after the check
    }

    return fingerIndex;
}
コード例 #4
0
ファイル: Motor.cpp プロジェクト: RhobanProject/Vrep
void Motor::writePosDeg(double pos)
{
    writePos(M_PI*pos/180);
}
コード例 #5
0
ファイル: lexparser.cpp プロジェクト: rkhmelyuk/compiler
NodeList* parse(char *string) {

	NodeList *begin = new NodeList;
	begin->next = begin->prev = null;
	begin->node = null;

	NodeList *nl = begin;

	Sym *s = new Sym;
	s->row = 1;
	s->col = 0;
	s->pos = 0;
	s->string = string;

	char c;
	while ((c = getc(s))) {

		if (isspace(c)) {
			continue;
		}

		if (nl->node) {
			nl->next = new NodeList;
			nl->next->prev = nl;
			nl = nl->next;
			nl->next = NULL;
			nl->node = NULL;
		}

		Node *n;
		switch (c) {
		case '+':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_PLUS;
			nl->node = n;
			writePos(n, s);
			continue;
		case '-':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_MINUS;
			nl->node = n;
			writePos(n, s);
			continue;
		case '*':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_MUL;
			nl->node = n;
			writePos(n, s);
			continue;
		case '/':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_DIV;
			nl->node = n;
			writePos(n, s);
			continue;
		case ',':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_COMMA;
			nl->node = n;
			writePos(n, s);
			continue;
		case '=':
			n = new Node;
			if (getc(s) == '=') {
				n->value = new char[3];
				n->value[0] = c;
				n->value[1] = c;
				n->value[2] = 0;
				n->nodeType = NODE_TYPE_EQUAL;
			}
			else {
				revokec(s);
				n->value = new char[2];
				n->value[0] = c;
				n->value[1] = 0;
				n->nodeType = NODE_TYPE_ASSIGN;
			}
			nl->node = n;
			writePos(n, s);
			continue;
		case '>':
			n = new Node;
			if (getc(s) == '=') {
				n->value = new char[3];
				n->value[0] = '>';
				n->value[1] = '=';
				n->value[2] = 0;
				n->nodeType = NODE_TYPE_GREATER_EQ;
			}
			else {
				revokec(s);
				n->value = new char[2];
				n->value[0] = '>';
				n->value[1] = 0;
				n->nodeType = NODE_TYPE_GREATER;
			}
			nl->node = n;
			writePos(n, s);
			continue;
		case '!':
			if (getc(s) == '=') {
				n = new Node;
				n->value = new char[3];
				n->value[0] = '!';
				n->value[1] = '=';
				n->value[2] = 0;
				n->nodeType = NODE_TYPE_NOT_EQUAL;
				nl->node = n;
				writePos(n, s);
			}
			else {
				revokec(s);
				lexerError(s, "Unknown construction, did you mean '!='");
			}

			continue;
		case '<':
			n = new Node;
			if (getc(s) == '=') {
				n->value = new char[3];
				n->value[0] = '<';
				n->value[1] = '=';
				n->value[2] = 0;
				n->nodeType = NODE_TYPE_LESS_EQ;
			}
			else {
				revokec(s);
				n->value = new char[2];
				n->value[0] = '<';
				n->value[1] = 0;
				n->nodeType = NODE_TYPE_LESS;
			}
			nl->node = n;
			writePos(n, s);
			continue;
		case ';':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_SEMICOLON;
			nl->node = n;
			writePos(n, s);
			continue;
		case '@':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_AMPERSAT;
			nl->node = n;
			writePos(n, s);
			continue;
		case '(':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_LPAREN;
			nl->node = n;
			writePos(n, s);
			continue;
		case ')':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_RPAREN;
			nl->node = n;
			writePos(n, s);
			continue;
		case '{':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_LBRACE;
			nl->node = n;
			writePos(n, s);
			continue;
		case '}':
			n = new Node;
			n->value = new char[2];
			n->value[0] = c;
			n->value[1] = 0;
			n->nodeType = NODE_TYPE_RBRACE;
			nl->node = n;
			writePos(n, s);
			continue;
		case '#':
			c = getc(s);
			if (c == '*') {
				do {
					c = getc(s);
					if (c == '*') {
						c = getc(s);
						if (c == '#') {
							// comment is closed!
							break;
						}
					}
				} while (c);
			}
			else {
				do {
					c = getc(s);
					if (c == '\n') {
						break;
					}
				} while (c);
			}
			continue;
		case '"':
			int pos = s->pos + 1;
			do {
				c = getc(s);
				if (c == '\n') {
					lexerError(s, "Multi line strings are not supported.");
					break;
				}
				else if (c == '"') {
					// end of string
					n = new Node;
					int num = s->pos - pos;
					n->value = (char*) malloc(sizeof(char) * num + 1);
					strncpy(n->value, s->string + sizeof(char) * pos - 1, num);
					n->nodeType = NODE_TYPE_STRING;
					nl->node = n;
					writePos(n, s);
					break;
				}
			} while (c);
			continue;
		}

		if (isdigit(c)) {
			n = new Node();
			n->nodeType = NODE_TYPE_NUMBER;
			n->value = new char[1];
			n->value[0] = 0;
			do {
				char* str = new char[2];
				str[0] = c;
				str[1] = 0;
				strcat(n->value, str);
				c = getc(s);
			} while (isdigit(c));
			if (c) revokec(s);
			nl->node = n;
			writePos(n, s);
		}
		else if (isalpha(c)) {
			n = new Node();
			n->value = new char[1];
			n->value[0] = 0;
			do {
				char* str = new char[2];
				str[0] = c;
				str[1] = 0;
				strcat(n->value, str);
				c = getc(s);
			} while (isalpha(c) || isdigit(c));
			if (c) revokec(s);
			nl->node = n;

			if (strcmp(n->value, "def") == 0) {
				n->nodeType = NODE_TYPE_DEF;
			}
			else if (strcmp(n->value, "print") == 0) {
				n->nodeType = NODE_TYPE_PRINT;
			}
			else if (strcmp(n->value, "if") == 0) {
				n->nodeType = NODE_TYPE_IF;
			}
			else if (strcmp(n->value, "then") == 0) {
				n->nodeType = NODE_TYPE_THEN;
			}
			else if (strcmp(n->value, "else") == 0) {
				n->nodeType = NODE_TYPE_ELSE;
			}
			else if (strcmp(n->value, "while") == 0) {
				n->nodeType = NODE_TYPE_WHILE;
			}
			else if (strcmp(n->value, "break") == 0) {
				n->nodeType = NODE_TYPE_BREAK;
			}
			else if (strcmp(n->value, "continue") == 0) {
				n->nodeType = NODE_TYPE_CONTINUE;
			}
			else if (strcmp(n->value, "func") == 0) {
				n->nodeType = NODE_TYPE_FUNC;
			}
			else {
				n->nodeType = NODE_TYPE_IDENTIFIER;
			}
			writePos(n, s);
		}
		else if (c == EOF || c == 25) {
			// rollback to previous node and break reading
			nl = nl->prev;
			break;
		}
		else {
			lexerError(s, "Unexpected symbol.");
		}
	}

	nl->next = new NodeList;
	nl->next->node = new Node;
	nl->next->prev = nl;
	nl = nl->next;
	nl->node->nodeType = NODE_TYPE_EOF;
	nl->node->value = "eof";
	writePos(nl->node, s);

	return begin;
}
コード例 #6
0
ファイル: FingerLib.cpp プロジェクト: Open-Bionics/FingerLib
void Finger::close(void)
{
    writePos(_fingers[fingerIndex].MaxPos);
}
コード例 #7
0
ファイル: FingerLib.cpp プロジェクト: Open-Bionics/FingerLib
void Finger::open(void)
{
    writePos(_fingers[fingerIndex].MinPos);
}
コード例 #8
0
ファイル: FingerLib.cpp プロジェクト: Open-Bionics/FingerLib
void Finger::stopMotor(void)
{
    // set target position to current pos
    writePos(readPos());
}