5499|31

3416

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【LPC54100】双核协同工作NO.3驱动小众TFT及Bug再现 [复制链接]

本帖最后由 ljj3166 于 2015-5-14 18:02 编辑

最近比较忙,很久没有更新了

周末略闲,更起



坛里好多朋友都驱动了一块屏

手上正好也有一块,据说是完美替代5110的TFT

只有128*128像素

本来想做个手表的,这次撸来玩玩

似乎用的人并不是很多,比较小众的一块1.44inch的TFT

就是这货:



驱动起来了



驱动在这里,参考正点原子的代码风格

有兴趣拿去看看

LCD.rar (9.64 KB, 下载次数: 5)



继续双核协同工作

这次主要是由M0去完成AD数据采集和TFT的显示

M4任务就比较轻松,不过增加了点计算难度

每次采集一组8个AD数据,并生成一个算术平均值

两次之后得到2个算术平均值

然后将这两个算术平均值,进行一回2次方的几何平均

使用math库里面的sqrt函数进行几何平均的计算

其实就是进行平方根的计算吧

M4完成计算后,把计算结果返回给M0

M0接收到后,将结果送TFT显示

并根据结果的数值,点亮或者熄灭LED

LED的状态亦在LCD上显示



代码啥的就不上了,太low

上个15M的GIF吧,大图杀猫





下面说个正紧的

我一直觉得是个bug,不知道这次是不是又是打开方式不对

依然是在对M0进行debug一次,代码才能正常运行的现象

上一次发生过一次:https://bbs.eeworld.com.cn/thread-458076-1-1.html

之前出现程序跑飞的情况

大神指导说,是使用的stdlib和stdio的缘故,使得堆栈溢出

想想也有可能,也就没有多管

这次,M0侧的代码完全没有使用类似函数,现象非常类似



环境:LPCXpresso v7.6.2 + 54102kit

现象:

1、代码烧写进去后,LCD输入字符的地方显示乱码,无论如何调整LCD时序,都是这个情况,相同的代码,在单核中运行,一切正常

2、在双核工程下,对M0进行一次debug,其实进入debug会提示出错,双核工程不能单独对M0进行debug,也就是说debug甚至都没有生效

3、结束对M0的debug,这个时候对CPU似乎有一次halt之类的操作

4、reset开发板,一切按照代码运行,无论怎么reset,代码运行、LCD显示都不会有问题

5、掉电后上电,需要重新进行上述步骤

思考:

估计有大神会提出,是不是LCD时序有问题导致的乱码

就个人来看,LCD并不是在单步仿真的时候才正常,后面全速运行也是ok的,并且单核中运行是没有问题的

堆栈问题,这次并没有调用消耗很大的函数,不过例程中的debugout使用了重定向的printf,这个......,不会这么坑吧

RAM问题,试着修改map文件或者编译环境的配置,发现M0的RAM似乎只能从0x2010000起始,大小是0x8000,变化了就无法启动

说白了就是不会配置RAM



求大神科普



头晕了......


代码附上,比较乱 workspace.rar (1.28 MB, 下载次数: 16)
请大神帮看看


此帖出自NXP MCU论坛

最新回复

我记得之前有人讲过双核如何分配地址的帖子,可以去找一找,这个必须要设置的。  详情 回复 发表于 2015-5-19 12:34

赞赏

1

查看全部赞赏

点赞 关注
个人签名

So TM what......?

 

回复
举报

7608

帖子

2

TA的资源

五彩晶圆(高级)

沙发
 
看了下你之前的代码,不知道有没有改变,
M0侧:
int main(void) {
    SystemCoreClockUpdate();
    Board_Init();
。。。
    Chip_MBOX_Init(LPC_MBOX);

M4侧:
int main(void) {
    SystemCoreClockUpdate();
    Board_Init();
。。。。
    Chip_MBOX_Init(LPC_MBOX);

Board_Init() 和 MBOX 应该在 M4 里初始化一次就好。
此帖出自NXP MCU论坛

点评

M0里面又初始化了一次,主要是得在Board_Init()里面把DEBUGINIT()完成 使用库里面的DEBUGOUT和Board_UARTPutSTR函数 如果不调用的话,是没办法串口打印的 这两个函数比较方便,驱动c文件里面也大量使用了  详情 回复 发表于 2015-4-27 00:05
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

6366

帖子

4914

TA的资源

版主

板凳
 
不错,原创的才是最好的
此帖出自NXP MCU论坛

点评

我觉得还可以抢救一下  详情 回复 发表于 2015-4-27 00:17
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

4
 
freebsder 发表于 2015-4-26 21:52
看了下你之前的代码,不知道有没有改变,
M0侧:
int main(void) {
    SystemCoreClockUpdate();
    Board_Init();
。。。
    Chip_MBOX_Init(LPC_MBOX);

M4侧:
int main(void) {
    SystemCoreClockUpdate();
    Board_Init();
。。。。
    Chip_MBOX_Init(LPC_MBOX);

Board_Init() 和 MBOX 应该在 M4 里初始化一次就好。

M0里面又初始化了一次,主要是得在Board_Init()里面把DEBUGINIT()完成
使用库里面的DEBUGOUT和Board_UARTPutSTR函数
如果不调用的话,是没办法串口打印的


这两个函数比较方便,驱动c文件里面也大量使用了

刚才把所有相关函数的都注释掉了


情况还是一样




  1. int main(void) {
  2.         unsigned char value[4];

  3.     // Read clock settings and update SystemCoreClock variable
  4.     SystemCoreClockUpdate();
  5.     // Set up and initialize all required blocks and
  6.     // functions related to the board hardware
  7. //    Board_Init();
  8.         myCoreBox = MAILBOX_CM0PLUS;
  9.         otherCoreBox = MAILBOX_CM4;
  10. //        Chip_MBOX_Init(LPC_MBOX);
  11. //        mutexGive();

  12.         LCD_GPIO_INIT();
  13.         Lcd_Init();   //tft初始化
  14.                 LCD_Clear(WHITE); //清屏
  15.                 BACK_COLOR=BLACK;
  16.                 POINT_COLOR=WHITE;
  17.                 showimage();
  18.     SysTick_Config(SystemCoreClock/10);
  19.     // TODO: insert code here
  20.     if (adcrom_init()) {
  21.                     return 1;
  22.             }

  23.             /* Configure the ADC */
  24.             if (adcrom_config()) {
  25.                     return 1;
  26.             }
  27. //        Board_UARTPutSTR("Core M0+ boot......\r\n");
  28.         NVIC_EnableIRQ(MAILBOX_IRQn);
  29.     // Force the counter to be placed into memory
  30.     volatile static int i = 0 ;
  31.     // Enter an infinite loop, just incrementing a counter
  32.     while(1) {
  33.         i++;
  34.         if(cnt_m0 = 8){
  35.         LCD_ShowNum(35,80,data,4);
  36.         if(led_flag){LCD_ShowString(15,95,"LED ON!");}
  37.         else {LCD_ShowString(15,95,"LED OFF!");}
  38.         cnt_m0 = 0;
  39.         }
  40.     }
  41.     return 0 ;
  42. }
复制代码


此帖出自NXP MCU论坛
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

5
 
方便把代码打包传上来吗?之前那个不带屏能出问题的就行。
此帖出自NXP MCU论坛

点评

最近事情太多,等几天忙完了,再复现一下,给大神瞧瞧,指导一下。  详情 回复 发表于 2015-4-28 14:19
得找找,都改得面目全非了 明天吧,早点休息 再顺道说个现象 对M0进行debug,会提示出错 [attachimg]196138[/attachimg] 看上去似乎对CPU运行没有啥影响 牛逼的是,while里面 LCD_ShowNum(35  详情 回复 发表于 2015-4-27 00:17
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

6
 
本帖最后由 ljj3166 于 2015-4-27 00:18 编辑
freebsder 发表于 2015-4-27 00:11
方便把代码打包传上来吗?之前那个不带屏能出问题的就行。

得找找,都改得面目全非了

明天吧,早点休息

再顺道说个现象

对M0进行debug,会提示出错



看上去似乎对CPU运行没有啥影响

牛逼的是,用不着reset,while里面


LCD_ShowNum(35,80,data,4);

        if(led_flag){LCD_ShowString(15,95,"LED ON!");}

        else {LCD_ShowString(15,95,"LED OFF!");}


居然能够正常在LCD上打印显示

其他main函数里面LCE的显示部分,还是乱码

感觉对M0的debug还是对MCU的运行有影响



碎觉觉......
此帖出自NXP MCU论坛
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

7
 
tiankai001 发表于 2015-4-26 23:10
不错,原创的才是最好的

我觉得还可以抢救一下
此帖出自NXP MCU论坛
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

8
 


最近事情太多,等几天忙完了,再复现一下,给大神瞧瞧,指导一下。
此帖出自NXP MCU论坛
 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

9
 
传上来,我找大神给你看看。。。
此帖出自NXP MCU论坛
 
 
 

回复

466

帖子

0

TA的资源

版主

10
 
我感觉就是RAM引起的
此帖出自NXP MCU论坛
 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

11
 
可能不靠谱,只是说说啊:lpcxpresso出到7.7.2了,要不升级了试试
此帖出自NXP MCU论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

12
 
master的调试你选的 Redline
slave的调试你选的 CMSIS-DAP
此帖出自NXP MCU论坛

点评

master的launch: slave的launch:  详情 回复 发表于 2015-5-15 20:22
这个会有影响吗? 我试试  详情 回复 发表于 2015-5-15 11:21
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

13
 
freebsder 发表于 2015-5-15 01:26
master的调试你选的 Redline
slave的调试你选的 CMSIS-DAP

这个会有影响吗?

我试试
此帖出自NXP MCU论坛

点评

肯定有影响啊,54102里面1个SWD硬件,同时响应2套独立分开且不同的仿真器时许和命令  详情 回复 发表于 2015-5-15 19:43
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

14
 
ljj3166 发表于 2015-5-15 11:21
这个会有影响吗?

我试试





肯定有影响啊,54102里面1个SWD硬件,同时响应2套独立分开且不同的仿真器时许和命令
此帖出自NXP MCU论坛

点评

好吧,我又试了一下 把debug全部删除,重新做了一遍 似乎没有什么变化,debuger口的选择貌似不影响代码的运行 似乎redlink就是虚拟2个swd口出来了 [attachimg]198066[/attachimg] [attachimg]198067[/a  详情 回复 发表于 2015-5-15 20:12
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

15
 
本帖最后由 ljj3166 于 2015-5-15 20:14 编辑
freebsder 发表于 2015-5-15 19:43
肯定有影响啊,54102里面1个SWD硬件,同时响应2套独立分开且不同的仿真器时许和命令

好吧,我又试了一下
把debug全部删除,重新做了一遍

似乎没有什么变化,debuger口的选择貌似不影响代码的运行

似乎redlink就是虚拟2个swd口出来了





现象同上.,...

此帖出自NXP MCU论坛
 
个人签名

So TM what......?

 

 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

16
 
本帖最后由 ljj3166 于 2015-5-15 20:27 编辑

slave的launch:














































master的launch:












































此帖出自NXP MCU论坛

点评

你在eclipse那个小瓢虫里看吧,你上传的包确实是选的两种仿真器。  详情 回复 发表于 2015-5-15 20:29
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

17
 




你在eclipse那个小瓢虫里看吧,你上传的包确实是选的两种仿真器。
此帖出自NXP MCU论坛

点评

上传的包没注意 刚才特意把debug配置都删了 重新跑了一下 还确认了launch文件 实在找不着啥原因了  详情 回复 发表于 2015-5-15 20:33
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

18
 
freebsder 发表于 2015-5-15 20:29
你在eclipse那个小瓢虫里看吧,你上传的包确实是选的两种仿真器。

上传的包没注意
刚才特意把debug配置都删了
重新跑了一下
还确认了launch文件
实在找不着啥原因了
此帖出自NXP MCU论坛

点评

你有没LCD代码的吗?  详情 回复 发表于 2015-5-15 20:34
 
个人签名

So TM what......?

 

 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

19
 
ljj3166 发表于 2015-5-15 20:33
上传的包没注意
刚才特意把debug配置都删了
重新跑了一下
还确认了launch文件
实在找不着啥原因了

你有没LCD代码的吗?
此帖出自NXP MCU论坛

点评

在slave工程下面 有个LCD的代码 比较可疑的是font.c文件,用了个比较大的数组 存储图片信息的 试过用const修饰  详情 回复 发表于 2015-5-15 20:41
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

20
 
freebsder 发表于 2015-5-15 20:34
你有没LCD代码的吗?

在slave工程下面

有个LCD的代码

比较可疑的是font.c文件,用了个比较大的数组

存储图片信息的

试过用const修饰
此帖出自NXP MCU论坛

点评

我的意思是不包含LCD功能的,我手里倒是有两个LCD小模块,但是芯片不一样  详情 回复 发表于 2015-5-15 20:56
 
个人签名

So TM what......?

 

 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表