快捷搜索:  汽车  科技

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)USER按键信息已完美监听到了。3、生成执行文件tl_key_test4、开发板eth0接好网线,获得的IP是 192.168.31.40 通过OpenSSH进行文件传输 命令行命令5、通过开发板串口进入开发板的命行,可以看见传递过来的文件,并能执行

本次试用测试的开发板是创龙科技2021年的一款新品——TL335x-EVM-S,它是一款基于TI Sitara系列AM3352/AM3354/AM3359 ARM Cortex-A8高性能低功耗处理器设计的工业级别开发板。由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(1)

该开发板接口资源丰富,引出双路千兆网口、LCD、HDMI、GPMC、CAN等接口,可进行产品方案评估与技术预研。被应用在通讯管理、数据采集、人机交互、运动控制、智能电力等领域上。

1、尝试一下应用发方式使用USER按键

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(2)


2、监听用户按键USER设备节点状态,检测按键事件
在虚拟机的Ubuntut系统里,先建一个文件夹src 下面两个文件makefile和tl_key_test.c
tl_key_test.c脚本

  1. /* Copyright 2018 Tronlong Elec. Tech. Co. Ltd. All Rights Reserved. */

  2. #include <stdio.h>
  3. #include <stdbool.h>
  4. #include <libgen.h>
  5. #include <signal.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <assert.h>
  9. #include <unistd.h>
  10. #include <errno.h>
  11. #include <fcntl.h>
  12. #include <getopt.h>
  13. #include <sys/select.h>
  14. #include <linux/input.h>

  15. #define INADEQUATE_CONDItiONS 3

  16. typedef enum { KEY_CODE_NONE = 0 KEY_CODE_USER0 KEY_CODE_USER1 } KeyCode;

  17. /* Exit flag */
  18. volatile bool g_quit = false;

  19. /* Short option names */
  20. static const char g_shortopts [] = ":d:vh";

  21. /* Option names */
  22. static const struct option g_longopts [] = {
  23. { "device" required_argument NULL 'd' }
  24. { "version" no_argument NULL 'v' }
  25. { "help" no_argument NULL 'h' }
  26. { 0 0 0 0 }
  27. };

  28. static void usage(FILE *fp int argc char **argv) {
  29. fprintf(fp
  30. "Usage: %s [options]\n\n"
  31. "Options:\n"
  32. " -d | --device Device \n"
  33. " -v | --version display version information\n"
  34. " -h | --help Show help content\n\n"
  35. "" basename(argv[0]));
  36. }

  37. static void opt_parsing_err_handle(int argc char **argv int flag) {
  38. /* Exit IF no input parameters are entered */
  39. int state = 0;
  40. if (argc < 2) {
  41. printf("No input parameters are entered please check the input.\n");
  42. state = -1;
  43. } else {
  44. /* Feedback Error parameter information then exit */
  45. if (optind < argc || flag) {
  46. printf("Error: Parameter parsing faiLED\n");
  47. if (flag)
  48. printf("\tunrecognized option '%s'\n" argv[optind-1]);

  49. while (optind < argc) {
  50. printf("\tunrecognized option '%s'\n" argv[optind ]);
  51. }

  52. state = -1;
  53. }
  54. }

  55. if (state == -1) {
  56. printf("Tips: '-h' or '--help' to get help\n\n");
  57. exit(2);
  58. }
  59. }

  60. void sig_handle(int arg) {
  61. g_quit = true;
  62. }

  63. static int check_button_pressed(int fd) {
  64. assert(fd >= 0);

  65. /* wait button being pressed or released. */
  66. fd_set input;
  67. FD_ZERO(&input);
  68. FD_SET(fd &input);
  69. int ret = select(fd 1 &input NULL NULL NULL);
  70. if (ret < 0) {
  71. printf("%s" strerror(errno));
  72. return -1;
  73. }

  74. /* read event */
  75. struct input_event buf;
  76. if (read(fd &buf sizeof(struct input_event)) < 0) {
  77. printf("%s" strerror(errno));
  78. return -1;
  79. }

  80. /* Check the input_event value */
  81. switch (buf.code) {
  82. case KEY_PROG1:
  83. /* 1: pressed; 0: released */
  84. if (buf.value == 1)
  85. return KEY_CODE_USER0;
  86. break;
  87. case KEY_PROG2:
  88. if (buf.value == 1)
  89. return KEY_CODE_USER1;
  90. break;
  91. default:
  92. return KEY_CODE_NONE;
  93. break;
  94. }

  95. return KEY_CODE_NONE;
  96. }

  97. int main(int argc char **argv) {
  98. int c = 0;
  99. int flag = 0;
  100. char *dev;

  101. /* Parsing input parameters */
  102. while ((c = getopt_long(argc argv g_shortopts g_longopts NULL)) != -1) {
  103. switch (c) {
  104. case 'd':
  105. dev = optarg;
  106. break;

  107. case 'v':
  108. /* Display the version */
  109. printf("version : 1.0\n");
  110. exit(0);

  111. case 'h':
  112. usage(stdout argc argv);
  113. exit(0);

  114. default :
  115. flag = 1;
  116. break;
  117. }
  118. }

  119. opt_parsing_err_handle(argc argv flag);

  120. /* Ctrl c handler */
  121. signal(SIGINT sig_handle);

  122. int fd = open(dev O_RDONLY);
  123. if (fd < 0) {
  124. printf("Error: Failed to open device\n");
  125. return INADEQUATE_CONDITIONS;
  126. }
  127. printf("Please press the key to test.\n");

  128. while (!g_quit) {
  129. int key_code = check_button_pressed(fd);
  130. if (key_code < 0)
  131. continue;

  132. switch (key_code) {
  133. case KEY_CODE_USER0:
  134. printf("Key user0 pressed!\n");
  135. break;
  136. case KEY_CODE_USER1:
  137. printf("Key user1 pressed!\n");
  138. break;
  139. default:
  140. break;
  141. }
  142. }

  143. close(fd);
  144. return 0;
  145. }

  146. tl_key_test:tl_key_test.c
  147. $(CC) -Wall [ DISCUZ_CODE_513 ]lt; -o $@

  148. clean:
  149. rm -f tl_key_test *.o *~

  150. install:
  151. cp tl_key_test $(PREFIX)

3、生成执行文件tl_key_test

  1. source /home/tronlong/ti-processor-sdk-linux-rt-am335x-evm-04.03.00.05/linux-devkit/environment-setup
  2. make

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(3)


4、开发板eth0接好网线,获得的IP是 192.168.31.40 通过OpenSSH进行文件传输 命令行命令

  1. scp tl_key_test root@192.168.31.40:/

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(4)


5、通过开发板串口进入开发板的命行,可以看见传递过来的文件,并能执行

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(5)

armcortex内核怎么选(Cortex-A8开发板应用开发测试之USER按键)(6)

USER按键信息已完美监听到了。

猜您喜欢: