久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3430|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

ArduinoMega2560引腳操作底層庫,能夠提高操作效率和速度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:282138 發(fā)表于 2018-12-11 10:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
之前做項目的時候發(fā)現(xiàn) digitalWrite() 耗時能達到30us,導(dǎo)致系統(tǒng)卡頓,一怒之下自行開發(fā)了底層引腳操作函數(shù),開發(fā)了N個項目也沒發(fā)現(xiàn)有什么問題

頭文件在這里

  1. /*------------------------------

  2. [name]    Gpio.h

  3. [date]    2018.5.16 17:12

  4. [note]    Designed by TFD Studio

  5. ------------------------------*/

  6. #ifndef Gpio_h
  7. #define Gpio_h

  8. //---------------/* Headerfile */---------------//

  9. #include <Arduino.h>

  10. //---------------/* Debug */---------------//

  11.     /* Level */

  12. #define        HIGH    1
  13. #define        LOW        0
  14. #define        OUTPUT    1
  15. #define        INPUT    0

  16.     /* Analog pins */

  17. #define        A0   (54)
  18. #define        A1   (55)
  19. #define        A2   (56)
  20. #define        A3   (57)
  21. #define        A4   (58)
  22. #define        A5   (59)
  23. #define        A6   (60)
  24. #define        A7   (61)
  25. #define        A8   (62)
  26. #define        A9   (63)
  27. #define        A10  (64)
  28. #define        A11  (65)
  29. #define        A12  (66)
  30. #define        A13  (67)
  31. #define        A14  (68)
  32. #define        A15  (69)

  33.     /* PWM Defaults */

  34. #define        DEFAULT_PWM_FREQUENCY    50
  35. #define        DEFAULT_PWM_LEVEL        HIGH
  36. #define        DEFAULT_PWM_GRADE        100

  37. //---------------/* Class */---------------//

  38. class GPIO{

  39. private:

  40.         /* Normal */

  41.     uint8_t  _bit_;
  42.     volatile uint8_t* _mode_;
  43.     volatile uint8_t* _pin_;
  44.     volatile uint8_t* _port_;

  45.         /* SoftPWM */

  46.     unsigned int grade = DEFAULT_PWM_GRADE;
  47.     unsigned int dutycycle = 0;
  48.     unsigned int factor = 0;
  49.     unsigned int frequency = DEFAULT_PWM_FREQUENCY;
  50.     bool level = DEFAULT_PWM_LEVEL;
  51.     bool enable = false;
  52.     unsigned long int timemark, timecycle;

  53. public:

  54.     void setPin(unsigned char);

  55.         /* Normal */

  56.     void write(unsigned char);
  57.     void mode(unsigned char);

  58.     void high();
  59.     void low();

  60.     void input();
  61.     void output();

  62.     unsigned char read();

  63.         /* SoftPWM */

  64.     void pwmLevel(bool);
  65.     void pwmDuty(unsigned int);
  66.     void pwmGrade(unsigned int);
  67.     void pwmFreq(unsigned int);

  68.     void pwmStart();
  69.     void pwmStop();

  70.     bool pwmThread();

  71. };

  72. #endif
復(fù)制代碼





實現(xiàn)在這里
  1. /*------------------------------

  2. [name]        Gpio.cpp

  3. [date]        2018.5.16 17:12

  4. [note]        Designed by TFD Studio

  5. ------------------------------*/

  6. #include "Gpio.h"

  7. //---------------/* Set */---------------//

  8. void GPIO::setPin(unsigned char _id)
  9. {
  10.         _bit_ = digitalPinToBitMask(_id);
  11.         _mode_ = portModeRegister(digitalPinToPort(_id));
  12.         _port_ = portOutputRegister(digitalPinToPort(_id));
  13.         _pin_ = portInputRegister(digitalPinToPort(_id));
  14. }

  15. //---------------/* Control */---------------//

  16. void GPIO::write( unsigned char _level)
  17. {
  18.         if (_level)
  19.                 *_port_ |= _bit_;
  20.         else
  21.                 *_port_ &= ~_bit_;
  22. }

  23. void GPIO::mode(unsigned char _mode)
  24. {
  25.         if (_mode)
  26.                 *_mode_ |= _bit_;
  27.         else
  28.                 *_mode_ &= ~_bit_;
  29. }

  30. void GPIO::high()
  31. {
  32.         *_port_ |= _bit_;
  33. }

  34. void GPIO::low()
  35. {
  36.         *_port_ &= ~_bit_;
  37. }

  38. void GPIO::input()
  39. {
  40.         *_mode_ &= ~_bit_;
  41. }

  42. void GPIO::output()
  43. {
  44.         *_mode_ |= _bit_;
  45. }

  46. unsigned char GPIO::read()
  47. {
  48.         if (*_pin_ & _bit_)
  49.                 return 1;
  50.         else
  51.                 return 0;
  52. }

  53. //---------------/* SoftPWM */---------------//

  54. void GPIO::pwmLevel(bool _level)
  55. {
  56.         level = _level;
  57. }

  58. void GPIO::pwmDuty(unsigned int _dutycycle)
  59. {
  60.         if (!level)
  61.                 dutycycle = grade - _dutycycle;
  62.         else
  63.                 dutycycle = _dutycycle;
  64. }

  65. void GPIO::pwmGrade(unsigned int _grade)
  66. {
  67.         grade = _grade;
  68. }

  69. void GPIO::pwmFreq(unsigned int _freq)
  70. {
  71.         frequency = _freq;
  72. }

  73. void GPIO::pwmStart()
  74. {
  75.         enable = true;
  76.         timecycle = 1000000 / (frequency * grade);
  77.         timemark = micros();
  78. }

  79. void GPIO::pwmStop()
  80. {
  81.         enable = false;
  82.         if (!level)
  83.                 *_port_ |= _bit_;
  84.         else
  85.                 *_port_ &= ~_bit_;
  86. }

  87. bool GPIO::pwmThread()
  88. {
  89.         if (enable && micros() - timemark >= timecycle)
  90.         {
  91.                 timemark += timecycle;

  92.                 factor++;
  93.                 if (factor > grade)
  94.                         factor = 1;
  95.                 if (factor <= dutycycle)
  96.                         *_port_ |= _bit_;
  97.                 else
  98.                         *_port_ &= ~_bit_;
  99.                 return true;
  100.         }
  101. }
復(fù)制代碼



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:137736 發(fā)表于 2018-12-15 15:12 | 只看該作者
高!發(fā)現(xiàn)Arduino確實慢,部分代碼用c寫就好了。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费视频网站高清观看视频 | 粉色午夜视频 | 日本a v在线播放 | 欧美成人精品一区二区三区 | 日韩精品一区二区三区中文在线 | 青青草一区 | 色综合久久伊人 | 国产视频一区二区三区四区五区 | 亚洲区一区二 | 国产精品精品久久久 | 日韩中文字幕在线免费 | 91久久北条麻妃一区二区三区 | 在线免费观看毛片 | 日韩在线精品视频 | 亚洲精品一区二区网址 | 国产成人免费视频网站高清观看视频 | 欧美激情第一区 | 中文字幕99 | 麻豆精品一区二区三区在线观看 | 欧美8一10sex性hd| 久久久久一区二区三区 | 亚洲二区精品 | 久久久久久久久久久久亚洲 | 青青草av网站 | 亚洲成人福利在线观看 | 97在线观看| 久久久久9999亚洲精品 | 神马影院一区二区三区 | 久久夜夜 | 亚洲精品自拍视频 | 一区在线免费视频 | 亚洲视频在线一区 | 国产高清在线视频 | 国产精品一卡二卡三卡 | 中文字幕日韩一区 | 黄色片av| 国产乱码久久久久久 | 九九综合| a国产一区二区免费入口 | 九九热在线观看视频 | 久久久久久久久久久国产 |