ltwsq

    1. JLINKV8硬仿真STM32无法进入中断 1/3616 stm32/stm8 2015-04-21
      :Cry:各位大神,这是个什么情况呢?一直调试都不知道是为什么
    2. Atmega16的常量无法读取 8/3881 Microchip MCU 2015-04-17
      dcexpert 发表于 2015-4-17 14:34 升级一下编译器吧。
      请问一下大神,这个和编译器版本也有关系吗
    3. Atmega16的常量无法读取 8/3881 Microchip MCU 2015-04-17
      dcexpert 发表于 2015-4-17 14:21 这样语法正确,逻辑上有问题的,往往和程序的其他部分有关,直接在这个语句上是找不到问题的。比如看门狗、堆栈溢出。
      现在悲剧了,为了验证问题,我特意用一个变量来获取这个常量的值 i_temp=level_count; 结果硬仿真时发现这个变量可以被正确的赋值 但接下来用这样的赋值语句给OCR1A和OCR1B赋初值,     OCR1A= level_count;     OCR1B= 0x03FF; 调试观察时,其值总为0,原来并不是常量的值取不到,而是对TIME1的OCR1A和OCR1B赋值不成功,为什么会存在这种情况呢?
    4. Atmega16的常量无法读取 8/3881 Microchip MCU 2015-04-17
      还有一个比较奇怪的问题,那就是我把程序直接改成OCR1A=0x03FF,硬仿真也不能将这个正确执行下去,执行完查看,依然是OCR1A=0:Cry:
    5. Atmega16的常量无法读取 8/3881 Microchip MCU 2015-04-17
      dcexpert 发表于 2015-4-17 13:50 没有看到你程序中i是怎样定义的,检查一下数据类型和定义方式,是char还是int,可以尝试增加volatile。
      i 定义为unsigned int
    6. 本帖最后由 ltwsq 于 2015-4-15 11:39 编辑
      dcexpert 发表于 2015-4-15 10:21 你把程序放上来,大家讨论一下。 如果是调用函数方式,因为调用函数时,也需要指令,也会占用时间。如果精度要求不高,当然没有关系;如果你需要us级精度,就需要仔细调试,甚至用汇编了。
      使用的是atmega16a芯片,晶振8M time0的初始化代码: void TC0_init(void) {     TCCR0=0x00; //定时器停止     TCNT0=0x36; //计数初值计算为48(调试修改为54)     计数初值=最大计数值-[t(计时时间)*工作频率]/分频数 ,本例中=256-(208us*8MHz)/8=48     OCR0= 0xD0; //比较值 =最大计数值-计数初值=256-48 = 208    } time0的中断服务代码: interrupt [TIM0_OVF] void timer0_isr(void) {     TCNT0=0x36;//重置计数初值--调试之后修改为54     i_count++; //每计时208us,计数器自加1 } 自己的delay函数,该函数定时是以208us为基数的定时(输入参数为定时208us的次数) void mydelay(int times) {    TCCR0=0x02; //定时器开始,8分频     while(1)     {           if (times==i_count)         {             TCCR0=0x00;//到达计时时间,Time0停止工作             i_count = 0; //计时计数器归0,为下次计数做准备             break; //跳出循环         };     }; } 上面的三个结果是连续执行三次出现的,唉!
    7. 本帖最后由 ltwsq 于 2015-4-15 09:43 编辑
      dcexpert 发表于 2015-4-14 14:47 要高精度微秒级延时,不知道需要多少微秒的精度。如果是1微秒,就比较困难;100微秒就还相对容易。 要求不是特别高,使用GCC的_delay_us就可以,否则就需要用定时器去计算。另外还需要考虑函数调用时附加占用的时间。
      我尝试着用了定时器,但在软仿真是,三次执行同一个延时函数,时间竟然不一样,这是不是软件的原因呢?如果不是软件原因这个不敢用啊
    8. ljj3166 发表于 2015-4-13 14:51 CVAVR可以用独有的关键字EEPROM来操作 不过仿真就很难说了,比较没有实体的支持呢
      在软仿真的情况下真的不能使用EEPROM变量,通过JTAG ICE就可以处理,谢谢
    9. lyzhangxiang 发表于 2015-4-13 14:53 不太熟悉as这个软件 IAR中的做法也是很类似的 1)加EEPROM扩展支持 2)使用__eeprom关键字 这样就和普通的变量一样用了,不过是保存在eeprom中的,ide和编译器做了一些事情 当然了软件仿真个人感觉不出结果吧,应该要实际硬件在线仿真,起码我在iar中是这样的 may helps you
      谢谢了,那就等JTAG ICE仿真器回来之后进行硬调试看看结果
    10. ljj3166 发表于 2015-4-13 14:51 CVAVR可以用独有的关键字EEPROM来操作 不过仿真就很难说了,比较没有实体的支持呢
      谢谢了,那就等JTAG ICE仿真器回来之后进行硬调试看看结果
    11. ltwsq 发表于 2015-4-13 14:44 对于CVAVR来说,它本身是可以直接操作EEPROM变量的啊,应该不需要另外再写读写函数吧?难道还要另加函数?
      谢谢了,那就等JTAG ICE仿真器回来之后进行硬调试看看结果
    12. 为什么在调试时,利用watch窗口查看这些eeprom变量,它的值并不是程序开始时所赋予的初值呢?
    13. ljj3166 发表于 2015-4-13 13:18 这个貌似是把变量放在在代码空间吧 要操作eeprom的话,是不是需要使用相关的读写代码?
      对于CVAVR来说,它本身是可以直接操作EEPROM变量的啊,应该不需要另外再写读写函数吧?难道还要另加函数?
    14. 蓝雨夜 发表于 2015-4-13 11:07 CVAVR里把参数存储在EEPROM里,直接赋值个EEPROM变量即可 在STUDIO里是不是有读写函数操作的啊? 你现在是JTAG直接读EEPROM吗?
      我现在是在Studio当中进行软件仿真,没有使用JTAG进行硬仿真

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:--
  • 好友:--
  • 主题:6
  • 回复:14

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言