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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
7 s) \0 ^9 ?& D, j: R
; R) D, O3 c4 y4 T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- n4 j% _& y0 O, R& s5 z! m3 B( j- X  I% u8 G! D7 v
其他程序段。。。。。
/ x; N) o: \5 J) y $ o( V( {3 G1 H$ ~$ \9 W' {' C
   free(x_d);% w, C4 ^9 h# z: J
4 H4 L* X: w# _
使用DSP侧单独调试功能,验证动态申请没有问题,+ U6 S6 V- w, x6 q8 o( t7 y9 P

4 c( l; c: L  Z& P# f/ ?- {" N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 _4 w) X8 O) e- k
1 Y& q( o5 P6 k( \4 P& S
9 J$ @5 T$ o5 ?* Y; z

+ e; `4 _* c% c7 d4 ?( i+ `% N2 |0 n
) l  a0 v) [9 w( _# x1 V1 p: U# V' |7 y# d8 g" F* `

. A0 f. @8 A1 h' b7 G( J% c" S$ W. P  W) ]" [
* a2 W, \. y% b* z
; I8 Q- |; Z1 `# ^0 ~2 s1 z' |

; r0 G# H  J  o+ Y! a% ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ B7 M4 b0 Y6 G* x* N( q7 }Program.heap = 0;! j3 F+ A  ^! B' c
Program.argSize = 100;  /* minimum size */) x3 s1 f# V# ?0 _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
$ h$ U$ |5 n' T6 W" Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) i& W8 U2 c/ r" ?1 V6 E
var heapMemParams = new HeapMem.Params();
! Q. c8 p) E# Y' L) b( a6 ^# R+ ]heapMemParams.size = 0x4000;
$ w. ~- Y. N$ t9 C) v" i7 C3 y6 P9 l4 N2 ?, L, ~
var Memory = xdc.useModule('xdc.runtime.Memory');0 O- n, _4 O; m8 ?' R8 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' b5 x  j" e5 O, W$ g" m
. q4 p. x# B) _+ L* z8 w% a" {
我大约calloc  每次共计大小为5K*16bits,, O8 J1 n6 \* B, u
而默认配置才0x4000、需要改大。( F' k9 q  _% i2 I# {

: n0 w7 C+ X& o6 R, j* m: f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- @6 b1 k! l: x& S9 v! t1 F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& |5 e' Q# P# l- e$ S
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& |" q; ?0 C1 t9 \$ N5 j% J
# D0 H+ M+ B2 Z# ^7 ^4 K
是不是需要在DSP.CFG中进行配置) V# g' V  `$ o4 N
我现在的配置为( G, D8 f. V9 }* u! D/ \( Y4 o

, |  C5 G+ F3 l2 `5 P& R/*5 A' e# G. {4 L% V
*  ======== Operating System Configuration ========' B0 `& o0 T3 Z+ P$ G3 u  E0 R
*/
/ j3 e- L$ r+ F6 g% P
5 [+ P. U, p5 q7 m/* no rts heap */
* N6 o% h0 Q* nProgram.heap = 0;
; S# ?5 n" ]- L6 z( v% C! s0 T+ k2 j; lProgram.argSize = 100;  /* minimum size */
+ l& R' S% o; ~% q" aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. c' C' X& }2 K0 ?+ J1 W8 T6 Z7 W* D. a8 @$ H. L# O* C: ]
/* create a default heap */
! t9 F6 |9 v  e7 j" kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& b5 s# k5 r- i! d, \0 ?) y
var heapMemParams = new HeapMem.Params();
7 y( Z2 t' u) g7 A$ S" M/ fheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: V3 C# Z% H5 o, p8 J
3 o. Z/ s2 I+ n8 Y& I" J
var Memory = xdc.useModule('xdc.runtime.Memory');6 G7 Y& m: p' P5 g% g& P& M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# t9 A9 z! q. F
. X& p# v- D- T) w& n9 ^7 \; B/* configure System module */
) `# K5 w7 n& Xvar SysMin = xdc.useModule('xdc.runtime.SysMin');' M& T- N! l2 r- b' t- |& ]3 G! a* P
SysMin.bufSize = 0x1000;+ A3 S7 A% R' _# {0 ^8 K
SysMin.flushAtExit = false;; h! _& R3 D1 O5 ~: ]
1 t& X  ]$ Q$ G3 \, @7 ]
var System = xdc.useModule('xdc.runtime.System');
! l2 q0 G0 d& M& l; KSystem.SupportProxy = SysMin;
* b4 F' G+ `# |  L8 g$ C7 K0 a9 ]) L% m; e
/* configure SysBios to use the lower half of Timer 1 */. v) a+ g' x) K4 b$ ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  }* C5 y% Z5 u( x
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ F# h. U1 Y' \, G7 ^0 C0 MTimer.timerSettings[1].master = true;
, e1 d. H. Y& mTimer.defaultHalf = Timer.Half_LOWER;! h( r- B# U3 }& k8 }- D: Q- k  e4 B
Clock.timerId = 1;9 m! n0 [, e- P- R
/ X* h% n$ \: j% e+ {) _) S

, ~$ _6 F( x+ W0 {( Z3 K- T/*
8 S# N) m! r# |4 R* N# J4 B *  ======== Miscellaneous Configuration ========
, v  c- Z+ v; ^% q+ o */
9 y+ v- s1 A5 I/ N+ ~% [; D5 y% r& I( G; x% s  c: r
/* set default diags mask */
2 B: H/ m$ p/ Z( k! L; ^var Diags = xdc.useModule('xdc.runtime.Diags');  D& b/ U: x$ L8 \$ b! c( b
var Defaults = xdc.useModule('xdc.runtime.Defaults');8 z* I- a: f1 e1 b$ A+ @
: G  }1 s) v$ c" \
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 n4 s0 \: S: \7 f7 e/ G5 dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) m5 I! y- e8 x1 v. n2 m+ t4 pDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ ^. d5 E9 M! FDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* M: n8 M; i# z, [( C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 h; R8 L# j2 NDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. N6 o1 T2 }* N! ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& S. Q& z' T, K9 O# r" B, v7 p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 Y0 Z+ j, I7 j9 m+ G1 U$ PDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) f' z2 ]( T# u1 H# w; ~
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, H5 S& W. N9 Q% |& m) C- ?. i2 _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 j2 d4 @3 s3 Z9 V- n/ n. k
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 l: \) B" L1 ?$ J7 g% ^( [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ e9 v- _$ L. C4 Q! ~2 O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, b4 S( y1 O; y3 _  {/ l  f

, m. f; ^) {, v9 P& {/* override diags mask for selected modules */+ b2 a# w% T" K" w" u8 a
xdc.useModule('xdc.runtime.Main');# v  M% ?0 I/ M; f. t  M8 X
Diags.setMaskMeta(, s* M3 o6 x, ?/ m( U$ b+ u
    "xdc.runtime.Main",
( O* x; a1 C' [    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 t" l( p! S9 H+ L0 ?3 D    Diags.RUNTIME_ON! s( R: N" ?& F% p
);4 D/ ]0 `" k+ n" U5 d; c! f
# }# F0 m6 {" I' r  S/ G6 ?3 `& n
var Registry = xdc.useModule('xdc.runtime.Registry');
: t. O- E! F: v# K1 C& q) J; URegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  U. Q+ E) o5 b( kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- h; M9 y7 A3 T% D! Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 o, G% o# ]  P' y1 K, mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 K' V1 r" M9 O: E

8 d* D* @8 ~) G3 s$ }& T/* create a logger instance */, Z/ z- z0 k' {& I. m4 L. g
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" s1 ^4 }! {2 B( d2 p6 I1 k' H/ U1 qvar loggerBufP = new LoggerBuf.Params();
/ G( o8 Q0 i4 V3 h& PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! ~/ ~0 m3 M4 w* j3 I2 r- G+ [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ ]" G1 `$ [1 {# i6 B& D
- s$ o: `" \* }% S- m
var appLogger = LoggerBuf.create(loggerBufP);
5 M! Y+ A: G( D9 ~appLogger.instance.name = "AppLog_Core1";' _4 p+ G# |& v4 q& b
Defaults.common$.logger = appLogger;
5 l4 l2 i* I9 m* nMemory.defaultHeapSize = 0x8192;      Q  J) l/ i( B4 I% m9 ^
Idle.idleFxns[0] = "&LEDStatus";
9 A! h6 K' s5 w" W* k, Y, {Cache.initSize.l2Size = Cache.L2Size_32K;
- j* o) Q8 E) g0 U, o' ^" t0 o* i6 `2 f; v
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-28 17:31 , Processed in 0.041372 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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