极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11450|回复: 7

arduino串口停了

[复制链接]
发表于 2015-4-9 21:00:05 | 显示全部楼层 |阅读模式
我的程序24k,书上说arduino uno的SRAM31.5K,串口输出数据一段时间后停止了,没反应了,W5100板上的RX、TX灯却在闪烁
程序中有这么一句 const unsigned long postingInterval = 5*1000,不知道大家遇到过没,指点一下,什么问题?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-4-9 23:03:23 | 显示全部楼层
没代码 咋看?
回复 支持 反对

使用道具 举报

发表于 2015-4-10 00:12:33 | 显示全部楼层
可能你把 Serial.print( ) 写在 中断处理程序内
或写在会被中断处理调用的程序内
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 09:08:24 | 显示全部楼层
darkorigin 发表于 2015-4-9 23:03
没代码 咋看?

一共采集四个传感器数据,程序400行,没有上传
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 09:08:56 | 显示全部楼层
tsaiwn 发表于 2015-4-10 00:12
可能你把 Serial.print( ) 写在 中断处理程序内
或写在会被中断处理调用的程序内

谢谢,我再检查一下
回复 支持 反对

使用道具 举报

发表于 2015-4-10 11:35:29 | 显示全部楼层
本帖最后由 tsaiwn 于 2015-4-10 11:49 编辑
suoma 发表于 2015-4-10 09:08
谢谢,我再检查一下



还有,
“书上说arduino uno的SRAM31.5K” 这句是错的 !
实际上是:
(1)RAM (即 SRAM)只有 2KB
(2)Flash (ROM)有 32KB, Bootloader 0.5K,
所以 Flash 剩下 31.5KB
不过你程序才 24KB, 还剩 7.5KB
(3)一般像 Arduino 这种开发板或 Embedded system,
  程序是上传烧入 Flash ROM, 执行时不是在 RAM,
  是变量(Variable)才在 RAM,
RAM 只有 2KB(SRAM 是 RAM 的一种, 通常比 DRAM 快一点);
在 Arduino, 如果 RAM 用光了程序有可能错乱(不会报错!),
严重也可能死机!
所以, 如果用太多 String 相关语句, RAM 会用比较多 !
(4)如果2KB 的RAM貌似用光了, 但程序码离 31.5KB还剩很多
  那可以尽量把一些不会变的变量写在 ROM,
  例如:
    原先写 unsigned long ggg = 1234567;
    如果这 ggg 都不会变,
  那可改为
       Unsigned long ggg PROGMEM = 1234567;
  这样, ggg 会被安排在程序码空间 Flash, 不会占用 RAM,
  可以省下 4 bytes;
(5)又如:
    Serial.println("Hello there");
  这时 "Hello there" 也是占用 RAM, 你可以改为如下:
    Serial.println( F("Hello there") );
  这样, "Hello there" 会被访入 program space 的 Flash ROM, 不占用 RAM
  或是自己这样写也是效果相同:
  const char you[ ] PROGMEM =  "Hello there";
  Serial.println(you);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-4-10 11:48:13 | 显示全部楼层
        谢谢指点,学习了
回复 支持 反对

使用道具 举报

发表于 2015-4-14 20:09:02 | 显示全部楼层
学习了,很有意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-19 02:26 , Processed in 0.036595 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表