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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 q6 p+ x* t% ^

2 m# {6 }- d0 d. A7 C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# V' F* U1 l5 `( P

" V5 h+ G6 M8 v7 V其他程序段。。。。。' Z. A, p: W1 X! |' }- k

3 K0 o) A& Y( V+ P# ]# k   free(x_d);
1 s8 }) s, Y( M7 u8 v8 M5 W: f; R1 [' |. W" y" k
使用DSP侧单独调试功能,验证动态申请没有问题,
" v# Y& Q  `6 z' c' u8 W3 d: @/ {6 ?  j/ D' V  @
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& C) e$ T0 m$ d) O6 [) x
* ^- Q$ Z2 E0 U/ E# Z* U

7 W1 x8 s# {1 ]/ x* k* B$ @2 Y' E* `, }! H, Z( }
& x' @, P: Z0 c8 l; [. V
) u! q1 x4 t; T3 ]

. M# Q+ Y# ~: X' N, T! D+ a5 x  a+ z% U
" }" F8 l# s4 F8 H4 r
4 D3 ]$ G% P+ D$ q4 R" I
$ h) ]; U: @1 H$ 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 */
6 s* I' B1 k: S( j! OProgram.heap = 0;5 g! }4 O9 V1 E- b/ b0 R5 j
Program.argSize = 100;  /* minimum size */& h9 k" L% T( l
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */' `4 ?+ E& }5 L& B' D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; i  R! a# G( A+ gvar heapMemParams = new HeapMem.Params();" b& N) a, D4 F) T1 X" g* t( l
heapMemParams.size = 0x4000;: s+ _+ `7 H% J5 |! f
6 Y  ]( D/ h: u- Y! F6 {
var Memory = xdc.useModule('xdc.runtime.Memory');
9 p8 H" m3 o$ }- rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, r8 m4 N4 O7 ~6 L7 Z
! C  @  B! o: Z& I: C7 e# C我大约calloc  每次共计大小为5K*16bits,' |( y4 V' G! E2 Z& S9 c, c+ _
而默认配置才0x4000、需要改大。* k/ V4 g3 j5 U! B: ^' w" T
7 [2 O5 Z$ i6 G: n% T' t- |! ?
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
3 h/ n' Z1 h" b4 e  _5 U7 W5 N" J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. E2 I! q9 B$ S5 G" f: @# g" w7 R5 Q; w
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 \& Z; S0 u9 ]2 o' Y6 Z

4 b9 L/ ?# r8 F9 _1 H) c. O6 ]' B是不是需要在DSP.CFG中进行配置( {: z0 ?6 v/ b7 W: k: T( J4 m, x
我现在的配置为
9 B0 x! n4 ~( [- K3 M  V/ h( ^7 u+ K' g- |0 N5 w! P
/*
  q8 K3 I" c5 ~: P2 D2 Z5 a+ l *  ======== Operating System Configuration ========5 h; O+ F" h/ E- f
*/! ?$ E- W+ Q" h' k

$ K  w( @3 P( n$ S/* no rts heap */
, p5 i  {+ v! z: K! r6 LProgram.heap = 0;, H8 `# b; v; g" @
Program.argSize = 100;  /* minimum size */+ [2 w) C" h- C9 n1 t, x
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
6 e) F( `0 a9 s, ]1 H3 o/ M9 t- K4 B
/* create a default heap */1 P+ J+ z+ V8 j) ^5 o" e. D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ N% L0 N- Z) z2 G2 Fvar heapMemParams = new HeapMem.Params();# Y4 M# v1 C! r, g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 l( _9 [8 o  D. A- Z; a
- ]+ }* [9 b" R" @
var Memory = xdc.useModule('xdc.runtime.Memory');. k) z& S0 F3 [. c# X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 j$ S; q. V) R$ g, W- @; X- p3 U
( y7 S5 W9 M" P4 `: Q* |) [- U2 ?
/* configure System module */& n' ]+ Y* {' i# g" e
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( M: L6 `( e. D( e7 d9 {0 n3 NSysMin.bufSize = 0x1000;
( q# w' X' F" SSysMin.flushAtExit = false;
! k+ G. J4 E: u5 i" \( W. M7 `6 W" Y$ ?0 k2 U& V2 @- a3 S
var System = xdc.useModule('xdc.runtime.System');) s% ?. F0 c6 L$ {
System.SupportProxy = SysMin;
8 R) D, d/ S0 p8 G/ X' ]6 T& X% |6 e) H' k$ w$ e
/* configure SysBios to use the lower half of Timer 1 */
0 u5 K: A9 p9 Q% l  L+ f$ g2 h% cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, V7 W/ M& O% xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');% `0 M  j7 a  |) e) H" C
Timer.timerSettings[1].master = true;$ v( R0 R3 R; L! z& P  n& x
Timer.defaultHalf = Timer.Half_LOWER;, P$ }; H; i+ }
Clock.timerId = 1;8 h+ @8 ~( l9 K

6 G1 H) V: @8 s: {' B/ z# u# ]! t% t: _% r/ {) ~6 _; W
/*
& u; I) c" t  Z' l- S *  ======== Miscellaneous Configuration ========
& V! ~) ~& Z6 w/ s */# V: R( }0 O( M# L: G0 b

- F8 ?& g  n  [% Q* w( m+ m/* set default diags mask */
7 {' d3 P2 F6 Q, x8 c* |, {var Diags = xdc.useModule('xdc.runtime.Diags');
3 ~* d) a3 j: ivar Defaults = xdc.useModule('xdc.runtime.Defaults');  Z/ u0 V( D1 K* m! j( T) k0 J2 i
% u* E3 r0 a6 \, Y8 U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 N- N: t1 c* n& |$ B( K  f- e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ h% U% C" F3 y3 @7 p& bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 R, v2 f* e3 ~8 T8 Q7 n0 E% _' VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! B) l; U3 s* o2 y& c' P6 e  ?
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 u) N2 H# B1 o, q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 k7 u/ @# N& @3 \6 |+ O# W5 t/ E" r
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 {8 M" I6 W! L% |: D- @+ y2 z; h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 u1 w  N+ A, D0 Y, j; A! p/ {/ YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: k  u& v! b/ V  P8 P4 `
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 R( M8 o" r6 ?3 P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 G! d/ t- j+ s# I9 h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 q$ \1 ?8 T+ O# W  [  F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* \& x- ~4 J% z2 I& _4 p9 e/ g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 `% b5 s  W6 f. k4 q# {0 g9 i
& L" o; j8 r, x
/* override diags mask for selected modules */
% N, X% j% U3 b& ]0 wxdc.useModule('xdc.runtime.Main');
- J$ l% i% P) B& ^" BDiags.setMaskMeta(: K( C/ K- }1 S1 P/ }
    "xdc.runtime.Main",6 O# [- S/ `" A: p& T/ H
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; {, S: R" p! c6 \/ g0 U
    Diags.RUNTIME_ON$ d3 i) E" L: f; t" G8 z4 f. Y
);
; D3 D5 w0 g: m$ o
9 c( Y( |6 D+ Y- m. B5 q: b$ O( \var Registry = xdc.useModule('xdc.runtime.Registry');
, }7 F# L: W9 H# v3 O! ?2 y7 mRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% U$ B& b) u8 d, T: {+ }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 a1 u/ ]3 R8 y6 K! a0 @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ k0 q: [; i* p+ K6 w7 g% F4 c1 HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% }! g7 O/ V1 ]
# p8 W; M# T! M+ }- o: Z  [' [/* create a logger instance */
* p; W0 l- W7 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' F% S7 o1 t9 n+ M4 {% _
var loggerBufP = new LoggerBuf.Params();
  q9 i+ R; ?' G" PloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 m  N, H" `# l* B3 J( \7 H5 {$ rloggerBufP.bufType = LoggerBuf.BufType_FIXED;2 |, ]1 o0 w+ D+ a
. h* r3 o3 q+ e4 I4 j! {$ K
var appLogger = LoggerBuf.create(loggerBufP);5 }1 t$ `5 j- L$ ^# }: y: O
appLogger.instance.name = "AppLog_Core1";
, p0 z, u. D3 TDefaults.common$.logger = appLogger;; B+ w! N: C+ M# w$ f  w! G( W
Memory.defaultHeapSize = 0x8192;    . |4 t6 N8 d4 b. n' [
Idle.idleFxns[0] = "&LEDStatus";
) H3 ]& F. s5 s; O8 y& V/ |" wCache.initSize.l2Size = Cache.L2Size_32K;
" [9 O0 w8 X% y/ T& j$ T( L& o2 a# t& x  Y3 I; H
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 23:46 , Processed in 0.041998 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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