This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、程序被加载到闪存中、但 UART 无法打印、printf 是如何工作的? 这是代码。
谢谢你。
int myprintf1 (const char * fmt、...)
{
int i = 0;
va_list args;
unsigned int n;
char buffer[128];
va_start (args、fmt);
N = vsprintf (buffer、fmt、args);
for (i = 0;i < n;i ++)
{
SendChar (buffer[i]);//使用 UART 发送字符串
}
VA_END (args);
返回 n;
}
int SendChar (int ch)
{
SciaRegs.SCITXBUF = ch;
while (SciaRegs.SCICTL2.bit.TXRDY=0);
//while (SciaRegs.SCIFFTX.bit.TXFFST!= 0){}
//SciaRegs.SCITXBUF=ch;
返回通道;
打印程序
命令
第0页:/*程序内存*/
/*内存(RAM/FLASH/OTP)块可移动到第1页进行数据分配*/
ZONE6:origin = 0x100000、length = 0x100000 //片上 RAM 块 L1 */
ZONE7:origin = 0x200000、length = 0x100000 //片上 RAM 块 L1 */
RAML0:origin = 0x008000、length = 0x001000 //片上 RAM 块 L0 */
RAML1:origin = 0x009000,length = 0x001000 //片上 RAM 块 L1 */
RAML2:origin = 0x00A000、length = 0x001000 //片上 RAM 块 L2 */
RAML3:origin = 0x00B000、length = 0x001000 //片上 RAM 块 L3 *
FLASHH:origin = 0x300000、length = 0x008000 //片上闪存*/
FLASHG:origin = 0x308000、length = 0x008000 //片上闪存*/
FLASHF:origin = 0x310000、length = 0x008000 //片上闪存*/
FLASHE:origin = 0x318000、length = 0x008000 //片上闪存*/
FLASHD:origin = 0x320000,length = 0x008000 //片上闪存*/
FLASHC:origin = 0x328000,length = 0x008000 //片上闪存*/
FLASHB:origin = 0x330000,length = 0x008000 //片上闪存*/
FLASHA:origin = 0x338000,length = 0x007F80 //片上闪存*/
csm_RSVD:origin = 0x33FF80,length = 0x000076 // FLASHA 的一部分。 当 CSM 正在使用时、使用所有0x0000进行编程。 *
begin:origin = 0x33FFF6,length = 0x000002/* FLASHA 的一部分。 用于"引导至闪存"引导加载程序模式。 *
CSM_PWL:origin = 0x33FFF8,length = 0x000008 // FLASHA 的一部分。 FLASHA 中的 CSM 密码位置*/
OTP:origin = 0x380400,length = 0x000400 //片上 OTP */
ADC_CAL:origin = 0x380080,length = 0x000009 //保留存储器中的 ADC_cal 函数*/
IQTABLES:origin = 0x3FE000,length = 0x000b50 //引导 ROM 中的 IQMath 表*/
IQTABLES2:origin = 0x3FEB50,length = 0x00008c //引导 ROM 中的 IQMath 表*/
FPUTABLES:origin = 0x3FEBDC,length = 0x0006A0 //引导 ROM 中的 FPU 表*/
ROM:origin = 0x3FF27C,length = 0x000D44 //引导 ROM */
复位:origin = 0x3FFFC0,length = 0x000002 //引导 ROM 的部分*/
向量:origin = 0x3FFFC2,length = 0x00003E //引导 ROM 的部分*/
第1页:/*数据存储器*/
/*内存(RAM/FLASK/OTP)块可被移动至 PAGE0以进行程序分配*/
/*寄存器保留在第1页中*/
BOOT_RSVD:origin = 0x000000,length = 0x000050 // M0的一部分,引导 ROM 将此用于栈*/
RAMM0:origin = 0x000050、length = 0x0003B0 //片上 RAM 块 M0 *
RAMM1:origin = 0x000400、length = 0x000400 //片上 RAM 块 M1 *
RAML4:origin = 0x00C000、length = 0x001000 //片上 RAM 块 L1 */
RAML5:origin = 0x00D000、length = 0x001000 //片上 RAM 块 L1 */
// RAML6:origin = 0x00E000,length = 0x001000 //片上 RAM 块 L1 */
// RAML7:origin = 0x00F000,length = 0x001000 //片上 RAM 块 L1 */
RAMH :origin = 0x00E000,length = 0x002000 //片上 RAM 块 L1 */
ZONE0:origin = 0x004000,length = 0x001000 //片上 RAM 块 L1 */
}
/*将段分配给内存块。
注:
DSP28_CodeStartBranch.asm 中用于重定向代码的 codestart 用户定义段
闪存时执行
ramfuncs 用户定义的段来存储将从闪存复制到 RAM 中的函数
*
部分
{
/*分配计划领域:*/
.cinit:> FLASHB PAGE = 0
.pinit:> FLASHB,PAGE = 0
.text:> FLASHB PAGE = 0
codestart:> begin page = 0
ramfuncs:>FLASHB PAGE = 0
csmpasswds:>csm_PWL page = 0
csm_rsvd:>csm_RSVD page = 0
/*分配未初始化的数据段:*/
.stack:>RAMM1 page = 1.
.ebss:> RAML5 PAGE = 1.
.esysmem:>RAMM1 PAGE = 1.
.sysmem:> RAML4 page = 1.
/*初始化段进入闪存*/
/*要使 SDFlash 对这些内容进行编程、必须将它们分配到第0页*/
econst:> FLASHB PAGE = 0
.switch:>FLASHB PAGE = 0
/*分配 IQ 数学区域:*/
IQmathTables :>IQTABLES,PAGE = 0,TYPE = NOLOAD
IQmathTables2:> IQTABLES2,PAGE = 0,TYPE = NOLOAD
FPUmathTables:> FPUTABLES,PAGE = 0,TYPE = NOLOAD
.reset:> reset,page = 0,type = DSECT
VECTORS:> VECTORS PAGE = 0,TYPE = DSECT
/*分配 ADC_cal 函数(出厂时已预先编程到 TI 保留存储器中)*/
ADC_cal:load = ADC_CAL、page = 0、type = NoLoad
}