关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 `- Z9 d1 w& t% D; A7 o8 P2 L
; x$ b6 v) z+ w( q2 r    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  _0 e2 G5 e" v- |
+ x: l) R9 |% N其他程序段。。。。。
/ ]& x+ j3 y2 a  }, ?
. o. f6 z3 e& v5 u0 ?! }   free(x_d);1 B, v: r4 k4 |  h3 R9 r* T
; F7 U5 `& f6 M0 u
使用DSP侧单独调试功能,验证动态申请没有问题,
6 q/ g* R8 A+ {. p# b) _4 I) Q: o
7 c6 i& z5 ~9 Q2 [/ \- A3 e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 v+ i" E- j: v7 t- E

# e$ u9 ?3 q7 j# A/ [
3 T  j2 C0 f, G+ C8 W# q& F) a; X  ?4 ^' X

6 ^# p1 b0 k8 F% b
4 P( h- n- U$ u- F# ~8 T0 _2 p( j6 z; `; u
- y0 h/ E" L2 r$ N+ w# R1 f
! C% D/ v" l; r0 i+ R0 K
" k( s) u7 Y/ D4 A: m
7 `$ A( |. W6 l7 `" p$ c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 O5 a' A- _+ z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 v' j* p' F6 {8 \(不过疑惑的是,为何单独DSP仿真就没有问题呢?): {9 S) c2 h5 X& F! \; ?
# H+ c! O7 D0 t; o  ^+ T
是不是需要在DSP.CFG中进行配置. L7 X/ b0 j" L5 ^# H- L
我现在的配置为0 s- {* [* U+ \, e% B/ L. o
/ H6 r  m9 }5 O+ H% b4 C6 f" M; `
/*
  x3 ^7 r9 V: l' w  Y7 ?) f. W *  ======== Operating System Configuration ========" S/ v( u$ X* u6 o. x" n' }
*/
( q- p$ v( Y3 P% D3 R% G1 f
& P- r; k6 M5 ]8 e4 i2 V6 g: P* V% p+ L/ s/* no rts heap */
& q& S! X2 j- j% ~- {5 d, ^Program.heap = 0;
4 Z7 F- V+ f. s! u4 F; @Program.argSize = 100;  /* minimum size */
1 n) F' q# _7 A5 O. WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 p1 u- \2 E  D+ g5 \

; _2 [3 F+ ?# R. T# o- S2 k: Z/* create a default heap */
7 n1 i5 U, Z: X9 L, bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ u+ [" O7 o7 K- Y6 z
var heapMemParams = new HeapMem.Params();/ {; z5 o1 P% a2 \4 E8 Z. V
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 S# ]/ o  _* }# g
+ f; q1 Z- D  n1 y9 K  X8 E
var Memory = xdc.useModule('xdc.runtime.Memory');
$ {" L! h( ^& n' OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 Z, P" F  A0 K' z4 p

2 ~8 y  K: ]; r  e/* configure System module */. ?. N* p6 h7 [$ Y- @& N* c* ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');# v* \; m# n! w
SysMin.bufSize = 0x1000;1 X# J. i7 z! p8 _
SysMin.flushAtExit = false;
! `+ p" Y  q3 X/ `$ S+ [9 P
% Z$ Q' k* u' f& T# Y* y: \6 Tvar System = xdc.useModule('xdc.runtime.System');5 H$ x" s6 V6 {1 f% W
System.SupportProxy = SysMin;
0 N3 `( z  ^5 G6 i6 F- m; z
- r& [, s3 \: H/* configure SysBios to use the lower half of Timer 1 */) h. d5 O" {6 ?. p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ V, y5 r4 z- d) {+ ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  A" P! m, Z! O5 L7 D2 YTimer.timerSettings[1].master = true;
, o6 n0 w1 N; b! I  q( x& [- eTimer.defaultHalf = Timer.Half_LOWER;! r1 ~5 w* C9 F8 S2 G; e0 f8 f
Clock.timerId = 1;. {- z* Q' C3 H$ w( s
) B; o" p3 [' c- N3 d% V  V
2 B( j) c! j. E
/*
6 ^9 }* f$ B; s/ V. K! y" {- z6 k" _: P *  ======== Miscellaneous Configuration ========
) w1 l) z0 h; F2 ]7 ? */( u! }7 _, m) k: y+ q8 ]3 A
5 W0 h5 p( ^0 s) s! E1 B$ F7 t
/* set default diags mask */% g  P4 M1 K4 F' k) \
var Diags = xdc.useModule('xdc.runtime.Diags');
0 \- y; U7 ]6 I; t, s' Y. `var Defaults = xdc.useModule('xdc.runtime.Defaults');8 k8 F: m6 `- m" E

' M+ ~3 U( {) P8 |" N- z7 ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# d& ^) H' c/ u, q6 |% CDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 y" q: i1 D' H4 V4 ~  B3 W1 RDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' X6 L0 t: |4 o3 w. WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 S; O- ]" q$ [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 G8 e$ ^; A+ J2 k- BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" W+ C: E" P, d. c: u( e
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 I' q4 ?2 A. f8 x  ~  X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 b8 h1 t. n5 Y& {: c! w1 m+ wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;& d9 C; k) ^) C% I4 b  K/ I8 |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' i; N: R/ C8 L6 x
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 p9 ?: w7 j9 Y9 I  c8 b  X. aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 j, q5 m7 \9 Z0 i! WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 t0 h# P# q: ]9 G/ tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 t5 ]( N& D0 d5 C7 ?
5 H5 H9 h! {- n9 K, U" ^/* override diags mask for selected modules */8 J" x8 o' r; O" a0 X5 S
xdc.useModule('xdc.runtime.Main');9 S( ?5 E# ^8 B  Z
Diags.setMaskMeta(
' e; D( f# \% y; ?5 D6 ]$ E    "xdc.runtime.Main",. i2 s- Q; M* p( h6 g# h( m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
: Q1 l" }7 V* e, V' G3 _6 H    Diags.RUNTIME_ON
" Z5 @3 p( T# p% e' @  X);
, _- o$ s  l# X7 y6 c3 Y1 a, l, x# B0 B2 l
var Registry = xdc.useModule('xdc.runtime.Registry');' Y/ ^! ~, t0 ^" a7 N& r+ s) y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* d$ ~8 R& t. U8 k+ l8 `2 s
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% Y$ `0 A1 x3 A: l3 ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: S9 S; ?) U/ b- O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' A% U4 r+ x, Q+ k& d! ?- h: Y6 `; w0 L8 q
/* create a logger instance */
  y- H- M) ?9 Z9 L6 ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 J4 A3 w0 e1 k! e' G1 L/ G! Z
var loggerBufP = new LoggerBuf.Params();
& w8 K/ ~* r3 o- L( W9 G( SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  b9 U" |# I: w1 S
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
& E; o" \, N, A0 H! L6 _. n5 ?6 C6 R4 F9 O+ h3 W6 y3 o1 [2 z) v
var appLogger = LoggerBuf.create(loggerBufP);
; Y7 S- S5 c/ x9 mappLogger.instance.name = "AppLog_Core1";
1 G* Y. X4 b& JDefaults.common$.logger = appLogger;: M9 ^5 v. G+ x: s& C7 x) P
Memory.defaultHeapSize = 0x8192;    * m& S# t& c1 `* P1 h
Idle.idleFxns[0] = "&LEDStatus";1 b: F+ b6 j0 R3 Y1 [# u
Cache.initSize.l2Size = Cache.L2Size_32K;$ e0 C$ P  }1 i  \+ f- @

0 R# u* i. |7 ^$ Z
回复 支持 反对

使用道具 举报

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 */1 A+ |% y' J8 N; d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ F( i  z% ~% }0 A. ]( \: Jvar heapMemParams = new HeapMem.Params();$ Y# j. G4 G3 Q: T7 K
heapMemParams.size = 0x4000;0 S$ a2 u- `7 a- V. R2 D. L
5 I" p- n8 B8 I, `, b8 C/ t
var Memory = xdc.useModule('xdc.runtime.Memory');/ P; {" ?* t- B* w' \9 X7 K$ L6 O+ L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 W8 {* G0 b$ G& u, P: N9 X. F% S1 ~6 A0 y; @% E- k
我大约calloc  每次共计大小为5K*16bits,
7 N" E- w( r7 }/ {# _1 k  x而默认配置才0x4000、需要改大。
8 D0 @3 {( |* C9 Z! g7 s# `4 T* `8 v: o* f' E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 @& B6 m5 m4 J! l  W2 v4 a% M5 G, OProgram.heap = 0;
  b5 d& Q5 b* a) I! W9 LProgram.argSize = 100;  /* minimum size */  c9 A1 z- g' X* g0 c
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 23:19 , Processed in 0.040399 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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