[讨论] 第三回 呼吸灯 玩砸了 linux开发怎么搞?

astwyg   2014-7-12 23:20 楼主

应老大号召,试试写个呼吸灯,裸机的方法直接抛弃了,那是51和M3该干的事,rawOS还没怎么看,只能硬着头皮用linux,在shell中尝试了下面代码控制LED:

echo 0 > brightness

echo 1 > brightness

可以控制亮灭,参考手册写了下面的代码:

  • #include "stdio.h"
  • #include "stdlib.h"
  • #include
  • #include
  • long light_cnt = 0;
  • long dark_cnt = 0;
  • long tmp=10000;
  • FILE* fd;
  • void led_onetime(){
  • const char *led = "/sys/class/leds/led0/brightness";
  • fd = fopen(led,"w+");
  • fwrite("1",1,1,fd);
  • tmp=10000;
  • while(light_cnt--) tmp--;
  • fwrite("0",1,1,fd);
  • tmp=10000;
  • while(dark_cnt--) tmp--;
  • }
  • int main(void){
  • light_cnt=0;
  • while(1){
  • light_cnt++;
  • if(light_cnt>100) light_cnt=0;
  • dark_cnt=100-light_cnt;
  • led_onetime();
  • }
  • }
  • 嗯..我知道特别丑…linux下面的定时器和pwm不会用,关键是也不知道哪里能找到帮助代码,而且这肯定不是linux正确的开发方法,根本没法调试,我想看一下FILE类型在哪定义的,不知道怎么追踪类型定义..

    想看程序执行时间..那就更没戏了..

    想看fwrite的函数原型,嗯..好像也不知道怎么看..

    总之就是linux开发一点都不入门中..代码是用nano编辑的,然后用:

    arm-linux-gcc led.c -o led

    编译了,放到板子上跑一下,得到下面结果:

    [root@jyxtec myapp]# ./led Segmentation fault

    查了一下告诉我是指针溢出或者内存越界,这程序往后怎么调试一丁点思路都没有了.

    其实我特别讨厌写出来程序一点一点试.我觉得程序必须可以单步运行,可以设置断点,可以追踪运行时间和变量值.不能debug的程序根本无法开发..

    目前就是这样的节奏,希望高手借此机会支招一下linux开发的套路,也希望呼吸灯活动结束之后,能看到优秀的linux开发方法

    本帖最后由 astwyg 于 2014-7-12 23:23 编辑
    博客:http://www.ysgh.net/

    回复评论 (17)

    点此查看代码高亮程序:
    http://www.ysgh.net/archives/522


    感觉linux开发实在不好上手,过阵子看看rawOS,真心希望呼吸灯活动完了大家能交流下开发方法
    博客:http://www.ysgh.net/
    点赞  2014-7-12 23:24
    楼主的网站是怎么搞的?我的域名快过期了,可是到现在还没有个窝
    点赞  2014-7-12 23:44
    那个在执行时要加 -qws后缀
    点赞  2014-7-13 01:13
    引用: dontium 发表于 2014-7-12 23:44
    楼主的网站是怎么搞的?我的域名快过期了,可是到现在还没有个窝

    我的也是
    点赞  2014-7-13 06:23
    只找到pwm驱动蜂鸣器的,没有找到改变占空比和定时的
    点赞  2014-7-13 11:16
    这个问题是这样的,那个背光的brightness是0-255的,由于PWM本身的特性,可能到0-50都是黑屏的,试着用更大一点的值去写,应该就可以控制了。
    My dreams will go on... http://www.jyxtec.com
    点赞  2014-7-13 15:15
    引用: dontium 发表于 2014-7-12 23:44
    楼主的网站是怎么搞的?我的域名快过期了,可是到现在还没有个窝

    万网的域名 SAE的服务器 纯瞎玩
    博客:http://www.ysgh.net/
    点赞  2014-7-13 21:17
    引用: foxpro2005 发表于 2014-7-13 01:13
    那个在执行时要加 -qws后缀

    重点是 开发和debug的方法应该是什么呢?
    博客:http://www.ysgh.net/
    点赞  2014-7-13 21:18
    引用: spacexplorer 发表于 2014-7-13 15:15
    这个问题是这样的,那个背光的brightness是0-255的,由于PWM本身的特性,可能到0-50都是黑屏的,试着用更 ...

    1是亮 0是灭
    重点是现在不知道linux程序开发和debug流程。。。
    博客:http://www.ysgh.net/
    点赞  2014-7-13 21:18
    引用: astwyg 发表于 2014-7-13 21:18
    1是亮 0是灭
    重点是现在不知道linux程序开发和debug流程。。。

    我简单说一下吧,以后有时间再写一个调试教程,编译的时候用-g -O0就可以生成调试信息,开发板与PC机要在同一网段:
    1. 编译
    # arm-linux-gcc -o led led.c -g -O0
    2. 程序拷贝到板子
    3. 通过gdbserver在板子上运行程序:
    # gdbserver localhost:10000 led
    说明:localhost:10000:表示在监听本机的10000端口,调试客户端从这个端口连进来进行调试
    4. 在PC端对应目录执行gdb调试客户端:
    # arm-linux-gdb led
    5. 进入gdb模式后,连接远程开发板(假设开发板的ip地址是192.168.0.20)
    # target remote 192.168.0.20:10000
    6. 连上之后就可以设置断点了,设断点的命令是"b",这里在main函数处设断点
    # b main
    7. 敲入"c"并回车,就可以运行到main函数了

    说明:这全是在命令行下操作,"n"命令是单步通过,"s"命令是单步进入,不会的可以通过help参看命令,另外,我们还提供了图形界面的调试环境:insight,这个就和vs下边差不多了,但是命令与gdb是一样的,只是一个gdb的图形界面,执行方法如下:
    arm-linux-insight led

    My dreams will go on... http://www.jyxtec.com
    点赞  2014-7-14 10:55
    过来看看~~~~~~~~~~~~~~~~
    点赞  2014-7-14 15:00
    想违背版主的意愿的话来个作弊的话
    用shell是最快的
    点赞  2014-7-14 20:03
    引用: astwyg 发表于 2014-7-13 21:17
    万网的域名 SAE的服务器 纯瞎玩

    SAE需要备案么
    点赞  2014-7-15 11:02
    引用: spacexplorer 发表于 2014-7-14 10:55
    我简单说一下吧,以后有时间再写一个调试教程,编译的时候用-g -O0就可以生成调试信息,开发板与PC机要在 ...

    还是等等教程 = =!没有一些集成的IDE之类的方法么?
    博客:http://www.ysgh.net/
    点赞  2014-7-15 12:59
    引用: airqj 发表于 2014-7-14 20:03
    想违背版主的意愿的话来个作弊的话
    用shell是最快的

    shell 运行时间不确定,很难出效果吧
    博客:http://www.ysgh.net/
    点赞  2014-7-15 13:00
    引用: 陈韶华 发表于 2014-7-15 11:02
    SAE需要备案么

    不需要 走国外线路
    博客:http://www.ysgh.net/
    点赞  2014-7-15 13:01
    引用: astwyg 发表于 2014-7-12 23:24
    点此查看代码高亮程序:
    http://www.ysgh.net/archives/522


    感觉linux开发实在不好上手,过阵子看看raw ...

    文件描述符是linux下的一个概念,linux下的一切设备都是以文件的形式操作.如网络套接字、硬件设备等。当然包括操作文件。
    fopen是标准c函数。返回文件流而不是linux下文件句柄。

    设备文件不可以当成流式文件来用,只能用open
    fopen是用来操纵正规文件的,并且设有缓冲的,跟open还是有一些区别

    从代码上看 如果修正文件操作相应函数的话,工具链匹配,编译能通过 一般就没有问题了。
    点赞  2015-7-21 11:35
    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
      写回复