Size: a a a

Язык программирования Julia / Julia programming language

2021 June 01

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Ну так если я там буду использовать только первые 16 бит, мне ведь не важно чем он заканчивается
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
https://github.com/notinaboat/PiGPIOC.jl/blob/master/src/pigpio.jl функция spiWrite
но на обычном компе она не запустится
источник

A

Alexandr in Язык программирования Julia / Julia programming language
>Ну так если я там буду использовать только первые 16 бит, мне ведь не важно чем он заканчивается
Вам нет, а библиотеке может быть важно.
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Думаю, что нет, но это неточно.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Так. Вот оригинальная c-функция
/*D
This function reads count bytes of data from the SPI
device associated with the handle.
. .
handle: >=0, as returned by a call to [*spiOpen*]
  buf: an array to receive the read data bytes
count: the number of bytes to read
. .
Returns the number of bytes transferred if OK, otherwise
PI_BAD_HANDLE, PI_BAD_SPI_COUNT, or PI_SPI_XFER_FAILED.
D*/


/*F*/
int spiWrite(unsigned handle, char *buf, unsigned count);
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Число - это не строка.

С большой долей вероятности число будет жить в регистре, а строка живёт в куче. То есть это совсем разные сущности с точки зрения компилятора.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Она не ждет никакого CString, конечно, CString туда запихал генератор Clang.jl
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Она ждет массив  Int8 или UInt8
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
А кто кстати знает - в C char это прямо просто байт? Уникод это что-то отдельное?
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Я в курсе, но как это обойти пока до конца не понимаю.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Можно просто вызов самостоятельно написать.
А потом автору библиотеки прислать PR c изменениями.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
В с char это самый маленький (как правило 8ми битный) int. Больше ничего сакрального, например привязки к символам, в нем нет
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Пока автор на связь не выходит.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
 If you are passing a char* to a C routine that does not assume NUL termination (e.g. because you pass an explicit string length), or if you know for certain that your Julia string does not contain NUL and want to skip the check, you can use Ptr{UInt8} as the argument type.
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Плохая новость в том, что на C я никогда не работал и толком его не понимаю. Хорошая новость в том, что задача не по работе, а фо фан. Так что буду разбираться потихоньку. Спасибо за ссылки - буду читать.
источник

EM

Evgeny Metelkin in Язык программирования Julia / Julia programming language
Я думаю, что смысл библиотеки в том, что автор хотел сделать автогенерацию в Clang.jl, поэтому PR должен быть для генератора, наверное. Не уверен, что я готов так далеко пойти.
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Тут проблема в том, кроме всего прочего, что вся библиотека сгенерирована с помощью Clang.jl и этот PR вряд ли будет полезен
источник

A

Alexandr in Язык программирования Julia / Julia programming language
Однако никто не мешает самому сделать вызов напрямую:
@ccall pigpio.spiWrite(handle::UInt32, buff::Ptr{Int8}, count::Int32)::Cint
источник

A

Alexandr in Язык программирования Julia / Julia programming language
предполагается что pigpio импортирован в пространство имен откуда вызваете. Это pigpio, обявленный в пакете:
const pigpio = "libpigpio"
источник