历史上的今天
今天是:2025年01月16日(星期四)
2020年01月16日 | stm8使用atomthreads项目
2020-01-16 来源:eefocus
最近有机会使用stm8s105c6t6做开发,好久没用八位单片机做东西了,网上搜了一下stm8的相关文档发现居然有它专属的os,马上下载了一个atomthreads1.3试用,iar打开编译就出了问题:
Error[Lc036]: no block or place matches the pattern "ro code section .text in atomport-asm-iar.o"
找过去发现是SECTION .text:code定义的问题,但是汇编定义分段用的,具体功能我也不清楚。。。。 所以我猜要修改还得查stm8的汇编指令,就一个这么小的代码找那么不值得浪费时间,所以下载了其它atomthreads编译发现有能够编译通过的,对比发现了与atomthreads1.3的不同点就在SECTION 定义,在atomthreads1.3中修改
---SECTION .text:code
+++SECTION .near_func.text:code
编译成功
但发现iar编译成功后居然不在软件中显示ram、rom的使用量
查看ports/stm8/debug目录下面的log和map文件才能看到,map里面对每个c文件占用的ram和rom都有说明。。。。。
烧录到stm8中,串口和gpiod0均会有输出并会输出semaphore的测试信息,没有错误信息标示atomthreads正常运行起来了!
一、添加中断(有两处需要修改)
1、在ports/stm8/stm8_interrupt_vector.c中
struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* reset */
{0x82, NonHandledInterrupt}, /* trap */
{0x82, NonHandledInterrupt}, /* irq0 */
{0x82, (interrupt_handler_t)AWU_IRQHandler}, /* irq1 */
{0x82, NonHandledInterrupt}, /* irq2 */
{0x82, NonHandledInterrupt}, /* irq3 */
{0x82, NonHandledInterrupt}, /* irq4 */
{0x82, NonHandledInterrupt}, /* irq5 */
{0x82, NonHandledInterrupt}, /* irq6 */
{0x82, (interrupt_handler_t)EXTI_PORTE_IRQHandler}, /* irq7 */
{0x82, NonHandledInterrupt}, /* irq8 */
{0x82, NonHandledInterrupt}, /* irq9 */
{0x82, NonHandledInterrupt}, /* irq10 */
{0x82, (interrupt_handler_t)TIM1_SystemTickISR}, /* irq11 */
{0x82, NonHandledInterrupt}, /* irq12 */
{0x82, NonHandledInterrupt}, /* irq13 */
{0x82, NonHandledInterrupt}, /* irq14 */
{0x82, (interrupt_handler_t)TIM3_UPD_OVF_BRK_IRQHandler}, /* irq15 */
{0x82, (interrupt_handler_t)TIM3_CAP_COM_IRQHandler}, /* irq16 */
{0x82, NonHandledInterrupt}, /* irq17 */
{0x82, NonHandledInterrupt}, /* irq18 */
{0x82, NonHandledInterrupt}, /* irq19 */
{0x82, NonHandledInterrupt}, /* irq20 */
{0x82, NonHandledInterrupt}, /* irq21 */
{0x82, (interrupt_handler_t)ADC1_IRQHandler}, /* irq22 */
{0x82, NonHandledInterrupt}, /* irq23 */
{0x82, NonHandledInterrupt}, /* irq24 */
{0x82, NonHandledInterrupt}, /* irq25 */
{0x82, NonHandledInterrupt}, /* irq26 */
{0x82, NonHandledInterrupt}, /* irq27 */
{0x82, NonHandledInterrupt}, /* irq28 */
{0x82, NonHandledInterrupt}, /* irq29 */
};
2、
#if defined(__IAR_SYSTEMS_ICC__)
#pragma vector = 3 //datasheet中的中断号+2
#endif
INTERRUPT void AWU_IRQHandler (void)
#if defined(__RCSTM8__)
interrupt 1 //datasheet中的中断号
#endif
{
/* Clear AWU peripheral pending bit */
AWU_GetFlagStatus();
}
二、驱动修改
atomthreads中的驱动很少,只有clk、gpio、itc、tim1和uart2的驱动,实在无法完成工作。我就将需要的驱动从stm8固件库拷贝过来加入工程,需要修改一下头文件,不过很简单这里就不细说了
三、总结
最后我使用了两个线程,一个运行fft,一个现实数码管,fft速度慢的可以20多毫秒才能完成一次32点的计算,其中还把sin、cos采用查表方法处理了。。。。
下一篇:stm8s_atomthread
史海拾趣
|
四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-电子广告牌 本帖最后由 paulhyde 于 2014-9-15 09:27 编辑 电子竞赛题目-电子广告牌 一、电子竞赛题目任务: 设计并制作一台简易电子广告牌,16*32点阵显示,示意图如下: 二、电子竞赛题目要求: 1、基本要求: 1) 能通过按键翻页显示数字和字母。 ...… 查看全部问答> |
|
推荐一个不错的网站:矿石收音机论坛 http://www.crystalradio.cn/bbs/论坛里有许多板块,有许多引人入胜的好文章 [ 本帖最后由 quanzx 于 2009-7-18 15:47 编辑 ]… 查看全部问答> |
|
看完后一身冷汗 晕 $(\'swf_EZ5\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.ku6.com/refer/eXHKgUIamK ...… 查看全部问答> |
|
这几天面试了很多人,感觉比从前几年面试过的都多。 发现一个普遍的现象,就是有点儿印象的,简历里写“熟悉”,用过一些的,简历里写“精通”。 以今天的一个为例: 简历里写着,熟悉ARM内核,Linux下字符设备、块设备和网络设备的驱动。 我问 ...… 查看全部问答> |
|
1.嵌入式操作系统VxWorks简介 2.VXWORKS内核分析 3.VxWorks及其选件介绍 4.VxWorks使用说明书 (1) 5. VxWorks使用说明书 (2) 6.基于VxWorks的BSP概念与开发 7. VxWorks操作系统指南__任务管理 8. VxWorks中的多任务通讯机制 9. VxWorks ...… 查看全部问答> |
|
WINCE5.0下用KITL调试网卡驱动,MmmapIOspace函数问题 PHYSICAL_ADDRESS phyAddr; phyAddr.QuadPart=pAdapter->m_ulIOBaseAddress; pHardware->m_ulVIoAddr=(ULONG)MmMapIoSpace(phyAddr,256,FALSE); RETAILMSG(T ...… 查看全部问答> |




