.объем основных ошибок много в то время как работает мой код C# на руку встраиваемый бортовой
Я хочу использовать .Объем основной библиотеки ИОТ для того чтобы бежать С# код для моего SAMA5D27 СОМ1 ЕК1 руку встраиваемый бортовой.
GitHub - dotnet/iot: это РЕПО включает в себя реализации .NET Core для различных плат Интернета вещей, чипов, дисплеев и печатных плат.[^]
Я уже построил это .Чистый основной проект, состоящий из проект.в CS исходный файл :
using System; using System.Device.Gpio; using System.Threading; namespace led_blink { class Program { static void Main(string[] args) { var pin = 81; var lightTimeInMilliseconds = 1000; var dimTimeInMilliseconds = 200; Console.WriteLine($"Let's blink an LED!"); using (GpioController controller = new GpioController()) { controller.OpenPin(pin, PinMode.Output); Console.WriteLine($"GPIO pin enabled for use: {pin}"); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) => { controller.Dispose(); }; while (true) { Console.WriteLine($"Light for {lightTimeInMilliseconds}ms"); controller.Write(pin, PinValue.High); Thread.Sleep(lightTimeInMilliseconds); Console.WriteLine($"Dim for {dimTimeInMilliseconds}ms"); controller.Write(pin, PinValue.Low); Thread.Sleep(dimTimeInMilliseconds); } } } } }
А вот это .csproj файл файл :
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Iot.Device.Bindings" Version="1.0.0" /> <PackageReference Include="System.Device.Gpio" Version="1.0.0" /> </ItemGroup> </Project>
Как вы можете видеть, код используется для мигающего светодиода, который находится на Контакт 81 что соответствует PortC pin 17 на моей доске. Я строю проект для того, чтобы использовать его на arm-linux доска.
Во-первых, чтобы проверить, хорошо ли работает pin-код, я использовал библиотеку libgpiod и включил светодиод pin81 с помощью
gpioset gpiochip0 81=1и это хорошо работает.
Кроме того, я проверил свои GPIO с помощью
gpioinfoкоманда и это результат нужного Пина :
line 81: "PC17" unused input active-high
Но когда я пытаюсь запустить код C#, он терпит неудачу с этим выходным сообщением :
Let's blink an LED! Unhandled exception. System.IO.IOException: Device or resource busy at System.IO.FileStream.WriteNative(ReadOnlySpan`1 source) at System.IO.FileStream.FlushWriteBuffer() at System.IO.FileStream.FlushInternalBuffer() at System.IO.FileStream.Flush(Boolean flushToDisk) at System.IO.FileStream.Flush() at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder) at System.IO.StreamWriter.Dispose(Boolean disposing) at System.IO.TextWriter.Dispose() at System.IO.File.WriteAllText(String path, String contents) at System.Device.Gpio.Drivers.SysFsDriver.OpenPin(Int32 pinNumber) at System.Device.Gpio.GpioController.OpenPin(Int32 pinNumber) at System.Device.Gpio.GpioController.OpenPin(Int32 pinNumber, PinMode mode) at led_blink.Program.Main(String[] args) in /home/ubuntu/netcore/Program.cs:line 23 Aborted
Это моя доска дерево устройств :
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts[^]
ПС : Я удалил узел ISC, который использует PC17 GPIO из дерева устройств, чтобы освободить pin - код
https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/at91-sama5d27_som1_ek.dts#L70[^]
Почему мой код не может работать ? любая помощь, пожалуйста !
Что я уже пробовал:
Я попробовал использовать библиотеку libgpiod, чтобы увидеть, действительно ли штырь занят или нет, и обнаружил, что светодиод работает нормально. Но с кодом C# и .net IoT это не так
Gerry Schmitz
Выньте петлю. Начните с простого, пока не будет никаких ошибок, а затем выполните "инкрементное" кодирование и тестирование. Устройство "занято" может означать, что вы не "распоряжаетесь", когда должны.