关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7719|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 ]2 J6 g! _( ]2 I! S1 P: g
4 Q* U! ^0 j0 r. x/ b+ {    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: f) P: f1 x1 J$ O7 ^4 E+ L) K* [

2 u0 c5 [! i- b. o' {/ t: S' f; t+ A# ?& T其他程序段。。。。。8 Y7 u% t: z" f" |$ ^5 p
' P, j/ [3 d1 P: b
   free(x_d);
* ^0 G9 @( M) S: x/ o# }1 U: o; t+ c
9 i% f+ m% U! c# j, @使用DSP侧单独调试功能,验证动态申请没有问题,% Z" D- H4 y- d  i

  t$ r, \& z" E! N3 K' d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 n8 b, I1 O3 k, x
2 ?7 P3 N, Z) k/ f, l1 g4 Y9 ^6 B
* t! J' ?) c: f2 a

( i1 I0 s- y0 Y3 C* S4 m
) B3 Q+ `2 B1 P& F
, t6 j0 m0 M1 a5 T3 ?3 j
5 }- T0 j; |  d5 ^3 @6 Y$ {" k) [! V# D) A: R5 I$ Y$ V

- m3 x1 N; B, W7 Q3 F' t" V; E6 J8 C9 \: z

) D( S& C( o8 \' {% I4 `3 t! |0 t+ I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) g. l! a7 k& f+ r! V+ w2 L5 X/ J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# k" s3 }* V# a8 i' r2 o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& |6 U* P& |8 v3 n
+ r' n/ R  {/ S; j; B1 \
是不是需要在DSP.CFG中进行配置
; [' K+ U2 Q6 \% q9 R9 \- @; e6 d我现在的配置为
7 W0 ]3 c# P, L) H% W' c
0 s: v, @$ ?  D: I" }/*# R- P' U( M0 f. Z
*  ======== Operating System Configuration ========# S$ x0 h9 e# Q2 I8 }5 h( a
*/6 U6 V+ w5 G5 ~

- D) Q; w' l2 g+ L  G/* no rts heap */
& I) E# ?# E  AProgram.heap = 0;
' i, B6 r# i! d" EProgram.argSize = 100;  /* minimum size */
9 F7 B! {* M; e/ mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: N5 \* h' B5 H7 A! |" n# d! w$ {' N- M& L
/* create a default heap */
: q- g) V- T; l4 g8 I8 _8 Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* f3 e+ {- @$ s( g3 k! R  `
var heapMemParams = new HeapMem.Params();
7 v+ `; J: ?: U+ yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: h* P2 Q9 O2 m$ Q( n3 u' R- o3 ~* s* ?6 H5 c! K& B/ y
var Memory = xdc.useModule('xdc.runtime.Memory');5 |7 {0 X7 P9 t4 @( h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# ?. c2 V4 z- ^- l9 ~9 X) J( V: U/ H9 K9 c
2 j! k% H/ O' q1 M: ~
/* configure System module */
( r5 V( g! z! wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
" ]! j9 D" C& }* g3 N8 QSysMin.bufSize = 0x1000;( z: A# v) t* e7 L: J8 w% M
SysMin.flushAtExit = false;
& n8 Y; k' q- v) f& K
; V. @8 y9 s0 H- x4 M- j% Yvar System = xdc.useModule('xdc.runtime.System');5 R9 z. r0 k3 n. l7 D& a
System.SupportProxy = SysMin;
3 D2 P: ^# e  m4 Z9 }( z( _2 a! J3 P/ ]1 A, ~1 p
/* configure SysBios to use the lower half of Timer 1 */0 A6 d/ P0 v' z: S. ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 f8 B6 p% ?' J" \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ P. w' R) f6 d3 D! FTimer.timerSettings[1].master = true;1 E7 R6 ?0 o: j9 a# K
Timer.defaultHalf = Timer.Half_LOWER;. M+ D7 f" y# h" M( U
Clock.timerId = 1;( H# z. _6 P; D, a; m

) a$ W: h" S3 p# D# s$ o  i0 H% a" y; _2 S8 U
/*
* [$ L0 S& Q" ?8 u; ~ *  ======== Miscellaneous Configuration ========
$ F; g7 f+ z4 X */
8 u- |, r' z/ H
( y% d# N0 ?% D/ r/* set default diags mask */  L/ F6 R0 D0 }5 s! i* f
var Diags = xdc.useModule('xdc.runtime.Diags');" i* v- K$ f& i! n* J  L
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 M/ S: X/ c" ~+ D# [4 i

8 z' u7 i# g/ _% J4 r; `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 D$ m. q9 M* O9 u' F" `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: m0 k4 t. u: L, [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 s0 c& o* R: n& Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  D8 T" z! W  G; ]) XDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' @/ N) U5 v0 Z7 J0 b6 i3 tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 W0 p2 V! ^. ?: p4 G' LDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* t3 l' ^! O" Z6 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 ~# h# {5 x1 p! K- T1 j6 xDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 d# ?8 k0 w% V& o8 k) j$ MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 q; V5 Z7 ?9 a5 x8 m! B. aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 s# F! p% V7 E8 g6 h. c0 N; A: @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. U1 u2 E+ Z$ u6 R5 u; i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 v& D6 G/ g$ _4 O# V" d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& }: m! y' m3 d) D9 q/ \: E
: b6 U; U( w3 c$ T/* override diags mask for selected modules */
/ N  f* s  s1 h! `- Yxdc.useModule('xdc.runtime.Main');& u  H9 Q8 J, t7 d
Diags.setMaskMeta(4 Q9 O1 {; ]6 N8 _$ P2 {
    "xdc.runtime.Main",
- ~8 T- C) y. y% _! Y4 |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 v$ c9 [7 a* ]    Diags.RUNTIME_ON9 y: W; l' S5 n) x# b4 `+ L
);
) u* g5 ~: u1 u6 \) v
# u$ ^: `3 v8 k2 uvar Registry = xdc.useModule('xdc.runtime.Registry');! H9 R- F" `$ U( q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# F) j3 G& ]) r" ^; [Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 G! |: \& x% [3 q6 R0 W% ~- L; ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ }" k& G3 ^' s6 K. _6 G* A' }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& f; c7 P, C8 R5 H$ J1 V
6 K" G6 v! X3 {* X8 g/* create a logger instance */  F$ y, r* Z" }" W" ~& ~5 y  b8 d
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ ^3 n9 {3 c: K
var loggerBufP = new LoggerBuf.Params();7 H7 g7 {, Q3 ^& q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* o3 Z( L- d/ |/ k
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: k$ X1 n0 A4 R: ?+ h

& d( z9 Q: y/ n8 ]+ V- u5 {8 {var appLogger = LoggerBuf.create(loggerBufP);0 ~( Y! e* b- K; [! i8 e/ K- @
appLogger.instance.name = "AppLog_Core1";
$ j/ |$ Q$ Q3 }# r$ O% DDefaults.common$.logger = appLogger;( u" a4 L5 m4 Y$ {$ h, R+ f! O  x
Memory.defaultHeapSize = 0x8192;   
0 w/ I6 W) j  L/ r6 AIdle.idleFxns[0] = "&LEDStatus";
9 I2 h, [1 o, @1 g1 K& lCache.initSize.l2Size = Cache.L2Size_32K;6 f7 A+ m; }; c. K0 [
+ C, d/ ]! @. Q% C% {) f+ a* r: c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 ~) M! U4 Z1 |! [1 Q  ^: Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ b: {- v1 a! |8 i, i: b
var heapMemParams = new HeapMem.Params();' H6 ^; U3 h5 }. F& H
heapMemParams.size = 0x4000;! R" U9 X- Z$ r- V$ Q

% x0 c7 K0 ]' g7 B) Svar Memory = xdc.useModule('xdc.runtime.Memory');
6 [6 d( ^9 ]" I' j! G! EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# E4 }7 X0 @1 J' O+ }; q+ l, y

( b$ p6 v8 e; r/ l我大约calloc  每次共计大小为5K*16bits,7 ^9 p) [$ }5 {$ `, E- S3 Y' ?
而默认配置才0x4000、需要改大。+ Y, g- _, d" M: l7 p

. q3 O* k1 Y1 U8 B3 N7 ?. s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, p4 P: {2 a" R9 \& F! T! I
Program.heap = 0;
, g' N; k3 m3 v* K1 R" E" a, SProgram.argSize = 100;  /* minimum size */
% J2 n$ b/ s8 O* {& E/ y1 d9 EProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-18 10:01 , Processed in 0.041490 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表