打算和PIC32MZ的中断死磕到底了
自己有点强迫症,不想用harmony,主要也是这东西三两天也搞不定,因此中断都自己写。连续几天的奋战,初始化中断所需的向量基址和偏移量,定时器和输出比较中断都搞起来了,昨天和今天搞UART就不行了。之前定时器和输出比较的向量偏移量连蒙带猜,加上一些计算,算是搞了出来,今天打电话问了PIC的一个工程师,劝我用harmony,并明确了官方不对直接编程提供帮助也无法提供,看来只有自己折腾了。反复测试,感觉向量地址的偏移量不是随意配置的,官方文档无任何可用信息,大家有什么意见或者建议?用harmony,还是继续我这种费力不讨好的SB方式?实际我也很想搞清楚PIC32的中断配置和执行过程,不然大学的微机原理岂不白学了。harmony的库有源码么? 如果是自己玩,琢磨学习肯定会有收获。如果是做产品开发,若需要赶进度就用现成的,甚至换一个平台放弃它。 不知道啊,还不知道harmony怎么玩,但要写一些涉及到状态机的东西,所以我有顾虑,PIC32让人爱让人恨得东西。我是自己玩,用来做个三轴伺服的运动控制器 PIC32 以前就买过但是一直没使用。
它和 ARM Cortex-m4 对比起来有很多优点吗? 没有用过ARM,但PIC32使用的人,貌似确实很少,或许就是因为PIC用起来比较难吧 >>>官方文档无任何可用信息
不知你有什么自信能得出这种结论。 <div class='shownolgin' data-isdigest='no'>看了PIC32的数据手册和参考文档,没有具体说中断向量的地址偏移量是怎么得来的</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <div class='shownolgin' data-isdigest='no'>我是指这方面没什么可用信息,别断章取义</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>人家有告诉你偏移量。能纠结怎么来的,大学微机原理才真就白学了。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'> 本帖最后由 freebsder 于 2018-2-13 00:04 编辑
大过年的也不怼你,告诉你你也好过个没有牵挂的年。
学过计算机原理的话应该知道一个道理:计算机不是科学,而是学科,既需要数学物理这样的基础科学,也需要工程和管理这样的学科和手段。如果这个道理不知道,“计算机”或者叫“微机”吧是什么没搞清楚,这就是说为什么纠结地址的偏移量是白学。
偏移量只是实现的工程手段,它不是科学它没有背后的科学原理支撑,这个实现没有任何倾向性,因此最多的是想知道一下设计考量。倾向性这个问题是所有设计的基础,而倾向性哪里来?成本,时间,效率,大小等等,所有这些工程和实现上的考量之后综合的出的某一个序,比如A优于B,A差于B,A和B无差异。
偏移量就是A和B无差异的情形,没有任何倾向性。不管从那个角度(成本,时间,效率,大小,操作性,易用性等等)来设计,一个特定外设的A寄存器在B寄存器前面还是后面,中断号在1还是2,并没有任何差异,(除非你故意实现它们要有差别),因为在一段地址空间里面所有的访问都是一致的。这又扯到内存访问特点和磁盘访问特点的明显差异,微机原理有学吗,内存是O(1)访问,常数,与介质无关,磁盘是O(n),n与介质,磁道,磁头距离等都相关。(跨不同总线情况的不讨论)。
正是因为有大量无倾向性情况的存在,因此计算机组成和原理里面又有一个叫“约定”,遵循“约定”的多了,就进化成了“规定”。咱弄个组织,“规定”的东西只要玩这行的都必须得遵循,那TM就是“标准”。
如果还没有明白倾向性,那么简单举三个例子:1、big ending 和 little ending,只是选择和表达的不同,没有任何实质性差异,厂家自己规定了也就定了(寄存器地址偏移量就是这样);2、magic number,幻数怎么取,随你愿意,反正你说了算;3、C里面int x, int y 和 int y, int x 这样的定义序列,x,y自身的先后没有实质意义,谁先谁后你说了算。
所以,从计算机组成和原理中,应该学到三个东西:工程,倾向性,规定。</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'> 本帖最后由 huo_hu 于 2018-2-13 00:15 编辑
freebsder 发表于 2018-2-12 23:37
大过年的也不怼你,告诉你你也好过个没有牵挂的年。
学过计算机原理的话应该知道一个道理:计算机不是科学 ...
没用过pic所以无语,harmony更不知所措,看到阁下论述蒙b也</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>用plib应该也可以吧</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>harmony是很实用的工具,可以直接配置需要的外设和中断等,自动生成代码,再加入自己的代码就可以了。
完全自己搞就要仔细看应用手册了。
所有的中断向量已经在头文件中定义好了,在C:\Program Files (x86)\Microchip\xc32\v2.05\pic32mx\include\proc中, 中断函数如下:
void __ISR(_UART2_TX_VECTOR, ipl3AUTO) _IntHandlerDrvUsartTransmitInstance0(void)
{
DRV_USART_TasksTransmit(sysObj.drvUsart0);
}
void __ISR(_UART2_RX_VECTOR, ipl3AUTO) _IntHandlerDrvUsartReceiveInstance0(void)
{
DRV_USART_TasksReceive(sysObj.drvUsart0);
}
void __ISR(_UART2_FAULT_VECTOR, ipl3AUTO) _IntHandlerDrvUsartErrorInstance0(void)
{
DRV_USART_TasksError(sysObj.drvUsart0);
}
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>哈哈哈,可以结贴了。前段一直忙导师给的任务,然后有天回家敲PIC32的代码,突然想到把所有中断服务代码单独写到一个C文件里面,取名就叫interrupt.C,然后发现,不需要配置什么中断向量偏移地址,同时开了四个中断进行了验证,都跑的好好的。PIC3就打算自己写代码了,完全不用那个harmony。哈哈哈哈哈哈哈!!!</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>另外,导师那边有个师兄带我,用的STM32,他们全部用的固件库,而我一直以来都是直接读写寄存器,固件库我完全是一脸茫然。然后看文档,找资料,我把师兄给的例程,逐步的全部改成了寄存器读写的方式。:titter::titter:</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>Microchip 的harmony用还是好用,不过用过1.08之前版本,还是有些问题,并且,IDE 也耗资源,常卡着;</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>asdmaill 发表于 2018-6-12 14:05
另外,导师那边有个师兄带我,用的STM32,他们全部用的固件库,而我一直以来都是直接读写寄存器,固件库我 ...
<p>说实话STM32固件库用起来比较爽,PIC我也刚看,最好还是用库函数,效率高移植块</p>
</div><script>showreplylogin();</script>
页:
[1]