微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > Scons的使用和使用线程循环点亮用户灯

Scons的使用和使用线程循环点亮用户灯

时间:10-02 整理:3721RD 点击:

该体验主要使用C语言,在一个线程里循环点亮LED,话不多说上代码以下是主程序代码:





  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <signal.h>
  6. #include <fcntl.h>
  7. #include <unistd.h>
  8. #include <pthread.h>

  9. #include "led_hw.h"
  10. #include "error_util.h"


  11. int abort_program = 0;
  12. pthread_t blink_led_thread;


  13. void exit_program(int sig)
  14. {
  15.         abort_program = 1;
  16. }


  17. void *blink_led(void *arg)
  18. {

  19.         printf("Executing thread\n");

  20.         while(1)
  21.         {
  22.                 if (write_led(LED_ON) < 0)
  23.                 {
  24.                         printf("Write to LED failed. Aborting\n");
  25.                         abort_program = 1;
  26.                 }
  27.                 sleep(1);

  28.                 if (write_led(LED_OFF) < 0)
  29.                 {
  30.                         printf("Write to LED failed. Aborting\n");
  31.                         abort_program = 1;
  32.                 }
  33.                 sleep(1);
  34.         }

  35. }

  36. int create_led_thread(void)
  37. {

  38.         int error;
  39.         error = pthread_create(&blink_led_thread, NULL, blink_led, NULL);
  40.         CHECK_ERROR;

  41.         printf("thread created\n");

  42.         return 0;
  43. }

  44. void terminate_led_thread(void)
  45. {

  46.         void *ret_value;
  47.         pthread_cancel(blink_led_thread);
  48.         pthread_join(blink_led_thread, &ret_value);

  49.         printf("thread terminated\n");

  50. }


  51. int main(int argc, char *argv[])
  52. {

  53.         /*初始化中断信号*/
  54.         signal(SIGINT, exit_program);

  55.         /*打开LED文件*/
  56.         if ( init_led() < 0 )
  57.         {
  58.                 printf("LED init failed\n");
  59.                 abort_program = 1;
  60.         }

  61.         /*开始线程使用户灯闪烁*/
  62.         if (create_led_thread() == 1 )
  63.         {
  64.                 printf("Cannot create thread. Aborting\n");
  65.                 abort_program = 1;
  66.         }

  67.         /*循环*/
  68.         while (!abort_program)
  69.         {

  70.         }

  71.         /*清楚内存退出线程*/
  72.         terminate_led_thread();
  73.         close_led();

  74.         printf("\nProgram exiting\n");
  75.         return 0;

  76. }

复制代码

用户LED2的文件操作代码如下:


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>

  7. #include "led_hw.h"
  8. #include "error_util.h"

  9. /* LED 2文件操作*/
  10. #define LED2 "/sys/class/leds/apq8016-sbc\:green\:user2/brightness"

  11. static int fd_led2 = -1;
  12. /* LED 2初始化*/
  13. int init_led(void)
  14. {

  15.         fd_led2 = open(LED2, O_WRONLY);

  16.         if (fd_led2 < 0)
  17.         {
  18.                 ERR_FATAL;
  19.                 return -1;
  20.         }

  21.         return 0;
  22. }

  23. /* LED 2写操作*/
  24. int write_led(int data)
  25. {

  26.         char buf[1];

  27.         if (fd_led2 < 0)
  28.         {
  29.                 printf("file not open to write\n");
  30.                 return -1;
  31.         }

  32.         if (data < LED_OFF || data > LED_ON)
  33.         {
  34.                 printf("Invalid data %d for led\n", data);
  35.                 return -1;

  36.         }

  37.         sprintf(buf, "%d", data);

  38.         if ( write(fd_led2, buf , 1) < 0)
  39.         {
  40.                 ERR_FATAL;
  41.                 return -1;
  42.         }

  43.         return 0;

  44. }

  45. int close_led(void)
  46. {

  47.         if (fd_led2 < 0)
  48.         {
  49.                 printf("file not open to write\n");
  50.                 return -1;
  51.         }

  52.         /*清除内存退出*/
  53.         write(fd_led2, "0", 1);
  54.         close (fd_led2);

  55.         return 0;
  56. }

复制代码


使用了scons工具进行编译,SCons 是一个用 Python 语言编写的类似于 make 工具的程序。与 make 工具相比较,SCons 的配置文件更加简单清晰明了,除此之外,它还有许多的优点。
首先得安装scons工具,到scons的官网下载安装包
官网下载地址:http://scons.org/pages/download.html
我下载的是 scons-2.5.0,可以下载tar.gz文件在linux中解压,也可以下载zip在windos解压后传到DB410c中,在liunx中用

  1. tar -zxf scons-2.0.1.tar.gz

复制代码

命令解压,如果是linaro用户请加sudo使用上帝权限
然后进入解压的目录进行安装,执行命令如下

  1. cd scons-2.0.1
  2. sudo python setup.py install

复制代码

安装完成后进入到代码文件,执行命令

  1. scons

复制代码

会出现


输入ls查询该文件夹下的文件,会看到出现了一个可执行文件


输入命令

  1. sudo ./led_thread

复制代码

即开始执行
[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\370319314\QQ\WinTemp\RichOle\XGX$[ZM$9(N8@3X5)QWHOCC.png[/img]
附上完整代码:led_threads.zip(2.31 KB, 下载次数: 0)

2016-9-26 20:41 上传

点击文件名下载附件


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top