MDK4.6环境下STM32F10xxxx.S一段一段看

[复制链接]
10111|79
 楼主| 明月小厨 发表于 2013-1-2 17:20 | 显示全部楼层
系统模式到用户普通模式在哪里切换的?难道是最后一句返回指令?
双堆栈指针在哪里设的啊?我怎么没看见呢?
 楼主| 明月小厨 发表于 2013-1-2 17:30 | 显示全部楼层
看完了,但感觉很失败;
如果有一种更简单的方式处理程序入口;中断的向量表;堆栈指针;还需要这么烦;搞个莫明其妙的汇编启动文件;象C51的处理方式就不错;
 楼主| 明月小厨 发表于 2013-1-2 17:36 | 显示全部楼层
一个下午就这样浪费掉了,我要找ARM和KEIL索赔;

 楼主| 明月小厨 发表于 2013-1-2 17:37 | 显示全部楼层
:curse::curse::curse::curse:
 楼主| 明月小厨 发表于 2013-1-2 17:42 | 显示全部楼层
本帖最后由 明月小厨 于 2013-1-3 11:47 编辑


ADS以前处理的更让人恶心;
运行时都有很多种模式,系统模式,特权模式,用户模式,线程模式......
不同模式下的权限还不一样;不就一个破单片机,搞的好象有很多黑客入侵似的;

这个不是ADS的错ARM7的毛病很多,估计是为了跑操作系统而特殊设置的结构;但是,这么烦人的反复切换让不搞操作系统的人很烦;
搞操作系统的人也不领情,因为过程复杂,非常浪费时间;

香如故 发表于 2013-1-2 18:56 | 显示全部楼层
ALIGN=3是8字节对齐吧,2的3次方
不是ads的几种模式,是arm7,arm9的很多种模式
cortex-m3和arm不一样的吧
江陵龙少 发表于 2013-1-2 19:39 | 显示全部楼层
明月小厨 发表于 2013-1-2 14:44
这部分代码是说堆栈;
堆栈大小400;还声明了一个堆栈段,不用初始化,可读写;
ALIGN=3?什么意思?

align=2是4字节对齐;=3是8字节对齐,=n表示以2的n次方对齐,
据我所知,ARM7的堆栈要求4字节对齐,Cortex-M3的要求8字节对齐。
 楼主| 明月小厨 发表于 2013-1-2 21:51 | 显示全部楼层
本帖最后由 明月小厨 于 2013-1-3 11:59 编辑

上面二位兄弟说的对,M3的向量表是8字节对齐的;2字对齐模式;:victory:
以后再查看生成的向量表,本来4字节就可以表示地址了;为什么要多出来4个字节?不是很浪费空间?
//以后大家看看0x8000000这段都是什么;是不是填的比较满;有没有发现什么中断向量;
//复位后的入口在哪里?

sgj245609615 发表于 2013-1-2 22:36 | 显示全部楼层
学习下
 楼主| 明月小厨 发表于 2013-1-3 00:53 | 显示全部楼层
用寄存器直接操作法;仅4行小代码就实现PA8端口LED的亮和灭;简洁而且简单!~~~~~~~~~
唯一感觉不爽的是寄存器的名称不能直接用,要搞个->符号;
:(看起来不习惯;估计IAR处理的更好些;
本来想找一个寄存器列表出来把这些不习惯全部处理掉,可上网没找到;自己整理又烦,300多个寄存器;
 楼主| 明月小厨 发表于 2013-1-3 00:54 | 显示全部楼层
明月小厨 发表于 2013-1-3 00:53
用寄存器直接操作法;仅4行小代码就实现PA8端口LED的亮和灭;简洁而且简单!~~~~~~~~~
唯一感觉不爽 ...

我可是自己直接看寄存器手册搞出来的;原汁原味的纯寄存器操作;
 楼主| 明月小厨 发表于 2013-1-3 01:03 | 显示全部楼层

明天开始操作定时器,玩玩中断;
后天开始弄SPI操作W25X16;
再往后解决24C02;
再往后休息一段时间准备过年;
:@
 楼主| 明月小厨 发表于 2013-1-3 09:52 | 显示全部楼层
从零开始建立工程,然后导入一个.S启动文件;
再然后就是写自己的main.c;这个过程总结一下::P
jobszheng 发表于 2013-1-3 09:56 | 显示全部楼层
楼主奉献的很详细。楼主把自己的成长轨迹都呈现出来了。先谢谢了
 楼主| 明月小厨 发表于 2013-1-3 10:00 | 显示全部楼层
1.MDK自动配置出来的启动文件最好添加上,它虽然没有做什么,但它完成了三个工作;
1)堆栈的确是有了,而且是二个堆;长度是0X400和0X200;
2)中断向量表也有了,后面的C程序可以直接使用相关的标号,定义自己的中断服务程序;甚至你用不到的部分也被"B   ."填上了;
3)回到main主函数开始运行;
4)在回到main前还给大家一个机会,Systeminit();
如果没有这个启动文件,堆栈的问题自己设当然是可以的;
向量表也可以自己硬上;
既然人家都帮你搞好了,你直接用应该更省事;不必有顾虑.
 楼主| 明月小厨 发表于 2013-1-3 10:06 | 显示全部楼层
.S启动文件有三个,分别对应ld,md,hd;不解释了,有何区别,上网搜搜;如果你的芯片是RB,而使用了HD.S;估计内存的容量需要手动改一下;
.S文件有了,直接写一个C程序,并添加到项目中来;
包含头文件;
#include "stm32f10x.h"
很多声明是在这个头文件中的,必须有它;
试试编译一下看看结果;

 楼主| 明月小厨 发表于 2013-1-3 10:07 | 显示全部楼层
出错了!
不用紧张看看错了什么,一个一个排除;
 楼主| 明月小厨 发表于 2013-1-3 10:10 | 显示全部楼层
本帖最后由 明月小厨 于 2013-1-4 20:28 编辑

第一个错误是说没有说明ld.md.hd;这个不是自动添加时已经选择了?迁就一下吧,既然它说你再说明一次,你说再说明它;
添加这一句到编译器
stm32编译时出现 error: #35: #error directive: "Please select first the target STM32F10x device used
C/C++编译器中指定类型
USE_STDPERIPH_DRIVER,STM32F10X_MD
上网自己找找,添加在什么位置都有说明;
预编译宏定义.zip (68.91 KB, 下载次数: 4)

 楼主| 明月小厨 发表于 2013-1-3 10:13 | 显示全部楼层
第二个错误:
系统提示SystemInit有错误;没有具体内容,不知道是什么;(注:这是它自己写的代码,竟然自己都不知道)
找到出错的地方,直接把这几个注释掉;
我的办法是在自己的C程序里写了一个很空的SystemInit();
:

void SystemInit(void)
{}
说一定以后心血来潮自己添加点什么;
 楼主| 明月小厨 发表于 2013-1-3 10:16 | 显示全部楼层
第三个错误;
这次是一系列的错误;提示 XXXXX.h文件找不到;

直接在windows下全盘搜索;找到后就复制过来;
一个接一个的xxxxxx.h文件提示找不到;就这样搜索出来再复制过来;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部