|
знатокам "С" - помогите с передачей указателя | ☑ | ||
---|---|---|---|---|
0
vde69
25.04.16
✎
14:13
|
пишу класс, (ниже урезанный вариант...)
------------------------------------------------------------- // описание пакета, данные передаются и принимаются именно в такой последовательности typedef struct { uint8_t Id_Destination; // ID получателя пакета uint8_t Id_Source; // ID отправителя пакета uint8_t Type; // Тип пакета uint8_t Func; // Номер команды определяет тип дополнительных данных и правила их обработки uint8_t SizeDate; // Размер дополнительных данных пакета uint8_t xor_Data; // xor (контроль четности) дополнительных данных пакета uint8_t xor_Head; // xor (контроль четности) заголовка, служит для определения корректности заголовка и выделения кадра из потока данных uint8_t Data[MAX_BUFFER]; // дополнительные данные } BusRS485_Pack; volatile static voidFuncPtr _InPack; class BusRS485 { private: HardwareSerial port; // указатель на Serial class uint8_t Id; // 0=master, 1..246=slave, 247=резерв uint8_t ControlPin; // номер пина контроля RS-485 BusRS485_Pack InPack; // входящий пакет uint8_t FInPack; // флаг входящего пакета, 0-ждем заголовок, 1-ждем дополнительные данные, 2-пакет загружен валиден, 3-пакет загружен, но не валиден void init(uint8_t Id, uint8_t PortNum, uint8_t ControlPin); public: BusRS485(uint8_t Id, uint8_t PortNum, uint8_t ControlPin); uint8_t Id_Destination (void); uint8_t Id_Source (void); uint8_t Type (void); uint8_t Func (void); uint8_t SizeDate (void); uint16_t Date (void); void begin(long Speed); void attachInPackInterrupt(void ()()); void poll(); // процедура запуска обработки получения данных void on(); // включение шина + COM порт void off(); // выключение шины (только COM порт) void send(int8_t, // ID получателя int8_t, // тип пакета int8_t, // номер функции int8_t, // размер дополнительных данных uint16_t ); // указатель на буфер дополнительных данных }; uint16_t BusRS485::Date (){ return InPack.Data; } ------------------------------------------------------------- вот его использование, по идее Bus.Date() должна возвращать указатель, но что-то не так, а что именно не пойму... ------------------------------------------------------------- //#include <busrs485.h> BusRS485 Bus(0, 0, 2); // this is master and RS-232 or USB-FTDI void setup() { Bus.begin( 19200 ); // baud-rate at 19200 Bus.attachInPackInterrupt(BusInPack); // подключим процедуру для обработки полученых пакетов } void loop() { Bus.poll(); // вызов процедур чтения порта } // процедура вызывается при получении валидного пакета void BusInPack (){ // тут делаем, что нам надо при получении пакета // например перешлем его другому адресату if (Bus.Id_Destination() == 0) { Bus.send(22, // ID получателя Bus.Type(), // тип пакета Bus.Func(), // номер функции Bus.SizeDate(), // размер дополнительных данных Bus.Date()) // !!!!!!!! invalid conversion from 'uint16_t' to 'uint16_t*' !!!!!!! } } ps сильно не ругайте, я "пасквелист"... |
|||
1
vde69
25.04.16
✎
14:16
|
блин, звездочки зажрало...
вот тут с правильным форматированием http://arduino.ru/forum/programmirovanie/pomogite-s-peredachei-ukazatelya |
|||
2
ДенисЧ
25.04.16
✎
14:19
|
uint16_t BusRS485::Date (){
return &InPack.Data; } |
|||
3
mingw
25.04.16
✎
14:34
|
(2) Переменную лучше вытащить. Из Bus. А то вдруг грохнется.
|
|||
4
Кирпич
25.04.16
✎
14:38
|
ёпрст. паскаль без книжки уже выучил, теперь Си++ без книжки учит :)
|
|||
5
Тролль главный
25.04.16
✎
14:39
|
так Date или Data
|
|||
6
Кирпич
25.04.16
✎
14:42
|
(1) "блин, звездочки зажрало..." оно как бы намекнуло, что там звёздочка нафиг не нужна :)
|
|||
7
Mort
25.04.16
✎
15:07
|
+(2) Тип возвращаемого значения в функции забыл:
uint16_t* BusRS485::Date (){ return &InPack.Data; } |
|||
8
vde69
25.04.16
✎
15:14
|
(7) разобрался...
uint8_t * BusRS485::Date (){ return &(InPack.Data[0]); } |
|||
9
H A D G E H O G s
25.04.16
✎
15:37
|
(0) Ну как программится на C после 1С. Чувствуем некоторые жжения от соотношения реализовано/затраченовремени?
|
|||
10
spock
25.04.16
✎
15:41
|
(9) Провокатор чертов :-)
|
|||
11
Кирпич
25.04.16
✎
15:44
|
(9) а куда деваться. 1С в arduino ещё нету.
|
|||
12
H A D G E H O G s
25.04.16
✎
15:48
|
Я тут пилю некоторый аналог Хамачи на Дельфях. Вот это мозгопство с блокирующими сокетами и многопоточной обработкой. А на выходе - примитивная с виду программа с 5 кнопками.
|
|||
13
ДенисЧ
25.04.16
✎
15:49
|
(12) "Ну как программится на паскале после 1С. Чувствуем некоторые жжения от соотношения реализовано/затраченовремени?
|
|||
14
H A D G E H O G s
25.04.16
✎
15:52
|
(13) Да еще как. Я же не говорю, что C - хрень. Я говорю о том, что 1С делает нашу жизнь проще и делает 70% из коробки того, что пришлось бы делать руками в C/Pascal/и.т.д.
|
|||
15
Smallrat
25.04.16
✎
15:59
|
(11) я бы так категорично не высказывался))
http://www.youtube.com/watch?v=jAy5mULxsAg |
|||
16
vde69
25.04.16
✎
15:59
|
(14) разумеется ты прав :) но я делаю то чего на 1с невозможно сделать :)
зы кстати я всегда говорил, что 1с - рулез :) ззы с удивлением обнаружил, что низкоуровневые спецы (те которые пишут например под AVR на ассемблере) стоят сильно дешевле 1с ников.... |
|||
17
vde69
25.04.16
✎
16:01
|
(15) Опубликовано: 1 апр. 2016 г.
|
|||
18
ДенисЧ
25.04.16
✎
16:01
|
(16) Я бы так не сказал....
Видел вакансию у нас в деревне, где прогу на МК предлагали в два раза больше, чем средняя для 1с (опять же у нас в деревне) |
|||
19
Smallrat
25.04.16
✎
16:01
|
(17) ну вот, вся интрига((.....
|
|||
20
NorthWind
25.04.16
✎
16:03
|
(16) вся фишка в спросе. Такой человек может очень долго искать работу, но в конечном итоге устроиться существенно лучше любого 1Сника, если найдет платежеспособного купца на свои знания и решит ему его проблемы.
|
|||
21
Кирпич
25.04.16
✎
16:05
|
(15) твоюж мать! Ж)))
|
|||
22
mingw
25.04.16
✎
16:08
|
(12) Лисапедист? Есть готовые аналоги. Бесплатные. Опенсорсные.
|
|||
23
Господин ПЖ
25.04.16
✎
16:10
|
(16) у них малый спрос. и спрос растет из весьма специфичных контор... можно пойти в военку разрабатывать что-нибудь встроенное для техники... но это сразу невыездной и смешная з/п
|
|||
24
Кирпич
25.04.16
✎
16:13
|
(18) "стоят сильно дешевле 1с ников...."
бог наказывает всех, кто не способен отличить кредит от сальдо. |
|||
25
H A D G E H O G s
25.04.16
✎
16:14
|
(22) Я не использую в своих поделках, которые будут работать не у меня, компонентов, кроме как из типовой поставки.
|
|||
26
Кирпич
25.04.16
✎
16:17
|
(25) ты наверное уже всего Кнута переписал на паскале :)
|
|||
27
NorthWind
25.04.16
✎
16:19
|
uint16_t BusRS485::Date (){
return InPack.Data; } Вы явно объявили тип возвращаемого значения - 16 бит целый. Указатель даже под DOS занимает 32 бит. Что у вас за система? Если вы хотите вернуть указатель на элемент массива, то почему было не объявить uint8_t* BusRS485::Date () ? |
|||
28
Oftan_Idy
25.04.16
✎
16:52
|
(0) Может поделишься с общественность что же за железку ты решил совокупить с 1С? И это реально нужно бизнесу?
Нежели реализуешь лампочки для плохих сотрудников и кнопочки для хороших? |
|||
29
ДенисЧ
25.04.16
✎
16:56
|
(28) Лампочки это не серьёзно...
Про минет сотрудникам помнишь? |
|||
30
vde69
25.04.16
✎
17:02
|
||||
31
Oftan_Idy
25.04.16
✎
17:09
|
(29) Дык я про это же и написал :)
|
|||
32
Oftan_Idy
25.04.16
✎
17:10
|
(30) А при чем тут 1С?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |