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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) p% K" i8 _; l/ `
; b/ a1 W+ o0 Y4 r- e7 r6 x
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
& I" Q) j' h. r$ R' L- J; V/ z) k+ Y# H: y
其他程序段。。。。。" ?# m, c' q! x' U

" `2 e1 e; ~- v2 {5 I1 y   free(x_d);
7 j4 d, S& S( Z& M  Y4 |8 H& f
  b8 g  L& y! F9 [' m- z使用DSP侧单独调试功能,验证动态申请没有问题,
7 P1 p& W" ~1 [3 m! P9 Y# `
) B* q" f9 G$ t* G, ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( ]. w! c, Y8 q/ x) x( d

( \0 k$ a9 E  t; u
5 I7 h1 V5 K& F! @$ Q$ h6 q% ~: Y0 x) A( }3 r# r7 H2 Z: Q# V
( `/ n& y' C  \$ g0 b
* j3 i5 p; \) B# p3 Y
( f" L3 M2 ^. h% T8 k" E

" H4 r' D- F0 k! g4 C
8 h  s+ f* |; t2 G; W9 [' @; m+ l0 ~3 I
% e( s) ^3 w0 y4 U5 V; N$ }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 Z9 G! q) l' z0 l% M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ w+ ]+ X- @6 w" B, _0 V4 `6 u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 L' g: y+ p% Y. t
/ I+ o/ {" S- s
是不是需要在DSP.CFG中进行配置
1 c' i" l8 b  i, I- h) j我现在的配置为
) Z1 c! a$ K9 Y
0 b! z6 T: A% ]% z+ R# e3 S: X/*
' o; V/ l8 H# E6 z  _; w( p *  ======== Operating System Configuration ========
! U7 X2 b' @: h. O) q, l1 }6 m+ P */
6 }3 e+ z( u+ i3 W8 e& E$ d: C1 [$ W0 t2 ~7 G6 o+ C- R, y7 C
/* no rts heap */; h3 O' k5 N9 {* S$ W! T
Program.heap = 0;6 e8 p/ k" y( G9 |4 ^
Program.argSize = 100;  /* minimum size */0 S$ f7 _: K+ P& A2 u  l: @8 x
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. Z1 z% H! G/ z; s6 k' j: Q
' D& k. K1 a8 j1 |4 n9 G/* create a default heap */
3 e- @5 ^; h" N4 x3 F  v# Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ ^9 k/ M! `, q5 h+ N6 s
var heapMemParams = new HeapMem.Params();
% |2 W6 J! @& z  [heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) ]1 @8 c2 ?& ]4 p" E$ C) j
# ^9 q& z3 I7 H* E
var Memory = xdc.useModule('xdc.runtime.Memory');
5 b6 `5 ^7 A, s! [  kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( S% `  B( T: G/ ~- ]' o

) I9 e9 ~( K- u  X1 Y: F/* configure System module */
& E- T3 b+ q9 |3 {; r+ Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- a# b0 h1 m" |* n& D5 b; kSysMin.bufSize = 0x1000;
6 L7 q" F; \1 P$ X; ]+ l5 ESysMin.flushAtExit = false;! E6 T" {% t2 `! U( k
; J  G5 z3 @' x' i4 z5 a
var System = xdc.useModule('xdc.runtime.System');: _0 A" C' _4 w  x
System.SupportProxy = SysMin;
% v9 [: p# {$ _" `" _* v# a/ j8 }# W! V# H% i' \. v# X  i. x
/* configure SysBios to use the lower half of Timer 1 */
  L$ M' L$ h( x  [  k% d3 _1 svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( C8 e! O: t" M" y9 t/ `8 u  d0 o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 ]0 N( J$ B- S5 \: i: M
Timer.timerSettings[1].master = true;/ s) k7 Q/ O( v$ R; X
Timer.defaultHalf = Timer.Half_LOWER;- L! r9 [& q* B# Z6 z
Clock.timerId = 1;
) B- ^# V$ F) X  F5 u3 I
: O) L1 t. s- B/ C  c% d6 D5 k$ j' m
/*6 t( J( r- b$ d2 P
*  ======== Miscellaneous Configuration ========5 {! E  w$ k5 ]
*/; v% R, c2 U. T$ o
* z. A! n9 {& Y) R
/* set default diags mask */
6 q5 r+ m& y! g% D$ Zvar Diags = xdc.useModule('xdc.runtime.Diags');
* d9 Z3 F! H3 |7 svar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 o0 |( {- F! N/ ~9 v' a8 P- J- }3 V+ J& e3 ^. f4 i; N/ M# B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 \# m& n" r( g) o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ N+ p4 {: a' j. \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- s/ Y  N( l) T  l- w+ s/ s
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ R  l4 c- U' F! |- cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: J4 j! U7 E, z$ u- F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ o' h8 F( i9 o* Y: o- w% ZDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ H' j' _( A1 o4 b4 K! m- ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 q, A0 s2 O( l9 z+ z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ ^) w( q! O4 s$ {# n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 `& ]8 c; P1 J* e9 N1 _Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: S+ }& W9 A/ `6 P- u, DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 ?6 W& s( i6 E' e1 l& G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 D: o# U2 q. \6 w% N" X. HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( p3 O' b% H2 c+ G6 t/ g3 a. g& F  I- U! F9 H
/* override diags mask for selected modules */5 ]: Q9 r' r5 C# z! C
xdc.useModule('xdc.runtime.Main');9 B$ j' R( a8 Z8 Y
Diags.setMaskMeta(2 v- t8 U4 V1 L$ z7 q& _3 C, b! G2 l
    "xdc.runtime.Main",
) _1 I. O9 m, Z0 S, K    Diags.ENTRY | Diags.EXIT | Diags.INFO,# I; k( n' A- g
    Diags.RUNTIME_ON0 H3 @: h1 }) R* t. J2 d
);
, A. y4 j  X; t! h2 q
# w- j3 K' q8 O$ |: Vvar Registry = xdc.useModule('xdc.runtime.Registry');
2 V1 Z  K2 f2 p8 P5 TRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 k) o: g/ y  j& r8 w: Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 g+ D; c1 T* ^2 l9 N
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ }0 }! {; {, T# m+ }+ ]Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; B6 \1 \1 M3 l4 G7 O2 p5 R

' [7 H- L5 Y/ w  O/* create a logger instance */' ~1 [! d4 Z7 Y8 j4 i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" i+ K+ M3 Y- l" o
var loggerBufP = new LoggerBuf.Params();
9 [2 k6 k2 x+ X' K; UloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 y7 \% l& Y0 k9 W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ N) W, j: ]% W+ g# g6 `

) P% ^' i* O, @( g. f# @4 @var appLogger = LoggerBuf.create(loggerBufP);
* Y+ p  P! U: G1 u7 tappLogger.instance.name = "AppLog_Core1";+ [# c+ G' X% p( V+ y- _
Defaults.common$.logger = appLogger;
$ Q2 a5 J2 s) DMemory.defaultHeapSize = 0x8192;   
/ p) U  t! F; {4 W2 b* K: j: DIdle.idleFxns[0] = "&LEDStatus";
7 {- W/ ~5 A/ v% zCache.initSize.l2Size = Cache.L2Size_32K;
6 \. J1 x( t- X. {
# r! Q. I( s- w* S1 y. l' 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 */
# X0 r) g5 `& t# I* zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: k9 q/ @; W  Q+ }3 F
var heapMemParams = new HeapMem.Params();
  ]$ }9 w# ?) t8 c/ NheapMemParams.size = 0x4000;! ~- |4 a7 c: T7 O" r( ^

' A" G) O. J2 B9 g4 evar Memory = xdc.useModule('xdc.runtime.Memory');0 A( I+ P, x/ J8 K, e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- Z# J; L1 e- _8 v7 S

; H- v' J- U$ O5 j% F4 z我大约calloc  每次共计大小为5K*16bits,, A6 q) K/ @: R( u- L- J( b$ m
而默认配置才0x4000、需要改大。4 W5 J! a* U$ Q  g
) w* e  y- f8 S# A, f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( {% ]% v! r3 W; a$ oProgram.heap = 0;( F6 _2 w# j* y7 W2 h, Y
Program.argSize = 100;  /* minimum size */- w/ t% f- U! Q# Q' t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 07:17 , Processed in 0.061575 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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