做库之后,串口发送中断无法工作

Hi

在boot可以跳转app的工程环境下,给RL78G13的部分源码做库之后,把库放到boot工程去编译运行,发现串口发送中断服务函数“r_uart1_interrupt_send”无法进入了。而同一个工程代码中的串口接收中断和定时器中断都可以正常工作的。

当不用库编译,而使用做库的源码进行编译运行,串口发送中断就可以进入

请问这会是什么原因导致的呢?

Parents
  • 能不能进入中断, 首先查中断向量是否指向了对应的程序, 以及中断使能, 按照这个思路去查. 

  • 我这边单步跟了一下,发现是因为库里面使用的诸如memset/strncmp这类接口都是我们自己实现的,而不是系统的接口,我们自己实现的这些接口运行都没有起作用,导致返回值不正确,才判断了发送函数的长度是0,有了截图中的问题。

    那现在这个问题就变成了,为啥封装进库的我们自己实现的string的接口都没有用呢

  • RL78的中断向量表在0-7F这里, 就是在boot区,首先你查看手册RL78 硬件手册中断章节, 看对应中断的向量地址, 是

    否指向你的中断服务程序.

    满足进入中断的条件, 正确的中断向量表, 使能中断, 总中断使能, 和中断条件满足.

  • 谢谢,已经排除是中断方面的问题了,中断进不去的现象,是由于调用自己实现的string的接口返回值不对导致的。

    所以现在问题变成了:

    1. 自己封装的string的接口,包括memset、strncmp等等这些为什么不能用,而只能用系统string.h的?

    2. 只要放到库里面的文件,调用串口发送后,即使有了__far关键词修饰形参也是获取不到要发送的数据缓存区的内容了。源码的时候,不加__far修饰也获取不到发送缓存区内容,现在放到库里加了__far也获取不到,为啥呢?

  • 做库的时候试试这个选择为yes

Reply Children
No Data