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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

4 N: _" C0 U% P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2567 U& R0 X1 E' x% J% L

4 j' j9 Z) R4 h2 t' U1 |4 W2 ^其他程序段。。。。。4 s8 a" E/ O& Y' @$ k
3 H; x4 w: V6 ?+ y5 a
   free(x_d);
; T6 P; B" p+ K9 b, b7 N/ A# a; }+ w! I: z
使用DSP侧单独调试功能,验证动态申请没有问题,% I$ }( ?, j8 c. H/ {3 M

. l3 D" [6 i; y1 w5 e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, U: [" r; Y9 C1 W* A. O& f
( ~$ T: i$ u# b9 t/ W9 Y- b: O

- [) R, w' r! H+ n0 l& D4 S1 U! V0 E2 s) c, N/ q  {
/ K6 P, {3 r1 P! z; r
' y6 Z% {, U1 L- ]2 g2 l0 w& [  d7 Z

0 v! I  }+ E( y/ g! u& D' S/ N
4 _6 ^' l1 R( G$ ]% C! h
' `% P; E8 I, s8 O! s* S7 u" o% M: M! `0 E) }8 T6 ^2 P

/ I4 n* g/ M7 b7 o0 j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! i7 L& Z, `0 g& _% F6 L6 w8 F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 {. E% M; X) Z$ h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 g$ h# M: ?2 k3 _
3 y! b$ o  {$ n, T4 [
是不是需要在DSP.CFG中进行配置/ x# s- W& `3 d
我现在的配置为
0 \- O! a0 Y4 a5 L
0 K  s4 K5 s5 P6 N7 H8 k; ?/*( E7 `  K9 g& c, f1 k; M
*  ======== Operating System Configuration ========
7 q# P  T* h, M* r( d8 M */
7 h) A% [) M& ]* H7 S8 K$ \3 `2 b4 k" ]: Q# j" v+ b  w
/* no rts heap */& M' \$ d) k% K& [! M3 B" d- S; Y
Program.heap = 0;& a0 K# l/ l# V* K$ ^) t8 }# ]
Program.argSize = 100;  /* minimum size */
- {1 V9 T: q( f; u- KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; p( `( C7 X8 A" F' w

- T! R0 p  }/ T7 y( \" ^( D2 X/* create a default heap */, e9 A. m$ b  `: ]( f. d/ B
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 x. V' n+ ^( X* Q% e
var heapMemParams = new HeapMem.Params();
6 T- X9 u- R8 U1 r. F# t/ v1 TheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 a* N9 x7 l& v* P) K- e

1 `3 x# q8 w1 \! W! f) ?* ?
var Memory = xdc.useModule('xdc.runtime.Memory');8 Q" A3 L. s; d- \$ K7 Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# d/ F" ?; V. P2 M% S5 ^
- `6 Q* r7 X& ~7 I, y. F/* configure System module */: b7 D( o# p, c' R" A4 ~4 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');* v. [) k5 j. O% [2 ]% B7 s3 P
SysMin.bufSize = 0x1000;5 |5 |, ^. L9 H
SysMin.flushAtExit = false;
6 ?& y4 X# r) ?: `
! X+ B! S0 y) T8 zvar System = xdc.useModule('xdc.runtime.System');
& h, `5 k: D8 j' u  u5 ?System.SupportProxy = SysMin;
, q$ c4 Q; c. V  w, z( `
, L# I: M% _1 j7 L/ E/ P) B. i/* configure SysBios to use the lower half of Timer 1 */& H9 G) y" W  b; A
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 ~1 u0 ~' x5 k: R- ^! l6 a* ~! t* o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 X2 B$ H. x- q# Q& {
Timer.timerSettings[1].master = true;$ i2 R% Z+ l6 P, y
Timer.defaultHalf = Timer.Half_LOWER;
/ c' T9 @) s, k: `Clock.timerId = 1;
$ O' ~- q7 Z- [# y! P8 b
1 w, n) ]( K% v# ?- J' r- n3 V/ F+ d( z& d- o( J# Z
/*; A# P& c& k) {
*  ======== Miscellaneous Configuration ========) H* I/ w$ w- I7 [1 T9 v2 S
*/
8 b; V" ^2 j" l7 T6 X9 v' J3 K; W5 e6 N) Q" p) T
/* set default diags mask */1 ?5 `# ~. \$ B
var Diags = xdc.useModule('xdc.runtime.Diags');
6 k/ N3 p4 I; v1 d# Z4 J& I5 B! D: i, uvar Defaults = xdc.useModule('xdc.runtime.Defaults');# f, D  Q1 |7 R# M

  z, j9 Z3 Y# U2 L- Y& _' C" w6 DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: ~! C6 Z1 |' V; U' C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: s$ b4 _' r2 s# t
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 ~, z5 X: s' b6 s- PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* z' t) C# q: m8 W  ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 D4 ?$ G! B  H" \+ q# TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! [8 }9 b, D, a; `6 r: W8 z) t: [0 Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 _: q1 i/ U7 B2 _2 }
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 H- B6 T( o( ?, C$ z% k4 [- d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 ]6 w9 s1 l# Y# z( `* N( x
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) |9 L0 P8 K% I* VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ G; x9 Q0 d9 H8 n. F  [% L- y7 _# \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 E" |0 S6 L0 q) S8 f2 |4 B% i' D; RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 L% B3 |9 }  K: C. S% P- I/ p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: {% q# i. j( g! m7 Y
, @' g0 F0 K+ G) s( H) y
/* override diags mask for selected modules */
- ~& H. Y) i+ [! t. mxdc.useModule('xdc.runtime.Main');
: z% X3 F% G/ |! vDiags.setMaskMeta(
6 Y  \  u* l1 |: d    "xdc.runtime.Main",4 Z& ^/ M$ A% ?  s" g; t' w2 t# l* |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' e) a$ G$ T  A8 g* X$ G    Diags.RUNTIME_ON
' [$ f. Q$ r( a' s! N4 s# z3 j3 O);$ w# N, y3 N) e* K8 a. c; O$ d3 \
' W" X; d' _+ X
var Registry = xdc.useModule('xdc.runtime.Registry');- r/ M( M$ X0 E- q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 r2 N9 I# k* k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, u6 q8 M2 C/ l4 A' a" P8 m  l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 M( I* {4 b1 z4 p- I, L" Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' q4 |* F8 k, S. [2 i2 `6 w% H$ O' J& c# M" C5 s/ k
/* create a logger instance */: c+ k) U) c9 x% b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 _/ k; l/ o1 W& ^, j
var loggerBufP = new LoggerBuf.Params();1 V' R- W* M  z, o5 \, H
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 ?9 _3 s6 m" J. [% C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;7 j4 B. d& C& d

* V6 ^4 {. w1 Gvar appLogger = LoggerBuf.create(loggerBufP);/ g5 c# H7 D4 s8 x0 n2 _) z
appLogger.instance.name = "AppLog_Core1";& {: N7 I# H+ V  [+ f+ H
Defaults.common$.logger = appLogger;! f) R* a; L( B
Memory.defaultHeapSize = 0x8192;   
# M" m4 W+ L+ v* ^' a1 WIdle.idleFxns[0] = "&LEDStatus";3 w  a/ K7 O2 N0 S! t
Cache.initSize.l2Size = Cache.L2Size_32K;
8 n0 ^8 t; h1 M7 e+ N2 |( n" |2 z+ B: m
回复 支持 反对

使用道具 举报

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 */6 j* U/ u5 j! e- f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# R* |' s8 p; Y! k" X* Zvar heapMemParams = new HeapMem.Params();
/ Z8 ~( L% d" y' k1 _heapMemParams.size = 0x4000;( P! G' ]; R' v6 H) v5 D7 T

8 w9 O; V3 q% m- U2 r0 c  evar Memory = xdc.useModule('xdc.runtime.Memory');* o, l: ~; K1 R& m$ f! O( d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ i. p9 m" C7 g% b
4 B4 p9 L# C, y# x我大约calloc  每次共计大小为5K*16bits,) ^, J7 z  f$ S; N+ B' m
而默认配置才0x4000、需要改大。2 K+ d6 C- B5 Z+ j7 X, ^

, s9 r/ F# l3 |" a6 G) h4 {' ]8 h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. A) v' l8 m4 a7 d6 O, Q
Program.heap = 0;
8 N) Q8 e# v; ?" FProgram.argSize = 100;  /* minimum size */  J, R9 Y1 y/ ~+ [, O( G1 B4 Z
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-9 07:03 , Processed in 0.043795 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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