自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED

開發(fā)
OpenHarmony分為輕量系統(tǒng)、小型系統(tǒng)、標(biāo)準(zhǔn)系統(tǒng),目前對(duì)應(yīng)LiteOS-M、LiteOS-A、Linux內(nèi)核。但好像并沒有說一定是按照使用內(nèi)核來劃分。

[[425375]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

前言:

OpenHarmony分為輕量系統(tǒng)、小型系統(tǒng)、標(biāo)準(zhǔn)系統(tǒng),目前對(duì)應(yīng)LiteOS-M、LiteOS-A、Linux內(nèi)核。但好像并沒有說一定是按照使用內(nèi)核來劃分。我們這里姑且先這么區(qū)分。本文使用的是比較新的OpenHarmony 3.0 LTS版本,Linux內(nèi)核,編譯標(biāo)準(zhǔn)系統(tǒng)。官方文檔已經(jīng)說明了,如何使用DevEco Studio開發(fā)hap包,并運(yùn)行在開發(fā)板,但是ACE框架能力有限。設(shè)備硬件開發(fā)還是需要C,所以這篇文章,將在標(biāo)準(zhǔn)系統(tǒng)下編譯C控制Hi3516開發(fā)板的LED閃爍。

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)

1.環(huán)境準(zhǔn)備

3.0源碼下載:

  1. repo init -u https://gitee.com/openharmony/manifest.git -b OpenHarmony-3.0-LTS --no-repo-verify 
  2. repo sync -c 
  3. repo forall -c 'git lfs pull' 

區(qū)別于2.0需要安裝ruby,其他基本都一樣。

  1. sudo apt-get install ruby-full 

編譯命令

  1. build/prebuilts_download.sh 
  2. ./build.sh --product-name Hi3516DV300 

2.編寫helloworld.c

在applications\standard目錄下新建一個(gè)app目錄來存放.c的業(yè)務(wù)代碼。比如applications\standard\app\helloworld.c內(nèi)容容下:

  1. #include <stdio.h> 
  2. int main(){ 
  3.     printf("Hello world.\n"); 
  4.     return 0; 

然后在當(dāng)前目錄新建編譯腳本BUILD.gn內(nèi)容如下:

  1. import("//build/ohos.gni"
  2. import("//drivers/adapter/uhdf2/uhdf.gni"
  3.  
  4. ohos_executable("helloworld") { 
  5.   sources = [ 
  6.     "helloworld.c" 
  7.   ] 
  8.   subsystem_name = "applications" 
  9.   part_name = "prebuilt_hap" 

然后添加到編譯框架applications\standard\hap\ohos.build增加如下內(nèi)容。

  1. "//applications/standard/app:helloworld" 

最后執(zhí)行編譯命令即可,開發(fā)板使用的是Hi3516,在不指定out目錄時(shí),缺省生成在/system/lib64或/system/lib下。

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)

3.點(diǎn)亮開發(fā)板LED

能打印helloworld說明環(huán)境是沒問題的,接下來嘗試點(diǎn)亮開發(fā)板的LED。查看Hi3516DV300原理圖,請(qǐng)?zhí)砑渔溄用枋?/p>

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)
OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)
OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)

Hi3516DV300共有4層板,由原理圖可知:最上層板的紅外補(bǔ)光燈接在GPIO5_1,綠色LED指示燈在GPIO2_3,核心板的紅色LED在GPIO3_4。

接下來參考OpenHarmony GPIO驅(qū)動(dòng)說明。

確定GPIO管腳號(hào)

不同SOC芯片由于其GPIO控制器型號(hào)、參數(shù)、以及控制器驅(qū)動(dòng)的不同,GPIO管腳號(hào)的換算方式不一樣。

  • Hi3516DV300

控制器管理12組GPIO管腳,每組8個(gè)。

GPIO號(hào) = GPIO組索引 (0~11) * 每組GPIO管腳數(shù)(8) + 組內(nèi)偏移

舉例:GPIO10_3的GPIO號(hào) = 10 * 8 + 3 = 83

  • Hi3518EV300

控制器管理10組GPIO管腳,每組10個(gè)。

GPIO號(hào) = GPIO組索引 (0~9) * 每組GPIO管腳數(shù)(10) + 組內(nèi)偏移

舉例:GPIO7_3的GPIO管腳號(hào) = 7 * 10 + 3 = 73

由此可以得出:

  1. GPIO5_1 = 5 * 8 + 1; 
  2. GPIO2_3 = 2 * 8 + 3; 
  3. GPIO3_4 = 3 * 8 + 4; 

 然后新建applications\standard\app\ledtest.c內(nèi)容如下

  1. #include <stdlib.h>     // standard library 標(biāo)準(zhǔn)庫函數(shù)頭文件 
  2. #include <stdio.h>      // standard input output 標(biāo)準(zhǔn)輸入輸出函數(shù) 
  3. #include <stdint.h>     // 定義了擴(kuò)展的整數(shù)類型和宏 
  4.  
  5. #include <unistd.h>     // POSIX 系統(tǒng) API 訪問功能的頭文件 
  6. #include <fcntl.h>      // unix標(biāo)準(zhǔn)中通用的頭文件 define O_WRONLY and O_RDONLY   
  7.  
  8. // #include <string.h> 
  9. #define GPIO_DIR_IN "in" 
  10. #define GPIO_DIR_OUT "out" 
  11. #define GPIO_VAL_LOW 0 
  12. #define GPIO_VAL_HIGHT 1 
  13.  
  14. int32_t GpioSetDir(uint16_t gpio, char* dir){ 
  15.     char path[100] = {0}; 
  16.     sprintf(path,"echo %d > /sys/class/gpio/export",gpio); 
  17.     system(path); 
  18.     printf("info:%s\n",path); 
  19.  
  20.     char direction[100] = {0}; 
  21.     sprintf(direction,"echo %s > /sys/class/gpio/gpio%d/direction",dir,gpio); 
  22.     system(direction); 
  23.     printf("info:%s\n",direction); 
  24.     return 0; 
  25.  
  26. int32_t GpioWrite(uint16_t gpio, uint16_t val) 
  27.     char path[100] = {0}; 
  28.     sprintf(path,"echo %d > /sys/class/gpio/gpio%d/value",val,gpio); 
  29.     system(path); 
  30.     printf("info:%s\n",path); 
  31.     return 0; 
  32.  
  33. int main(){ 
  34.     uint16_t  GPIO5_1 = 5 * 8 + 1; 
  35.     uint16_t  GPIO2_3 = 2 * 8 + 3; 
  36.     uint16_t  GPIO3_4 = 3 * 8 + 4; 
  37.      
  38.     printf("LED test start\n"); 
  39.      
  40.     int32_t ret; 
  41.     // uint16_t val; 
  42.     ret = GpioSetDir(GPIO5_1,GPIO_DIR_OUT); 
  43.     if (ret != 0) { 
  44.         printf("GpioSerDir: failed, ret %d\n", ret); 
  45.         return 0; 
  46.     } 
  47.     ret = GpioSetDir(GPIO2_3,GPIO_DIR_OUT); 
  48.     if (ret != 0) { 
  49.         printf("GpioSerDir: failed, ret %d\n", ret); 
  50.         return 0; 
  51.     } 
  52.     ret = GpioSetDir(GPIO3_4,GPIO_DIR_OUT); 
  53.     if (ret != 0) { 
  54.         printf("GpioSerDir: failed, ret %d\n", ret); 
  55.         return 0; 
  56.     } 
  57.  
  58.     while(1) 
  59.     { 
  60.         GpioWrite(GPIO5_1, GPIO_VAL_HIGHT); 
  61.         usleep(1000000); 
  62.         GpioWrite(GPIO5_1, GPIO_VAL_LOW); 
  63.         usleep(1000000); 
  64.         GpioWrite(GPIO2_3, GPIO_VAL_HIGHT); 
  65.         usleep(1000000); 
  66.         GpioWrite(GPIO2_3, GPIO_VAL_LOW); 
  67.         usleep(1000000); 
  68.         GpioWrite(GPIO3_4, GPIO_VAL_HIGHT); 
  69.         usleep(1000000); 
  70.         GpioWrite(GPIO3_4, GPIO_VAL_LOW); 
  71.         usleep(1000000); 
  72.     } 
  73.     return 0; 

 將業(yè)務(wù)代碼添加到BUILD.gn

  1. import("//build/ohos.gni"
  2. import("//drivers/adapter/uhdf2/uhdf.gni"
  3.  
  4. ohos_executable("helloworld") { 
  5.   sources = [ 
  6.     "helloworld.c" 
  7.   ] 
  8.   subsystem_name = "applications" 
  9.   part_name = "prebuilt_hap" 
  10.  
  11. ohos_executable("ledtest") { 
  12.   sources = [ 
  13.     "ledtest.c" 
  14.   ] 
  15.   subsystem_name = "applications" 
  16.   part_name = "prebuilt_hap" 

 applications\standard\hap\ohos.build

  1. "//applications/standard/app:ledtest" 

之后將程序燒錄到開發(fā)板,執(zhí)行./system/bin/ledtest

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)

就可以看到LED閃爍起來了。

OHOS3.0標(biāo)準(zhǔn)系統(tǒng)編寫C程序控制LED-鴻蒙HarmonyOS技術(shù)社區(qū)

本來是打算使用鴻蒙的GPIO接口來實(shí)現(xiàn)這個(gè)功能的,不過調(diào)試了很久也沒調(diào)通,最后無奈還是用的system自己實(shí)現(xiàn)的GPIO函數(shù)。有沒使用OpenHarmony的GPIO成功的小伙伴可以留言一起交流啊。

文章相關(guān)附件可以點(diǎn)擊下面的原文鏈接前往下載

https://harmonyos.51cto.com/resource/1269

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來源: 鴻蒙社區(qū)
相關(guān)推薦

2021-11-23 15:35:05

鴻蒙HarmonyOS應(yīng)用

2021-10-20 10:04:47

鴻蒙HarmonyOS應(yīng)用

2021-11-08 07:19:45

鴻蒙HarmonyOS應(yīng)用

2022-09-27 15:57:20

OHOS代碼倉庫

2021-12-09 10:11:04

鴻蒙HarmonyOS應(yīng)用

2022-09-13 15:54:41

samgr鴻蒙

2022-09-08 15:27:11

OHOSSafwk組件

2023-12-29 08:45:40

Python3.8鴻蒙解釋器

2021-10-09 10:12:39

鴻蒙HarmonyOS應(yīng)用

2022-10-12 15:14:08

開機(jī)動(dòng)畫鴻蒙

2022-09-15 14:56:12

GDB調(diào)試鴻蒙

2010-11-08 11:41:38

2010-10-08 09:26:45

JavaScript程

2022-08-10 15:58:54

LED燈鴻蒙

2022-04-02 20:45:04

Hi3516開發(fā)板操作系統(tǒng)鴻蒙

2021-09-16 15:04:28

鴻蒙HarmonyOS應(yīng)用

2022-01-07 09:56:16

鴻蒙HarmonyOS應(yīng)用

2020-07-29 17:01:29

VSCode RTOSPython編程

2022-06-10 14:37:24

鴻蒙操作系統(tǒng)

2022-09-13 16:10:15

鴻蒙操作系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)