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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 _8 f' q' c2 R
/ c" @* w" O: ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ G: ?5 W) Q8 e1 o; J
: M  v% P/ u5 k" U0 M) @4 m其他程序段。。。。。$ w$ w& f6 `$ q8 `6 T
1 m+ J4 |/ C1 V. d1 u7 \3 O
   free(x_d);& j6 s# s9 H+ b/ e( ?5 E3 M

. Z/ d' @; b  \7 V使用DSP侧单独调试功能,验证动态申请没有问题,. t6 v* S  U2 E. o/ M+ l: W7 s0 H

( i% z7 w0 j. E* G2 N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 ]. h, f- S; @* G( q* ?* S9 ^6 f$ [
/ |( `  S  B( c2 ^3 {  Z2 i

$ h; A- h3 B6 \. t1 v4 ~/ R1 s' E) k" j7 u6 e

. y3 l6 Q8 R9 ~5 a# q$ o/ Y7 x7 o, D( H3 V# F# C9 F  i
* ?5 n2 D& O$ b3 L, P1 G6 Z

( g; h; \, b9 p  z# C( h- O" e7 E! q3 j: \4 y9 F, s" a6 _
/ l: e& t3 c0 b& @0 r

. H0 Y* ?9 o  e. [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( a" e) r/ X+ h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  C9 N4 N/ g- |* G* ~6 M' o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 E0 h$ R& A5 F' c# M

7 S9 K8 h, K0 B' u# L! J是不是需要在DSP.CFG中进行配置
5 o1 S6 r# R) g' W我现在的配置为
8 `# t# y% K& _6 U# G* Y  t
% L: Y4 z( p. i+ l! H/*
3 g9 I+ [! |5 S$ d- d0 u *  ======== Operating System Configuration ========7 t8 X0 j- Q; {
*/
- X2 C( a3 t9 u: T9 O/ H9 F( d- W5 B" D& b. z
/* no rts heap */- |; _/ a- ~3 k. b! d3 g
Program.heap = 0;
4 p. m' d; K4 w2 t$ u( `' `Program.argSize = 100;  /* minimum size */
, ]- C* q& {# h- R8 s, j/ \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( ^) D0 D  [/ X$ D
) g1 L7 N/ s( z8 ^/* create a default heap */
0 o8 z, C1 y9 rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ X9 d' M! V( b9 r' V; l- Jvar heapMemParams = new HeapMem.Params();
3 h9 T# n& `! p2 r7 WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( A! N7 }, M" s% `" b! r4 U
/ K7 r" b' z( C5 ?
var Memory = xdc.useModule('xdc.runtime.Memory');
& ]2 h; R* W  F; E* tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 f" E2 O3 S+ D6 B0 A# G: \* O
  H0 ?0 J1 ~  p) c2 |9 D/* configure System module */% ?. S8 [4 g4 m% }, g
var SysMin = xdc.useModule('xdc.runtime.SysMin');% B  r' M2 A1 N! S3 U
SysMin.bufSize = 0x1000;$ |8 g# I5 ~4 P
SysMin.flushAtExit = false;  k% H0 S8 n) Z& [7 @

2 D  C0 ^: B' Y7 L0 {* L2 {var System = xdc.useModule('xdc.runtime.System');
/ ^! n, j5 d8 ySystem.SupportProxy = SysMin;- j' `; b% v5 K- R4 N3 }- |# n
1 s; f+ C/ M. i: q( U3 I
/* configure SysBios to use the lower half of Timer 1 */1 `- I& K- \; q  B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ z, E8 G7 ?7 ^! evar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ Q+ G6 u: t& ?' ?& b7 ~, G1 r
Timer.timerSettings[1].master = true;
0 Y8 j+ V+ Z# K3 x" z3 MTimer.defaultHalf = Timer.Half_LOWER;# e& N0 h2 l/ c, f
Clock.timerId = 1;: f: w) ^) v+ \' J5 j- S, J
! U; `1 }1 s5 R/ u0 g; J' M( M

8 ^: T) V9 \7 c* B) i' G/*
8 ~: ]7 X+ [6 m( [* o. G1 Y *  ======== Miscellaneous Configuration ========. E% K4 X% S7 F& c+ y5 H4 L; l
*/! u) U, U: f& Y  P  I1 L. v

" T) l( g# o5 h) A. I8 c$ ]/* set default diags mask */9 X: b' M9 r; G1 J; q( a, K+ g4 L! o
var Diags = xdc.useModule('xdc.runtime.Diags');
2 y, Q: ?" K7 v9 z! evar Defaults = xdc.useModule('xdc.runtime.Defaults');
7 [0 ]" d; D% {5 r* O% n7 G' O+ v; g  _# ]$ E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. u' n! ^0 j  o8 ~! l
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- D6 W0 f; Q6 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
5 p/ Q) W, ~( E/ R* V  g. ]$ B2 _" ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 ?$ f4 b6 m# M( CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: G& E2 W- a6 s: I. {$ |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 A$ }* J# ^: t& J% Q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 `6 O4 h# F3 D* l% h8 T+ b
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 {/ |, c0 U4 `) I1 F8 DDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( o; e# i5 D1 U# j+ z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 p- s1 P9 Q9 W& v4 m8 i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 b3 J3 v. n& M" z# Y" vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 U: i# \8 U9 `" K/ ?3 b" g
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' S/ F* D6 E% ?- ~
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# q- }3 M; b2 N

" D# s4 E9 w, \; B& D  J/* override diags mask for selected modules */
2 t8 x! m* V1 `8 I3 }$ s4 I$ dxdc.useModule('xdc.runtime.Main');
& g( W1 I* C- R7 T8 h0 jDiags.setMaskMeta(
5 H' W, s+ J% B% k% }: ^& v% x    "xdc.runtime.Main",
( R+ E* T7 F6 J4 K3 u    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 L& t3 D& m& J, ^1 R! Y6 `    Diags.RUNTIME_ON
* L$ A3 ?; y7 p/ R4 l);
+ Z& ?' a+ }9 x% o% }
* `% {, h+ S  v7 z$ x7 I" Lvar Registry = xdc.useModule('xdc.runtime.Registry');4 |8 Y( h+ t" ]5 e% ?' o8 ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ T+ a1 L2 O$ Y4 ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, E8 k9 A8 E0 J% U/ h" j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: C. d8 \/ C. s% ?' h: dRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# J9 _9 X- [  K& [( K1 i$ z8 b8 J1 t) X4 t7 g) Z
/* create a logger instance */9 C/ `( E2 b4 t$ A, u! Q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 h0 w3 \6 r- E5 H9 H* g
var loggerBufP = new LoggerBuf.Params();9 n5 S7 U6 h0 u, V/ ?9 i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; @3 x5 V( O3 O5 |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% _( L1 E0 M$ S0 Z( O/ H% p- K' K6 D4 E. q( b
var appLogger = LoggerBuf.create(loggerBufP);
- Q% M* w3 m; `: z  ^6 Z1 CappLogger.instance.name = "AppLog_Core1";
& }2 C$ x* _) G! IDefaults.common$.logger = appLogger;- W9 F6 W, E' n
Memory.defaultHeapSize = 0x8192;   
# F4 @, {; x, V, w% {Idle.idleFxns[0] = "&LEDStatus";; u0 |: ?: z* z' @" T
Cache.initSize.l2Size = Cache.L2Size_32K;# R5 Y" {, s8 c, c; U7 W

& p1 N4 O# ]6 z' t0 d
回复 支持 反对

使用道具 举报

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 */8 H! g0 e3 a1 r7 U$ c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ K. X; d% \- C3 |, Gvar heapMemParams = new HeapMem.Params();1 w" }  \1 w4 j  D
heapMemParams.size = 0x4000;$ D4 |5 i8 L- E9 f: S/ G; I
. {6 z% z: Z7 q9 x9 X' q
var Memory = xdc.useModule('xdc.runtime.Memory');6 a/ \3 q; _0 e/ {5 n0 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: t  Y% D2 D5 Q' {3 N( J7 b( E! G2 a+ K( h4 n, Y6 p! e
我大约calloc  每次共计大小为5K*16bits,
9 i4 d  G; d% o/ ]; S( I) X而默认配置才0x4000、需要改大。
8 D& C. A1 |. v  d
3 w0 n, x( [7 K  W6 p/ t/ {8 d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 b& a. D1 b0 ^/ [
Program.heap = 0;8 M& z5 F/ |) }( r8 q  x
Program.argSize = 100;  /* minimum size */
) @* y1 W5 O! S) t$ c7 rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-11 21:25 , Processed in 0.043032 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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