娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月07日(星期一)

2020年04月07日 | 【Contiki學習】01.Contiki-stm32系統下實現serial-shell功能

發布者:JoyfulSerenade 來源: eefocus關鍵字:Contiki學習  Contiki  stm32系統  serial-shell功能 手機看文章 掃描二維碼
隨時隨地手機看文章

一,背景介紹


之前通過網上收集資料(資料后期整理之后會在博客分享),在stm32上面跑通了,就是實現了簡單的點燈程序,以及串口輸出。


但是后期開發使用肯定需要用到shell,經過一番折騰后小有收獲。


在這說一下開發環境:IAR+stm32vet6(ST官方庫3.5+contiki3.0)


二,準備工作


1,在contiki源碼中按照目錄提取以下文件:

ps. stm32_shell.c是自行添加的代碼


三,源碼分析


1,先看一下main函數:


int main()

{

  dbg_setup_uart();

  led_init();

  printf("Initialisingrn");

  

  clock_init();

  process_init();

  //shell serial_line 初始化

  uart1_set_input(serial_line_input_byte);

  serial_line_init();

  //

  process_start(&etimer_process, NULL);

  autostart_start(autostart_processes);

  printf("Processes runningrn");

  while(1) {

    do 

    {

    } 

    while(process_run() > 0);

    idle_count++;

    /* Idle! */

    /* Stop processor clock */

    /* asm("wfi"::); */ 

  }

  return 0;

}


需要注意的是:


  //shell serial_line 初始化

  uart1_set_input(serial_line_input_byte);

  serial_line_init();

  //


2,usrt1_set_input定義在串口底層驅動里面

static int (* uart1_input_handler)(unsigned char c);


void uart1_set_input(int (* input)(unsigned char c))

{

    uart1_input_handler = input;

}

先建立一個函數指針:


static int (* uart1_input_handler)(unsigned char c);

再通過

uart1_set_input(serial_line_input_byte);

將(*uart1_input_handler)指向 serial_line_input_byte()函數,

這樣就可以通過調用uart1_input_handler();將串口接到的數據導入serial_line中,從而可以通過serial_line_process進程進行命令分析做出相應處理。


uart1_input_handler();的調用寫在串口中斷中即可:


void USART1_IRQHandler(void)

{

      ENERGEST_ON(ENERGEST_TYPE_IRQ);

      if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

    {

if(uart1_input_handler != NULL)

{

  /* Read one byte from the receive data register */

uint8_t buf = USART_ReceiveData(USART1);

uart1_input_handler(buf);

}

    }

ENERGEST_OFF(ENERGEST_TYPE_IRQ);

}


3,通過上面的處理已經把串口接收到的數據導入serial_line中了,當然串口配置初始化在這就不用多說了,接下來就是要把shell進程加入系統了:


調用serial_shell_init()函數即可


定義:


void

serial_shell_init(void)

{

  process_start(&serial_shell_process, NULL);

}

就是開啟serial_shell_process進程,但是我這邊新建立一個進程,用于后續其他自定義的shell命令的初始化:


#include "contiki.h"

#include "shell.h"

#include "serial-shell.h"


PROCESS(stm32_shell_process, "STM32 Contiki Shell");


PROCESS_THREAD(stm32_shell_process, ev, data)

{

    PROCESS_BEGIN();


    serial_shell_init();//初始化shell


    PROCESS_END();

}


然后再將改進程加入main函數即可,

到這邊就已經完成了shell的功能,可以通過串口看見

發送 help(加回車)

這是一些默認的命令,你也可以自己定義一些命令,通過閱讀shell部分的源碼進一步了解原理。


4,在shell.c中可以看見關于上面打印出來的命令的定義,其實每個shell命令對應一個process,


PROCESS(help_command_process, "help");

SHELL_COMMAND(help_command, "help", "help: shows this help",

      &help_command_process);

SHELL_COMMAND(question_command, "?", "?: shows this help",

      &help_command_process);

PROCESS(shell_killall_process, "killall");

SHELL_COMMAND(killall_command, "killall", "killall: stop all running commands",

      &shell_killall_process);

PROCESS(shell_kill_process, "kill");

SHELL_COMMAND(kill_command, "kill", "kill : stop a specific command",

      &shell_kill_process);

PROCESS(shell_null_process, "null");

SHELL_COMMAND(null_command, "null", "null: discard input",

      &shell_null_process);

PROCESS(shell_exit_process, "exit");

SHELL_COMMAND(exit_command, "exit", "exit: exit shell",

      &shell_exit_process);

SHELL_COMMAND(quit_command, "quit", "quit: exit shell",

      &shell_exit_process);

PROCESS_THREAD(shell_kill_process, ev, data)

{

  struct shell_command *c;

  char *name;

  PROCESS_BEGIN();


  name = data;

  if(name == NULL || strlen(name) == 0) {

    shell_output_str(&kill_command,

     "kill : command name must be given", "");

  }



  for(c = list_head(commands);

      c != NULL;

      c = c->next) {

    if(strcmp(name, c->command) == 0 &&

       c != &kill_command &&

       process_is_running(c->process)) {

      command_kill(c);

      PROCESS_EXIT();

    }

  }


  shell_output_str(&kill_command, "Command not found: ", name);

  

  PROCESS_END();

}


5,添加自定義命令通過一下方式即可:


#include "contiki.h"

#include "shell.h"


#include "stdio.h"

#include "string.h"

#include "stm32f10x.h"


PROCESS(shell_blink_process, "shell blink");

SHELL_COMMAND(blink_command, "blink",

              "blink on/off : led on/off", &shell_blink_process);

static void

led_init()

{

    GPIO_InitTypeDef GPIO_InitStructure;


    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);


    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;



    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;

    GPIO_Init(GPIOF, &GPIO_InitStructure);

}



/**

 * brief

 * param

 *

 */

static void

led_on()

{

    GPIO_SetBits(GPIOF, GPIO_Pin_7);

}


static void

led_off()

{

    GPIO_ResetBits(GPIOF, GPIO_Pin_7);

}


PROCESS_THREAD(shell_blink_process, ev, data)

{

    PROCESS_BEGIN();

    if(data != NULL)

    {

        if(strcmp(data, "on"))

        {

            led_on();

        }

        else if(strcmp(data, "off"))

        {

            led_off();

        }

        else

        {

            printf("Invalid param!n");

        }

    }



    PROCESS_END();

}


void

shell_blink_init(void)

{

    led_init();

    shell_register_command(&blink_command);

}


a,通過SHELL_COMMAND(blink_command, "blink",

              "blink on/off : led on/off", &shell_blink_process);定義shell命令;

b,通過shell_register_command(&blink_command);在shell初始化的時候一并初始化即可


關鍵字:Contiki學習  Contiki  stm32系統  serial-shell功能 引用地址:【Contiki學習】01.Contiki-stm32系統下實現serial-shell功能

上一篇:STM32芯片無法正常工作的現象及原因分析集錦
下一篇:ucosii移植到STM32-F0/F1/F2

推薦閱讀

國慕尼黑訊——如今,電源制造商需要使用能夠提供最佳性能、效率、穩健性且便于設計的器件。為此,英飛凌科技股份公司(FSE: IFX / OTCQX: IFNNY)推出了第5代固定頻率700 V/800 V CoolSETTM。該解決方案將PMW控制器IC和最新700V和800V CoolMOS? P7 MOSFET集成到一個封裝中,在單一平臺上就能支持隔離型和非隔離型反激式拓撲。全新的固定頻率...
近日,國家發改委確定了2018年度國家地方聯合工程研究中心名單,依托國網信通產業集團智芯公司申報的“能源互聯網智能終端核心芯片可靠性技術”國家地方聯合工程研究中心獲批建設。國家地方聯合工程研究中心是面向國家戰略性新興產業領域,解決制約產業發展瓶頸的關鍵核心技術問題,建立科研與產業的橋梁和紐帶,是促進科研成果向現實生產力轉化的國家級...
精確控制液滴行為是冷卻降溫、防結冰、微流控等應用領域的關鍵。當前研究主要集中于單一液滴移動行為,此時僅需使液滴的驅動力大于其移動時受到的固定阻力。調節液滴所受驅動力及阻力的相對大小,實現復雜的液滴行為,仍然面臨嚴峻挑戰。 在國家自然科學基金委、科技部和中國科學院的支持下,中科院化學研究所綠色印刷重點實驗室宋延林課題組近年來致力...
近日,青島市新舊動能轉換綜合試驗區建設辦公室公布了青島市新舊動能轉換重點產業鏈項目名單(2021年第一批),共255個項目入選,總投資3908億元。其中涵蓋多項集成電路相關項目,具體來看,續建項目包括了富士康半導體高端封測項目、青島微電子產業園項目、青島融合半導體有限公司高端封測廠房項目等;新開工項目包括5G射頻研發和封裝項目、新型電子元器...

史海拾趣

問答坊 | AI 解惑

請問各位大俠LM7805在哪個庫中啊

請問各位大俠LM7805在哪個庫中啊   在下謝謝了…

查看全部問答∨

國內芯片廠商近況,部分找到藍海?

看到一篇新聞,與大家分享下: 本土芯片商細分市場 部分找到藍海 http://www.nncyjs.com/manufacture/2010/0125/article_2403.html 安凱營業收入已經超過2億元,芯片出貨量超過千萬片,包括好記星、萬虹、諾亞舟等國內教育電子產品前幾大廠 ...…

查看全部問答∨

2410的觸摸屏驅動問題求助

ret = request_irq(IRQ_ADC, s3c2410_isr_adc, SA_INTERRUPT,DEVICE_NAME, s3c2410_isr_adc); 申請了adc中斷,但是無論如何無法進入中斷處理程序s3c2410_isr_adc() 我在s3c2410_isr_adc()第一行做了一個printk語句. 請教大概是什么原因?…

查看全部問答∨

求~ GPRS 的AT指令~

剛用西門子的 C60加上 移動的飛信 做了個隨機聊天 的東西.... 不過貌似不好玩.. 后來發現這手機貌似還能當GPRS模塊用~ at+cgdcont=1,"ip","cmnet" OK at+cgdcont? +CGDCONT: 1,"IP","cmnet","",0,0 OK 不知道這兩 ...…

查看全部問答∨

WinCE不支持cab文件,需要安裝什么組件?

系統不是我們燒錄的,是別的公司提供的,請問需要安裝什么?…

查看全部問答∨

誠心申請使用89美金FPGA開發板試用

自己也一直想購買一個開發板,但是對我一個普通的學生而言主要是因為經濟上的承受能力,使自己短時間內無法擁有自己的開發板, 而且自己從大二開始就已經在學習VerilogHDL方面的知識和一些關于硬件的東西。對于一系列的軟件也都比較熟悉,唯一的不 ...…

查看全部問答∨

串口通信方式0中,RXD引腳電平

大俠們,,                   在串口工作方式0中,RXD 作為數據串行發送的引腳,TXD作為同步時鐘移位脈沖引腳。           ...…

查看全部問答∨

怎么讓一個結構體首地址8字節對齊?

一份有關一個結構體首地址8字節對齊對話…

查看全部問答∨

本人DIY隱形UFO公開一下

歷經5年潛心研究,終于DIY隱形UFO,特在此開源一下:如下…

查看全部問答∨

MSP430Ware學習筆記 UART ACLK 9600-8-N-1

1.初始化UART0之前需要先初始化ACLK、SMCLK和MCLK。示例代碼中使用XT1,ACLK為32768,SMCLK和MCLK約為8MHZ。2.UART的時鐘可以參考ACLK或者SMCLK,本例參考ACLK。由于參考ACLK時鐘,所以串口速率不能超過32768。選擇9600較為合適。3.MSP430波特率的 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 古丈县| 沿河| 南陵县| 临潭县| 洞口县| 陆丰市| 昆山市| 丽江市| 横峰县| 万荣县| 景宁| 沂源县| 康乐县| 西乌珠穆沁旗| 新源县| 长兴县| 贵港市| 湟中县| 二连浩特市| 安西县| 搜索| 临江市| 郸城县| 乐至县| 中阳县| 泰兴市| 济宁市| 扶风县| 旺苍县| 华宁县| 景东| 唐海县| 朝阳区| 东乡族自治县| 西城区| 定边县| 乌鲁木齐县| 道真| 忻城县| 枣阳市| 抚州市|