Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как разобраться в синтаксической ошибке?

465
29 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Фаил .h
Код:
//////////////////////////////////////////////////////////////////
//
//  USB.h - header file
//
// This file was generated using the RTX Application Wizard
// for Visual Studio.  
//////////////////////////////////////////////////////////////////


#include <windows.h>
#include <rtapi.h>
//#include <stdio.h>
//#include <string.h>
//#include <ctype.h>
//#include <conio.h>
//#include <stdlib.h>
//#include <math.h>
//#include <errno.h>

// Add DEFINES Here

//  Add Function prototypes Here

void RtWriteLPTPort(USHORT PortAddr ,BYTE Value)
{
    _asm{
    mov DX, PortAddr
    mov AL, Value
    out DX, AL
    }
}    



bool RtBIOSDetectPCI(void)
{
_asm {
     mov AX, B101h
     int 1Ah
     jc &nopcibios
     mov AX, 1
     ret

     &nopcibios:
     xor AX, AX
     ret   
    }

}
Первую функцию хавает без проблем, а на второй уперся рогом.
Приложение компилю в RTSSRelease Mode.

Ошибки:
USB.h(35) : error C2061: syntax error : identifier 'RtBIOSDetectPCI'
USB.h(35) : error C2059: syntax error : ';'
USB.h(35) : error C2059: syntax error : 'type'
USB.h(39) : error C2059: syntax error : 'bad suffix on number'

Пол дня уже эта тварь отняла, помогите.
465
29 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Как он может понять что в названии функции(если её начаало не цифра) синтаксическая ошибка? Бред какой то.
Или, что можно понять из выражения:"плохо суффикс на номер"?
316
29 апреля 2012 года
Alm3n
889 / / 29.05.2009
Try 0x1a.
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Странно всё это, но ошибок стало меньше.
Сижу тут из паскалевского ассемблера переделываю в сишный, вот исходник из книги:

 
Код:
Asm
  mov ax, 0b101h - тут 0 впереди не очень понял
  int 1ah  - вот тут, да?
  jc @nopcibios
  mov ax, 1
  ret
  @nopcibios:
  xor ax, ax
  ret
End;
Оставшиеся ошибки:
1,2 те же.
3 (34) : error C2059: syntax error : ')'

Жалко к делфи нету этой примочки RTX, с удовольствием пересел бы на него.
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Короче вот такой пока код:

Код:
bool RtBIOSDetectPCI(void)
{
    _asm {
     Mov AX, 0xB101
     Int 0x1A
     Jc &nopcibios
     Mov AX, 0x1
              Ret

     nopcibios:
     Xor AX, AX
              Ret  
    }
}
Не пойму причём тут название функции? Чем принципиально первая функция от второй отличается?
С ассемблерным кодом разобрались, спасибо вам Alm3n.
А вот ошибки в сишном коде не могу увидеть.
В книге функция объявлена вот так:

Function DetectPCIBios: Boolean; assembler;

Может вместо ассемблер нужно чтото написать? Я написал register(т.к assembler он не хавает), но тогда появляются следующие ошибки:

(34) : error C2054: expected '(' to follow 'bool'
(34) : error C2085: 'RtBIOSDetectPCI' : not in formal parameter list
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
В .h файлах не пишут тела функций? И никто не намекнул на это.
А где тогда можно писать функции целиком и подключать их без лишнего парева как в паскале?
И почему он первую хавает на ура?
С++ меня медленно убивает.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
assembler вообще писать не нужно.
В с++ все прототипы описываются в .h, код функций пишется в .cpp. .h через include вставляется в cpp, который просто добавляется в проект.
Есть и несколько исключений из правила для классов и шаблонов.
Вообще, дайте код функции на том языке, с которого переводите. Нужно перевести на с++?
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Проблем с переводом нету, спасибо.

Проблема в том что я хочу расширить функционал RTX API, написать функции на ассемблере и оформить их как отдельный (по понятиям делфи) модуль. Реализовать это хочу самым простым способом, без всяких динамических библиотек и прочего мутора.

В общем нужно чтоб я мог писать функции в отдельном файле, а в основном .c файле мог их спокойно вызывать.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
Проблем с переводом нету, спасибо.

Проблема в том что я хочу расширить функционал RTX API, написать функции на ассемблере и оформить их как отдельный (по понятиям делфи) модуль. Реализовать это хочу самым простым способом, без всяких динамических библиотек и прочего мутора.

В общем нужно чтоб я мог писать функции в отдельном файле, а в основном .c файле мог их спокойно вызывать.


Если язык Си, то прототипы функций не обязательны, можно код сразу писать в .с файлах, подключаемых к проекту.

465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
А можно какой нибудь проктический пример?
У меня сейчас есть USB.h и USB.c(главный фаил в котором всё происходит). Например я создам фаил myrtapi.c, в котором как я понимаю не должно быть таких проблем и можно будет написать несколько функций.
Как его потом подключить к USB.c?

Насчёт си или с++ походу я ошибся я выбирал при создании проекта тип проекта визуал с++, а он в итоге .с файлы ляпает
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
Пример чего?
В .h файлах ещё объявляют константы и глобальные переменные, так что они тоже могут быть нужны.
К USB.c ничего подключать не нужно, его нужно будет добавить в проект, чтобы потом компилятор сделал из него объектный файл, точку входа в функцию линковщик найдёт сам. То есть, можно просто использовать функции, больше ничего не нужно.
Не смертельно, думаю, если в с++ будут функции без прототипа. Во всяком случае ошибок таких не было.
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
На данный момент сделал следующее:
1) создал фаил myrtapi.c. Выбрал меню проект, в нём создать новый item(yне знаю перевода).
2) Написал в нем функции:

Код:
Это всё содержимое файла.


void RtWriteLPTPort(USHORT PortAddr ,BYTE Value)
{
    _asm{
    Mov DX, PortAddr
    Mov AL, Value
    Out DX, AL
    }
}
//---------------------------------------------------------------------------------



bool RtBIOSDetectPCI(void)
{
    _asm {
     Mov AX, 0xB101
     Int 0x1A
     Jc &nopcibios
     Mov AX, 0x1
     Ret

     nopcibios:
     Xor AX, AX
     Ret   
    }
}
//---------------------------------------------------------------------------------
3) Попытался скомпилить, после чего был расстрелен компилятором.

Фаил myrtapi.c отображается в структуре проекта, но от этого не легче.
Вот такие теперь ошибки:

.\myrtapi.c(13) : error C2146: syntax error : missing ')' before identifier 'PortAddr'
.\myrtapi.c(13) : error C2061: syntax error : identifier 'PortAddr'
.\myrtapi.c(13) : error C2059: syntax error : ';'
.\myrtapi.c(13) : error C2059: syntax error : ','
.\myrtapi.c(13) : error C2059: syntax error : ')'
.\myrtapi.c(25) : error C2061: syntax error : identifier 'RtBIOSDetectPCI'
.\myrtapi.c(25) : error C2059: syntax error : ';'
.\myrtapi.c(25) : error C2059: syntax error : 'type'
260
30 апреля 2012 года
Ramon
1.1K / / 16.08.2003
Не хотелось бы вас расстраивать, но даже если вы это скомпилируете работать под Windows'ом это не будет.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
Цитата: Ramon
Не хотелось бы вас расстраивать, но даже если вы это скомпилируете работать под Windows'ом это не будет.


Может, человек драйвер пишет. Отчего не будет-то?

260
30 апреля 2012 года
Ramon
1.1K / / 16.08.2003
 
Код:
#include <windows.h>
Это не драйвер, а даже если и драйвер, то кто ему ответит на
 
Код:
Int 0x1A
?

PS: Аффтар как всегда решает не те задачи.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
Цитата: Ramon

Это не драйвер, а даже если и драйвер, то кто ему ответит на
 
Код:
Int 0x1A
?


Буду теперь знать, что не работает под Windows это прерывание.

465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
В смысле как это не будет? Приложение RTSS. Устанавливает свой HAL который начинает рулить виндой.
Например запись в LPT порт под виндой не идёт, пишет что не хватает привелегий для такой операции, а под этой хренью всё пишется без напрягов
Вот этот код например:


 
Код:
_asm{
    mov DX, PortAddr
    mov AL, Value
    out DX, AL
    }
465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Штука рульная. Например я написал записывать последовательно в порт значения 0 и 255 на протяжении минуты, и вижу как мигает светодиод подключенный к порту.
Так же написал на делфи завешивалку системы с максимальным для винды приоритетом. Так вот когда я запускаю завешивалку винда виснет намертво(не двигается мышка, не срабатывает капс лок на клаве), а это приложение работает дальше как ни в чём не бывало. При чём завешивалка именно загружает проц на сто пудов.

Осталось только с си разобраться, пока он не поддаётся моей логике.
Вы бы если это для вас не очень обременительно прокоментировали что я не так сделал.

Насчёт int 0x1a 'Это из книги, там автор предупреждает что под серией операционок NT работать не будет, так же предупреждали и про код для записи в порт.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
Насчёт int 0x1a 'Это из книги, там автор предупреждает что под серией операционок NT работать не будет, так же предупреждали и про код для записи в порт.


Что значит "предупреждает"? То есть, вы знали, что работать не будет, но всё равно пишите?

465
30 апреля 2012 года
QWERYTY
595 / / 25.03.2012
Да всё равно пишу, по тому что приложение в итоге выходит не для виндовс(.ехе), а для подсистемы RTSS(.rtss).

Если смотреть с точки зрения виндовых колец защиты, то получается что это -1-е кольцо.

Я даже скажу больше по уверениям разработчиков этой хрени приложение продолжит работать как ни в чём не бывало если у винды вылезет так называемый экран смерти.
У этого приложения будет свой, зеленый экран смерти(в прямом смысле зелёный). Если чё нибудь не так закодю возможно его увижу, винде я так понял тоже будет в этот момент шабаш.
316
30 апреля 2012 года
Alm3n
889 / / 29.05.2009
В первом кольце ничего в Windows не работает же. Оно, кажется, для совместимости. Только 0 и 3 задействованы.
7
30 апреля 2012 года
@pixo $oft
3.4K / / 20.09.2006
Он написал,что вообще -1е кольцо.Но такого нет :)
316
01 мая 2012 года
Alm3n
889 / / 29.05.2009
USHORT является типом? Он вообще где описан?
465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Кстати не подскажите как наиболее просто самому вызвать экран смерти, следующее что хочу проверить(продолжит ли работу)?
Но на компиляции застрял, пока не до этого.

Да является, гдето в недрах rtapi, я так понял тот же unsigned short. Для краткости записи.
316
01 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: @pixo $oft
Он написал,что вообще -1е кольцо.Но такого нет :)


http://en.wikipedia.org/wiki/Ring_(computer_security)
Мы об одном и том же?
Или это не с первого раза заметная шутка про (минус)1 кольцо?

Цитата:
Кстати не подскажите как наиболее просто самому вызвать экран смерти


Для всего, кроме Win 7:
http://kaimi.ru/2009/05/как-сделать-bsod-из-user-mode/
Для Win 7, но не программно, а через клавиатуру:
http://msdn.microsoft.com/en-us/library/ff545499(v=vs.85).aspx
Если проект студийный, то стоит попробовать переименовать файл из *.с в *.сpp.

465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: Ramon

PS: Аффтар как всегда решает не те задачи.



В смысле? Как всегда. Я только один раз решал не ту задачу. Я так понял вы про хекс.
Здесь я что надо решаю

Цитата: Ramon

Не хотелось бы вас расстраивать ...


Ни чуть. Ни чуть.

465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
да, да, реч про XP. Спасибо.

Чё вы прицепились к этому кольцу? Я что написал что это -1-е кольцо в операционной системе виндовс?
Я лиш хотел сказать что происходит захват процессорного времени, и отдаётся винде в свободное время, а если загруженность большая не отдаётся вовсе. Ну и винда не мешает нормальному общению с процессором.

Переименовать вы считаете хорошая идея? Дело в том что среда сама создаёт их такими. Я в си и с++ не шарю но есть предположение что они создавались бы как .срр если бы этому чтото не препятствовало.
316
01 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
Переименовать вы считаете хорошая идея? Дело в том что среда сама создаёт их такими. Я в си и с++ не шарю но есть предположение что они создавались бы как .срр если бы этому чтото не препятствовало.


Не видел ни разу, чтобы в студии создавались .с файлы по умолчанию. Имею в виду Microsoft Visual Studio. В самом проекте, конечно, тоже нужно произвести изменения, иначе файл не будет включён.

465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Я тоже, но когда выбираешь RTX Application создаются именно такие. Студия 2005. Только не рекомендуйте перейти на что нибудьболее современное. Это самое современное из того к чему я привязан.

Так как в си реализовать то о чём переписываемся? Алгоритм включения .с файла в проект чем то отличается от с++?
Сам фаил может содержать только функции и ничего более?
316
01 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: QWERYTY
Алгоритм включения .с файла в проект чем то отличается от с++?


Нет, ничем. Если студия сама создаёт проект с таким расширением, то менять не нужно. Подумалось, что от расширения зависит то, как компилятор воспринимает код. Всё-таки Си и Си++ - не до конца одно и то же ну и из-за этого могли быть ошибки. Но теперь и не знаю, что ещё можно посоветовать.

Цитата:
.\myrtapi.c(13) : error C2146: syntax error : missing ')' before identifier 'PortAddr'


Вот эта ошибка может случаться, в одном из случаев, из-за неверного типа идентификатора, так что лучше проверить существование типа USHORT.

465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Нет, я попробовал заменить на SUKASHORT, не компилится. С USHORT всё норм. С первой функцией проблем нет, и компилится и работает как часы.

А вот вторая компилится в таком виде:
Код:
byte RtBIOSDetectPCI()
{
    _asm {
     Mov AX, 0xB101
     Int 0x1A
     //Jc &nopcibios
     Mov AX, 1
     Ret

     nopcibios:
     Xor AX, AX
     Ret   
    }
}
Причём пришлось добавить #include <windows.h> в этот фаил. Нормально ли это, что windows.h теперь в двух файлах?
Видимо надо разбираться что там за Jc в паскалевском ассемблере.
И какие то напряги с типом bool, как только меняешь byte на bool перестаёт компилиться. Хотя мне уже пофиг(относится только к типу возвр. значения), bool же можно принять в переменную типа byte, надеюсь?(походу все эти напряги из за типа bool всё это время, я только недавно попробовал заменить) . Но както всё это странно, он выделяет слово bool синим цветом, и я не ожидал здесь подвоха.
465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Кажется скоро закончится этот дурной сон!
Как в самом начале пишу функции в .h файле(так както кажется удобней).
С Jc вроде разобрался, нужно не Jc &nopcibios, а Jc nopcibios(по крайней мере с точки зрения компиляции, с точки зрения функционирования ещё не проверил, там еще перед проверкой подкодить кое чё нужно).

Всем спасибо.



Alm3n, особый респект и уважуха! Не бросил в беде.
465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Почитал я немного про типы в си, но ни в одном месте не упоминался тип bool или boolean.
Кто раньше на си кодил наверное нужно выдавать молоко за вредность. )))
465
01 мая 2012 года
QWERYTY
595 / / 25.03.2012
Цитата: Alm3n
Всё-таки Си и Си++ - не до конца одно и то же ...


Да я уже понял, типа bool нету, слова true и false не понимаем.

Интересно чего там ещё нету ? По ходу не легкий меня ждёт кодинг.
Итак чайник кипит от си подобных языков, а тут еще такой прикол, слова выделяем синим но не понимаем.

7
01 мая 2012 года
@pixo $oft
3.4K / / 20.09.2006
Цитата: Alm3n
Мы об одном и том же?
Или это не с первого раза заметная шутка про (минус)1 кольцо?

Не понял тебя,но про -1е кольцо вижу впервые

316
01 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата:
Нормально ли это, что windows.h теперь в двух файлах?


Он во всём проекте будет только одна копия этого файла, в нём специальная "защита" от дублирования есть.

Цитата:
Jc в паскалевском ассемблере


"Паскалевского" ассемблера нет. Jc - jump carry, переход по переносу, то есть, когда в результате, например, сложения, сумма не помещается полностью в переменную, тогда единица самого старшего разряда числа переносится во флаг CF, ну и переход сработает.

Цитата:
bool же можно принять в переменную типа byte, надеюсь?


В Си любое ненулевое значение любой переменной распознаётся, как истина.

Цитата:
С Jc вроде разобрался, нужно не Jc &nopcibios, а Jc nopcibios


Разница между &nopcibios и без амперсанда в том, что в первом случае берётся адрес переменной nopcibios, а во втором значение, которое в ней находится. Но это не переменная, сдаётся мне. Стоит почитать про метки(label) в Си.

Цитата:
респект и уважуха!


Ничего личного, но помогать вам больше не смогу.

Цитата: @pixo $oft
Не понял тебя,но про -1е кольцо вижу впервые


А это о чём?

Цитата: @pixo $oft
Он написал,что вообще -1е кольцо.Но такого нет :)

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог