【XR806开发板试用】 VSCode + Samba环境搭建

概览

考虑到开发环境使用linux,对于我这种初学者还不太习惯使用,而且还需要安装虚拟机。个人感觉挺麻烦的,于是我使用以下方案,达到再Windows下使用开发的目的。
主要思路是:使用WSL(Windows Subsystem for Linux)用来开发,有点便是无需搭建虚拟机,电脑功耗低,运行速度快,占用资源少。在WSL搭建Samba服务,然后使用在Windows资源管理器中映射WSL中的开发目录。就可方便的使用VS Code进行开发。
本人目前还是学生,还需要学习很多,错误在所难免,尽情指出。可联系微信katsu119

WSL安装及配置

打开Microsoft Store,搜索Ubuntu,下载安装即可。可自定义安装位置,参考网络文章即可。
在这里插入图片描述

安装完成之后,命令行输入wsl,显示内容如下,表明安装完成。
在这里插入图片描述

因为每次启动WSL可能导致wsl的IP地址变化,这不便于我们使用samba服务访问wsl内的文件夹。所以建立以下的bat批处理命令,用于固定住wsl的IP地址,并且启动samba服务和ssh服务(前提是已安装好这两个服务)。可以根据自己的需求修改此bat文件来改写wsl的IP地址。

wsl --shutdown 
wsl -u root service smbd start
wsl -u root service ssh start
wsl -d Ubuntu -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d Ubuntu -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
wsl -d Ubuntu -u root ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
wsl -d Ubuntu -u root echo nameserver 192.168.50.1 ^> /etc/resolv.conf
powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False;"
powershell -c "New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; "
powershell -c "Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False;"
powershell -c "New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;"

使用Windows资源管理器访问WSL

如下图所示,这里以win11为例,其他window系统操作类似。打开Windows资源管理器,然后选择“映射网络驱动器”,填写网络位置(IP+文件夹名),如图中所示。具体网络位置的填写和samba服务的配置有关,具体见后文。
在这里插入图片描述

samba服务配置

如没有安装 samba服务
课参考这篇文章https://zhuanlan.zhihu.com/p/50753833进行安装

vim /etc/samba/smb.conf#在文件最后添加如下内容,其中分享的目录path需要自行修改,valid users也需修改。
#方括号内的内容就是上文添加网络驱动器的文件夹地址[OpenHarmonyOS_Code]path = /home/katsuavailable = yesvalid users = katsuread only = nobrowsable = yespublic = yeswriteable = yes

然后重启samba服务程序 sudo /etc/init.d/smbd restart ,就可通过window添加网络驱动器来像本地磁盘一样,访问xr806的开发文件目录了

下载开发相关文件请参考官方教程

使用vscode编写代码

进入添加的网络驱动器,右击XR806鸿蒙开发目录,使用选择使用Vscode打开  

在这里插入图片描述

同时可使用Ctrl + `可以调出终端,在其中输入wsl,便可以进行编译等操作,下载仍然需要使用PhoenixMC工具进行。

项目示例

项目示例文件,在/device/xradio/xr806/ohosdemo可根据各种示例文件进行学习。下面演示PWM生成,来闪烁LED灯。外设相关的接口文件在\base\iot_hardware\peripheral\interfaces\kits中,可以浏览相关文件,了解接口函数的功能,来驱动相关外设。
吐槽一下,我是根据B站小熊派来学习鸿蒙的。这块板子还无法使用CMSIS接口系统函数,如osThreadNew函数等等,会编译错误。需要使用xr-skylark的原生SDK来进行开发。使用的是/device/xradio/xr806/xr_skylark/include/kernel/os的头文件。
下列使用按键控制LED闪烁频率,并创建两个任务

#include <stdio.h>
#include <stdint.h>
//#include "cmsis_os2.h" //无法使用
#include "kernel/os/os.h" // 使用原生的SDK进行RTOS操作
#include "iot_gpio.h"
#include "iot_pwm.h"
#include "ohos_init.h"
#define GPIO_LED_PIN 21
#define GPIO_PWM_LED 2
#define GPIO_KEY_PIN 11void led_init();
void pwm_led_init();
void led_toggle();
void key_init();
void task1(void *argument);
void task2(void *argument);// void led_init()
// {
//     IoTGpioInit(GPIO_LED_PIN);
//     IoTGpioSetDir(GPIO_LED_PIN, IOT_GPIO_DIR_OUT);
//     IoTGpioSetOutputVal(GPIO_LED_PIN, IOT_GPIO_VALUE0);
// }
// void led_toggle()
// {
//     static char pin_state = IOT_GPIO_VALUE0;
//     IoTGpioSetOutputVal(GPIO_LED_PIN, pin_state);
//     pin_state = !pin_state;
// }
void pwm_led_init()
{IoTPwmInit(GPIO_PWM_LED);IoTPwmStart(GPIO_PWM_LED, 50, 8);
}void key_init()
{IoTGpioInit(GPIO_KEY_PIN);IoTGpioSetDir(GPIO_KEY_PIN, IOT_GPIO_DIR_IN);
}
void pwm_freq_set(uint8_t freq)
{IoTPwmStart(GPIO_PWM_LED, 50, freq);
}
uint8_t key_read()
{IotGpioValue ret = IOT_GPIO_VALUE1;IoTGpioGetInputVal(GPIO_KEY_PIN, &ret);return ret;
}
void task1(void *argument)
{uint32_t i = 0;while (1){printf("Task 1 : %d\r\n", i++);OS_MSleep(1000);}
}
void task2(void *argument)
{uint32_t i = 0;while (1){printf("Task 2 : %d\r\n", i++);OS_MSleep(1500);}
}
static OS_Thread_t htask1;
static OS_Thread_t htask2;
int my_app()
{printf("Hello Wolrd!\r\n");pwm_led_init();key_init();if (OS_ThreadCreate(&htask1, "Task1", task1, NULL, OS_PRIORITY_NORMAL, 1024) != OS_OK)printf("Create Task1 Failed!\r\n");if (!OS_ThreadIsValid(&htask2))if (OS_ThreadCreate(&htask2, "Task2", task2, NULL, OS_PRIORITY_NORMAL, 1024) != OS_OK)printf("Create Task2 Failed!\r\n");uint8_t freq = 1;while (1){if (key_read() == IOT_GPIO_VALUE0){pwm_freq_set(freq++);}if (freq > 15)freq = 1;OS_MSleep(100);}return 0;
}
SYS_RUN(my_app);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/625750.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

:has()伪类使用

下面的 CSS 代码表示如果 <a> 元素里面有 <img> 元素&#xff0c;则这个 <a> 元素就会匹配。 a:has(img) { display: block; } 我们可以使用这个选择器轻松区分是文字链接还是图像链接 a:has(> img) { display: block; } 表示匹配子元素是 <img>…

5.HC-05蓝牙模块

配置蓝牙模块 注意需要将蓝牙模块接5v,实测接3.3v好像不太好使的样子 首先需要把蓝牙模块通过TTL串口模块接到我们的电脑,然后打开我们的串口助手 注意,我们现在是配置蓝牙模块,所以需要进入AT模式,需要按着蓝牙模块上的黑色小按钮再上电,这时候模块上的LED灯以一秒慢闪一次…

基于java+springboot+vue实现的健身俱乐部系统(文末源码+Lw+ppt)23-49

摘 要 随着社会的发展&#xff0c;健身俱乐部的管理形势越来越严峻。越来越多的用户利用互联网获得信息&#xff0c;健身信息鱼龙混杂&#xff0c;信息真假难以辨别。为了方便用户更好的获得本健身俱乐部管理信息&#xff0c;因此&#xff0c;设计一种安全高效的健身俱乐部网…

YOLOv8 目标检测项目实操

一 yolov8 背景介绍 YOLOv8是一种尖端的、最先进的(SOTA)模型&#xff0c;建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的特性和改进&#xff0c;以进一步提高性能和灵活性。YOLOv8被设计为快速、准确、易于使用&#xff0c;这使它成为一个很好的选择&#xff0c;…

三相交流电子负载的重要指标

三相交流电子负载是一种模拟实际负载的电子设备&#xff0c;主要用于测试电源、变频器、逆变器等电力电子设备的性能和稳定性。在选择和使用三相交流电子负载时&#xff0c;需要关注以下几个重要指标&#xff1a; 1. 额定功率&#xff1a;三相交流电子负载的额定功率是指其能够…

Adobe发布Acrobat AI助手,PDF互动新体验;OpenAI推出Batch批处理API,支持半价优惠

&#x1f989; AI新闻 &#x1f680; Adobe发布Acrobat AI助手&#xff0c;PDF互动新体验 摘要&#xff1a;Adobe公司近日宣布&#xff0c;继2月推出测试版后&#xff0c;Acrobat AI 助手已在Acrobat Reader、桌面和网页上全面推出。以每月4.99美元的附加订阅形式提供&#x…

PgSQL之WITH Queries/Statement

PostgreSQL WITH 子句 在 PostgreSQL 中&#xff0c;WITH 子句提供了一种编写辅助语句的方法&#xff0c;以便在更大的查询中使用。 WITH 子句有助于将复杂的大型查询分解为更简单的表单&#xff0c;便于阅读。这些语句通常称为通用表表达式&#xff08;Common Table Express…

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式&#xff0c;因为不能自动检测副作用&#xff0c;有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…

函数模板(C++)

目录 一、介绍 二、注意事项 三、排序函数 1、交换函数模板 2、排序算法 3、打印函数 4、测试函数 四、普通函数与函数模板 区别 调用规则 五、模板局限性 六、类模板 类模板与函数模板区别 1、类模板没有自动类型推导使用方式 2、类模板在模板参数列表中可以有默认…

【分享 网络墙测试】检测当前网络是否能用于其他平台,速度检测

文章日期&#xff1a;2024.04.17 类型&#xff1a;软件分享 兼容&#xff1a;win10 / win11 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&#xff09…

Springboot+Vue项目-基于Java+MySQL的网上超市系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换&#xff0c;包括 UTF-8、UTF-16、UTF-32 std::…